Linux TCP网络

一、TCP传输核心机制

TCP是面向连接的可靠传输协议,通信建立、数据传输、连接断开都有固定流程。

  1. 三次握手

通信开始前通过三次握手建立可靠连接。

  1. 发送端发送SYN报文,请求建立连接
  2. 接收端回复ACK+SYN,确认收到请求,同时向对方发起连接请求
  3. 发送端回复ACK,连接正式建立

握手完成之后双方才可以收发业务数据。

  1. 四次挥手

完成数据传输之后,使用四次挥手断开连接。

  1. 主动关闭方发送FIN,表示本方不再发送数据
  2. 被动关闭方回复ACK,确认收到关闭请求,此时被动方还可以继续把剩余数据发完
  3. 被动关闭方数据发送完毕,发送FIN
  4. 主动关闭方回复ACK,连接彻底释放

补充:如果被动方没有剩余数据,第二步与第三步报文可以合并,四次挥手简化为三次挥手。

  1. 可靠性保障机制

  2. 序号与确认序号:每个字节数据都有序号;接收方回复确认序号,告诉发送方下一次期望接收的字节位置,以此保证数据完整、有序。

  3. 滑动窗口:做流量控制。通过TCP头部窗口大小字段,通知对方本机接收缓冲区剩余容量,控制发送速率,避免接收方处理不过来。

  4. 拥塞控制:针对网络链路拥堵,动态调整发送速度,防止大量报文冲垮网络。

  5. 保活探测:连接建立完成到挥手结束前,定期探测,检测对方是否掉线,处理断连异常。

  6. TCP与UDP对比

  • UDP:无连接,实现简单,资源开销小;不做重传、不保证顺序,传输不可靠。适合直播、语音这类允许少量丢包的场景。
  • TCP:面向连接,逻辑复杂,资源开销更大;有重传、序号、窗口机制,数据安全可靠。文件传输、HTTP都基于TCP。

二、HTTP协议

HTTP是跑在TCP之上的应用层协议,规定文本数据在网络当中传输格式。分为C/S客户端服务器、B/S浏览器服务器两种架构。

  1. C/S模型(客户端/服务器)

客户端是独立程序。

  • 优点:资源存本地,加载速度快,离线部分功能可用。
  • 缺点:占用本地存储空间;不同系统要单独开发客户端;更新功能需要安装升级包。
  1. B/S模型(浏览器/服务器)

不需要专用客户端,直接使用浏览器访问。

  • 优点:资源全部放在服务器;更新资源只改服务端,客户端无需升级;一套代码多平台通用。
  • 缺点:每次查看资源都要从服务器下载,依赖网络。
  1. URL统一资源定位符

格式: 协议://主机:端口/路径

  1. 协议:http、https,规定通信规则。

  2. 主机:服务器域名/IP,DNS会把域名翻译成IP地址。

  3. 端口:服务程序端口。HTTP默认80,HTTPS默认443。

  4. 路径:服务器上资源存放位置。

  5. HTTP完整通信流程

  6. 用户输入URL

  7. DNS解析域名,客户端向服务器IP+端口发起TCP三次握手,建立TCP连接

  8. 客户端发送HTTP请求报文

  9. 服务器处理,返回HTTP响应报文

  10. 完成交互,TCP四次挥手断开连接

  11. HTTP请求报文

整体分为三部分:请求行、首部行、实体主体,使用 CRLF (回车换行)作为行分隔符,空行区分头部和正文。

  1. 请求行:方法 + URL + HTTP版本
  • GET:获取服务器资源,参数放在URL上。
  • POST/PUT:向服务器提交数据,数据放在实体主体。
  1. 首部行:键值对,传递附加信息,例如Host、Connection。

  2. 实体主体:POST等方法携带数据,GET一般为空。

  3. HTTP响应报文

  4. 状态行:版本 + 状态码 + 描述短语

  • 1xx:通知信息,请求正在处理
  • 2xx:成功,请求正常完成
  • 3xx:重定向,需要进一步操作
  • 4xx:客户端错误,请求格式、参数错误
  • 5xx:服务端错误,服务器内部故障
  1. 首部行:键值对,返回服务器信息、数据长度、编码格式。
  2. 实体主体:返回的数据,我们获取的JSON、网页内容都在这里。

重点总结

  1. TCP三次握手建立连接,四次挥手断开;序号、滑动窗口、拥塞控制共同实现可靠传输。
  2. TCP面向连接可靠;UDP无连接不可靠。
  3. HTTP基于TCP,B/S架构不需要专用客户端;URL四要素:协议、主机、端口、路径。
  4. 请求报文:请求行+首部+实体;响应报文:状态行+首部+实体;状态码记住2xx成功、4xx客户端错、5xx服务端错。
  5. C语言HTTP客户端作业核心考点:socket通信、剥离HTTP头部、cJSON解析普通对象、遍历JSON数组。
  6. chunked分块响应不能用简单recv完整读取,简易demo只能做妥协处理,正式项目需要完整实现分块解析。
相关推荐
OPEN-F20 分钟前
C++综合实战:网络编程入门与HTTP客户端
网络·c++·http
Jason_zhao_MR26 分钟前
电能质量监测为什么需要PTP精确时钟同步
linux·单片机·嵌入式硬件·嵌入式
Lust Dusk35 分钟前
【最新】VMware虚拟机下载安装教程
网络·网络安全·系统安全
视觉小萌新38 分钟前
A1——基于AMD-48G显卡下载Gemma4模型
linux·ubuntu
zhao32668575141 分钟前
动态IP怎么选购更合适?HTTP代理的使用指南有哪些关键要点
网络·tcp/ip·http
张宇Joaquin1 小时前
鲲鹏统一并行加速库KUPL——众核并行调度介绍
网络
捷烽1 小时前
光纤熔接机国内外品牌对比(2026 选购指南):进口与国产怎么选
运维·网络·信息与通信
迪丽热爱1 小时前
多媒体应用12-826(补)
网络
不会就选b2 小时前
数据结构之栈的算法题(OJ)
linux·数据结构·算法