【Linux-网络编程】
Linux-网络编程
- ■ 网络结构
- ■ C/S结构
- ■ B/S结构
- ■ 网络模型
- ■ OSI七层模型
- ■ TCP/IP四层模型
- ■ TCP
- ■ TCP通信流程
- ■ TCP三次握手
- ■ TCP四次挥手
- ■ 套接字:socket = 主机IP + 主机上的进程(端口号)
- ■ TCP传输文件
■ 网络结构
■ C/S结构
客户机-服务器(client-server)结构。服务器完成对数据的管理,客户机完成与用户的交互任
务。
■ B/S结构
B/S结构(浏览器、服务器模式)是web兴起后的一种网络结构模式,
■ 网络模型
■ OSI七层模型

| 属性 | 描述 |
|---|---|
| 应用层: | 网络服务与最终用户的一个接口。这一层为用户的应用程序(例如电子邮件、文件传输和 终端仿真) 提供网络服务。 |
| 表示层: | 即带来格式化的表达和变换数据服务。数据的压缩和解压缩,加密和解密等工作都由表示层承担。 |
| 会话层: | 通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求。 |
| 传输层: | 定义了一些传输数据的协议和端口号。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这 一层数据叫做段。 传输层负责端到端的传输(源主机和目的主机)。 传输层可选择TCP或UDP协议 |
| 网络层: | 路由器 路由器需要将进来的数据包拆掉网络层和数据链路层两层首部并重新封装. IP协议不保证传输的可能性,数据包在传输过程中可能丢失,可靠性在上层协议或应用程序中提供支持。 |
| 数据链路层: | 交换机 |
| 物理层: | 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。这一层的数据叫做比特。 |
■ TCP/IP四层模型


如果两台计算机在不同的网段中。那么数据从一台计算机到另一台计算机传输中要经过一个或多个路由器。

■ TCP
■ TCP通信流程

■ TCP三次握手

第一次握手:
1.客户端将SYN标志位置为1
2.生成一个随机的32位的序号seq=J ,这个序号后边是可以携带数据(数据的大小)
第二次握手:
1.服务器端接收客户端的连接:ACK=1
2.服务器会回发一个确认序号: ack=客户端的序号+数据长度(上图中假设传输数据为0,仅SYN占据了一个字节)+SYN/FIN(按一个字节算)
3.服务器端会向客户端发起连接请求: SYN=1
4.服务器会生成一个随机序号:seq =K
第三次握手:
1.客户单应答服务器的连接请求:ACK=1
2.客户端回复收到了服务器端的数据:ack=服务端的序号+数据长度+SYN/FIN(按一个字节算)
seq为序号,ack为确认序号。仅当SYN=1的时候,序号seq才有用。同理,仅当ACK=1的时候,确认序号ack才有用。
为什么是3次握手呢?
通过3次握手才能够确定客户端的发送数据、数据数据的功能正常。服务器端的接收数据和发送数据正常。2次握手显然无法证明,比如客户端端发送SYN连接请求,服务器端回应ACK报文并发送,那么只能证明客户端发送数据正常,接收数据的能力不能确定。4次握手也可以达到,但是3次就能搞定,多花费一次没有必要。并且在三次握手的过程中,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸。
■ TCP四次挥手

