TCP协议

#TCP协议

文章目录

先看下TCP协议头

  • TCP 头部通常为 20 字节(不含选项),核心字段包括:
字段 长度 作用
端口号 (源端口和目标端口) 32 bit 标识发送方和接收方的应用程序。
序列号 (Seq) 32 bit 解决乱序问题,标识本报文段发送的数据组第一个字节的序号。
确认号 (Ack) 32 bit 期望收到的下一个字节序号(ACK = seq + len)
头部长度(Data Offset) 4 bit TCP 头部长度(单位:4 字节),最小值为 5(20 字节)
标记控制位(Flags) 6 bit SYN:同步序号,用于建立连接。 ACK:确认序号有效。 FIN:发送方完成发送任务,用于释放连接。 RST:强制重置异常连接。
窗口大小 (Window Size) 16 bit 用于流量控制,告知对方本地目前允许接收的数据量。
校验和 (Checksum) 16 bit 检测数据在传输中是否有差错。
紧急指针(Urgent Pointer 16 bit 指示紧急数据末尾位置(配合 URG 使用,现代系统基本弃用)
可选性Options 可变 支持 MSS、窗口缩放、时间戳、SACK 等扩展

TCP如何建立和断开连接

  • 建立连接:三次握手

    • 第一次握手:客户端发送 SYN,进入 SYN_SENT 状态。(确认客户端发送能力)
    • 第二次握手:服务端返回 SYN + ACK,进入 SYN_RCVD 状态。(确认服务端接收和发送能力,进入SYN_RECV半连接队列)
    • 第三次握手:客户端发送 ACK,双方进入 ESTABLISHED 状态。(确认客户端接收能力,进入ACCEPT全队列)
    • 知识点1:服务端监听时指定的backlog半连接、全连接的总和:SYN_RECV连接队列,ACCEPT连接队列,调用accept()方法取走连接
    • 知识点2:为什么不是两次?为了防止已失效(迷路)的连接SYN请求突然又传送到了服务端,导致产生脏连接消耗服务端资源。
  • 端口连接:四次挥手

    • 第一次挥手:客户端发送 FIN。(我不发数据了)
    • 第二次挥手:服务端返回 ACK。(收到,但我可能还没发完,你等会)
    • 第三次挥手:服务端发完剩余数据,发送 FIN。(我也发完了,断开吧)
    • 第四次挥手 :客户端返回 ACK,进入 TIME_WAIT 状态,等待 2MSL 后彻底关闭。
    • 知识点1:拔网线连接是否会断开?不会立即断开,连接仍处于 ESTABLISHED 状态("假连接")
    • 知识点2:为什么需要 TIME_WAIT?防止相同的四元组立断开后立即建立新连接,导致数据错乱

TCP如何可靠传输

  1. 序列号与确认应答 (Seq & Ack):给每个字节编号。接收方收到后必须回传 ACK,否则发送方认为丢失。
  2. 超时重传 (Retransmission):发送方在规定时间内没收到 ACK,就重新发送该数据。
  3. 丢弃重复与乱序重排:利用序列号,接收端会自动剔除重复数据,并按顺序组装被拆分的报文。
  4. 流量控制 (Flow Control) :利用滑动窗口。接收方根据自己的处理能力告知发送方:"我还能收多少",防止发送方发太快导致接收方缓冲区溢出。
  5. 校验和 (Checksum):通过数学算法校验数据块,如果校验失败,直接丢弃。

TCP如何高效传输

滑动窗口 (Sliding Window)

  • 如果不使用窗口,发一个包等一个 ACK,效率极低。
  • 窗口允许发送方在不等待 ACK 的情况下连续发送多个包,极大提高了吞吐量。

延迟确认 (Delayed ACK) 与 Nagle 算法

  • 延迟确认:接收方不立即回 ACK,而是等一会(通常<200ms),看有没有数据要回传给发送方,顺便把 ACK 带回去(捎带应答),减少包数量。
  • Nagle 算法:将多个细小的包合并成一个大包再发送,减少网络包头的开销。

拥塞控制 (Congestion Control)

这是针对整个网络状况的"宏观调控",防止网络拥堵导致崩溃:

  1. 慢启动 (Slow Start):初始发送量小,按指数级倍增(1, 2, 4, 8...)。
  2. 拥塞避免 (Congestion Avoidance):达到阈值后,改为线性增长,小步快跑。
  3. 快重传 (Fast Retransmit):如果接收方收到乱序包,连续发 3 个冗余 ACK,发送方立刻重传,无需等待超时。
  4. 快恢复 (Fast Recovery):网络波动后不直接回到慢启动,而是减半窗口快速恢复。

总结

  • "在不可靠的网络上构建可靠的传输" ------ 通过确认应答、超时重传、滑动窗口、拥塞控制等机制,在尽力而为的 IP 网络之上,提供应用所需的稳定数据通道。
相关推荐
曦月合一4 分钟前
在 Linux 服务器上执行这些命令来导入 SSL 证书
linux·服务器·ssl
GensAI5 分钟前
2026 电话机器人系统并发量与响应延迟实测,6款产品压力测试对比
网络
sdm0704277 分钟前
网络原理-5.NAT技术
服务器·网络·智能路由器
奥莱维11 分钟前
RCU改造避坑指南-蓝牙Mesh不拆墙升级
网络
AI科技星13 分钟前
《数术工坊:无穷套娃录》 一部用数学套娃写成的“天书小说”
c语言·开发语言·网络·量子计算·agi
sdm07042713 分钟前
网络原理-3.网络层&协议IP
网络·网络协议·tcp/ip
闪闪发亮的小星星17 分钟前
STK-01-通信卫星方向学习路线
网络·学习
Tipriest_21 分钟前
没有nvidia的卡上装sogou拼音的特殊处理
运维·服务器·mysql
San813_LDD22 分钟前
[HTTPS/TCP]从文件索引到HTTP服务:Everything局域网共享文件实战
运维·tcp/ip·计算机网络·https
带土125 分钟前
8. TCP 协议概述
网络·网络协议·tcp/ip