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只能做妥协处理,正式项目需要完整实现分块解析。
相关推荐
碧海银沙音频科技研究院2 小时前
炬芯ATS3089X手表的HFP通话不自动路由到设备BT的问题解决
网络·人工智能·嵌入式硬件·算法
EasyDSS6 小时前
连锁扩张管控难?一套视频会议/直播/点播/集群对讲EasyDSS音视频云平台打通门店全流程数字化
网络·音视频·easydss
曦夜日长7 小时前
Git系统篇,Git本地使用(一):从“究极进化版“到三个区域的底层原理
大数据·linux·git·elasticsearch
shimly1234567 小时前
给断网无 sudo ubuntu22.04 机器安装 nodejs
linux
比兔代理8 小时前
游戏、直播、远程办公遇到动态IP怎么办?
网络
Lzg_na8 小时前
ARP 地址解析协议详解
网络·网络协议
北京盛世宏博9 小时前
通信异常深度排查:以太网温湿度设备 TCP 粘包、UDP 丢包根治方案
单片机·网络协议·tcp/ip·udp·以太网·传感器·温湿度
上海广测检测科技有限公司9 小时前
消费类智能联网设备安全分级国标征求意见要点解析:三级五维框架与跨境对标逻辑
网络·经验分享
别动我齐刘海9 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
Lsetea9 小时前
OpenSSL报certificate chain too long:error 22与verify_depth深度排查
linux·https·ssl证书·openssl·证书链