- 客户端发送FIN位表示关闭连接的请求
- 服务器应答客户端的关闭连接请求
- 服务器处理完缓冲区中的数据后(做出了相应的应答),向客户端发送FIN表示关闭连接
- 客户端应答服务器的关闭连接请求
■ 套接字:socket = 主机IP + 主机上的进程(端口号)
标识网络中的唯一一个进程
socket实际上是一个文件描述符,只不过文本描述符走的是io,而socket走的是网络;
■ TCP传输文件
- 先发送文件名,和文件大小,在发送文件内容,当接收到大小和文件一样大小一样就知道文件发送完成。
- 接收端为新建文件,在将内容追加到文件中, 就算文件发送完成。
相关文章:
【Linux-网络编程】
Linux-网络编程 ■ 网络结构■ C/S结构■ B/S结构 ■ 网络模型■ OSI七层模型■ TCP/IP四层模型 ■ TCP■ TCP通信流程■ TCP三次握手■ TCP四次挥手 ■ 套接字:socket 主机IP 主机上的进程(端口号)■ TCP传输文件 ■ 网络结构 ■ C/S结构…...
win10虚拟机安装驱动教程
在虚拟机菜单栏中选择安装VMware Tools: 安装好后,在虚拟机中打开此电脑,双击DVD驱动器进行安装: 一直点击下一步: 安装完成: 此时重启虚拟机,发面小屏幕页面的虚拟机自动占满了全部屏幕&#x…...
SpringBoot实战项目——博客笔记项目
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍二、项目的整体框架 2.1 数据库模块 2.2 前端模块 2.3 后端模块三、项目图片展示四、项目的实现 4.1 准备工作 4.…...
【海贼王的数据航海】排序——直接选择排序|堆排序
目录 1 -> 选择排序 1.1 -> 基本思想 1.2 -> 直接选择排序 1.2.1 -> 代码实现 1.3 -> 堆排序 1.3.1 -> 代码实现 1 -> 选择排序 1.1 -> 基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置&…...
Flutter 的 switch 语句补遗
我的 App 里,一个消息气泡变成空白了,非常奇怪,此前一直是没问题的,经过调试定位我发现: static TextSpan _buildRootSpan(BuildContext ctx, List<LinkifyElement> parts, TextStyle? style) {List<InlineS…...
Linux动态库*.so函数名修改
在某些学习或者特殊需求的情况下要对linux下动态库*.so文件内部的函数名进行修改。 比如一个函数ADD(int a,int b);修改为Add(int a,int b); 通过这篇文章你将了解到在linux下动态库函数名寻址的规则,截止2024年3月linux动态库的寻址规则已经出现多种,这…...
adb shell 指令集
1.connect device连接设备: adb devices #return: List of devices attached 0123456789ABCDEF device2.连接终端 adb shell从设备拷贝文件到本地 adb pull <remote> [local] 如: adb pull /sdcard/demo.txt e:\从到本地拷贝文件到设备 adb push &…...
【电子通识】CH340C与CH340G的区别
在USB转串口电路中,网上买到的模块常常用的到是CH340或是CP2102。 但是CH340也有很多的版本,比如CH340C和CH340G,那么他们到底都有哪些差别。 环境特性 从规格书中可以看出环境特性CH340G是-40度到85度,而CH340C批号不是4开头…...
基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的吸烟检测系统(深度学习+Python代码+PySide6界面+训练数据集)
摘要:本文详细说明了如何利用深度学习开发一个用于监测吸烟行为的系统,并分享了完整的代码实现。该系统采用了先进的YOLOv8算法,同时还使用YOLOv7、YOLOv6、YOLOv5算法,并对它们进行了性能比较,呈现了不同模型的性能指…...
Apache Paimon 使用之 Lookup Joins 解析
Lookup Join 是流式查询中的一种 Join,Join 要求一个表具有处理时间属性,另一个表由lookup source connector支持。 Paimon支持在主键表和附加表上进行Lookup Join。 a) 准备 创建一个Paimon表并实时更新它。 -- Create a paimon catalog CREATE CAT…...
GO语言-切片底层探索(下)
目录 切片的底层数据结构 扩容机制 总结: 练习验证代码 这是切片的底层探索下篇,上篇地址请见:GO语言-切片底层探索(上) 在上篇我们讲解了切片的两个重要实现或者说是两个特征 切片是引用类型,会进行…...
物理隔离条件下,如何安全高效地进行内外网文件导入导出?
内外网文件导入导出通常指的是在内部网络(内网)和外部网络(外网)之间传输文件的过程。这在企业环境中尤其常见,因为内部网络通常包含敏感数据,而外部网络(如互联网)则允许更广泛的访…...
代码随想录 贪心算法-难度题目-区间问题
目录 55.跳跃游戏 45.跳跃游戏|| 452.用最少数量的箭引爆气球 435.无重叠区间 763.划分字母区间 56.合并区间 55.跳跃游戏 55. 跳跃游戏 中等 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大…...
地理数据 vs. 3D数据
在表示我们周围的物理世界时,地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处,但它们不可互换。 虽然地…...
Redis删除
一、del命令 del命令是Redis提供的一个常规的删除键的命令。它的语法如下: DEL key [key …] 其中,key是要删除的键名。可以指定多个键名,删除多个键。如果指定的键不存在,则会被忽略。 del命令会直接删除指定的键以及与之相关联…...
力扣细节题:字符串中的最大奇数
奇数只要找到第一位是奇数的即可,不是找单个数字 //即从最低位开始,找到第一位为奇数的位 //然后之前的就是需要的数字char * largestOddNumber(char * num){int i strlen(num) - 1;while(i > 0){if((num[i] - 0) % 2 1)break;i--;}//先找到低位开…...
Unity PS5开发 天坑篇 之 申请开发者与硬件部署01
腾了好几天终于把PS5开发机调试部署成功, 希望能帮到国内的开发者, 主机游戏PlayStation/Nintendo Switch都是比较闭塞的,开发者账号是必须的。 开发环境有两个部分,一是DEV Kit 开发机, TEST Kit测试机两部分组成,二是Unity的支持库(安装后…...
十四届蓝桥杯省赛Java B组 合并区域
就是将两个矩阵进行拼接,两矩阵可以旋转90 180 270 度。 因为数据比较小,所以这基本上就是一个大的枚举模拟加搜索,直接暴力求解。 import java.io.*; import java.util.*;public class Main{static int n;static int N 101;static int mo…...
SpringBoot高级
1.自动配置-Condition Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载相应的Bean 进入 SpringBoot 启动类,点击进入 run() 可以看到这个方法是有返回值的,返回值为 ConfigurableApplicationConte…...
机试:偶数分解
题目描述: 代码示例: #include <bits/stdc.h> using namespace std; int main(){ // 算法思想1:遍历小于该偶数的所有素数,存入数组中,遍历数组找出两个数之和等于偶数的数int n;cout << "输入样例" << endl;cin >> n;int nums[n];int k …...
Linux内核驱动开发入门:我是如何给一个虚拟CDC ACM设备写“Hello World”驱动的
Linux内核驱动开发入门:手把手实现虚拟CDC ACM设备驱动 第一次接触Linux内核驱动开发时,面对复杂的代码结构和晦涩的概念,我完全摸不着头脑。直到导师扔给我一个USB转串口设备:"试试看能不能让它在Linux上工作"。经过两…...
SUNFLOWER MATCH LAB 效果深度评测:对比传统CNN与LSTM的识别性能
SUNFLOWER MATCH LAB 效果深度评测:对比传统CNN与LSTM的识别性能 向日葵的生长过程,就像一部无声的纪录片,每一天的叶片舒展、花盘转动都蕴含着丰富的信息。过去,我们想读懂这部纪录片,要么靠农学专家日复一日的田间观…...
如何利用 SEO 标题和关键词提高网站可发现性_如何利用 SEO 标题和关键词进行分析和优化
如何利用 SEO 标题和关键词提高网站可发现性 在当今的数字化时代,网站的可发现性直接关系到其流量和成功。在这个竞争激烈的环境中,搜索引擎优化(SEO)成为了提高网站可发现性的关键。其中,SEO标题和关键词的运用尤为重…...
OpenClaw定时任务管理:Qwen3-4B每日早报自动生成与推送
OpenClaw定时任务管理:Qwen3-4B每日早报自动生成与推送 1. 为什么需要自动化早报服务 每天早上打开电脑第一件事,就是查看行业动态和技术新闻。但手动收集整理的过程实在太耗时——要打开十几个网页,筛选有价值的信息,再整理成简…...
Ivanti EPMM RCE CVE-2026-1340/1281完整分析
介绍:近日,Ivanti公司披露了Ivanti Endpoint Manager Mobile (EPMM)中存在的代码注入漏洞(CVE-2026-1281和CVE-2026-1340),并确认已存在在野利用。该漏洞源于 Apache HTTPd 调用的 Bash 脚本在处理时间戳比较时,未能有效过滤恶意参数…...
OpenClaw定时任务:千问3.5-9B实现每日自动化巡检
OpenClaw定时任务:千问3.5-9B实现每日自动化巡检 1. 为什么需要自动化巡检 去年接手一个长期维护的Python项目时,我每天早晨都要手动检查服务器状态、数据库连接、日志错误和依赖库版本。这种重复劳动不仅耗时,还容易遗漏关键指标。直到发现…...
Symfony Monolog Bundle终极指南:如何快速搭建专业日志系统
Symfony Monolog Bundle终极指南:如何快速搭建专业日志系统 【免费下载链接】monolog-bundle Symfony Monolog Bundle 项目地址: https://gitcode.com/gh_mirrors/mo/monolog-bundle Symfony Monolog Bundle是Symfony框架中一款强大的日志管理工具࿰…...
2025_NIPS_RT V-Bench: Benchmarking MLLM Continuous Perception, Understanding and Reasoning through R
文章主要内容与创新点总结 一、主要内容 本文针对现有基准测试无法充分评估多模态大语言模型(MLLMs)在动态真实环境中持续感知、理解和推理能力的问题,提出了实时视频分析基准测试集RT V-Bench。该基准包含552个多样化视频(总时长167.2小时)和4631个高质量问答对,涵盖智…...
3 个高级思路,让你的 AI 绘画 / 视频从此充满想象力
前言 如今 AI 视频与绘画工具的画质越来越卷,清晰度、光影、细节几乎都已触达天花板。但真正能让人记住、能脱颖而出的作品,靠的从来不是画质,而是想象力。 当所有人都在追求 “大片感” 时,你只需要换一种思路 ——用创意打破平…...
DICOM序列实时渲染从28fps到126fps:C++无锁队列+GPU命令缓冲复用+ROI局部重绘的工业级调优日志
第一章:DICOM序列实时渲染性能跃迁全景概览 现代医学影像工作流对DICOM序列的实时可视化提出严苛要求:从百层CT扫描到高分辨率MRI动态序列,传统CPU软渲染方案常遭遇帧率跌破15 FPS、交互延迟超300ms的瓶颈。近年来,GPU加速管线、零…...
