TCP(Transmission Control Protocol,传输控制协议)是一种 面向连接、可靠传输 的协议,它通过一系列机制保证数据的准确性和完整性,防止丢失、乱序和重复。以下是 TCP 可靠性的核心保障机制:
1. 三次握手(Three-Way Handshake)
作用:
- 建立可靠的双向连接,确保通信双方都能正常发送和接收数据。
- 避免历史连接影响(如 SYN 洪泛攻击)。
过程:
- 客户端 → 服务器:发送
SYN(请求建立连接)。 - 服务器 → 客户端:收到后返回
SYN-ACK(确认连接请求)。 - 客户端 → 服务器:收到后发送
ACK(确认连接建立),连接建立成功。
👉 为什么是三次握手?
- 两次不足以确认双方都具备收发能力,必须有第三次确认。
2. 可靠数据传输机制
(1) 数据分片 & 组装
- TCP 将大数据拆分成多个数据包(Segmentation) 进行传输,并确保按序组装。
- 发送端:按 MSS(最大段大小) 分片,接收端按 序列号(Sequence Number) 组装。
(2) 序列号(Sequence Number)
- 每个数据包 都有一个 唯一序列号,确保数据按正确顺序接收,防止重复数据包。
(3) 确认应答(ACK,Acknowledgment)
- 发送方发送数据后,接收方必须返回 ACK 确认,否则发送方会重传。
- 示例:
发送方:发出数据(Seq = 100) 接收方:收到后返回 ACK = 101(表示已收到 100,下一次期待 101)
(4) 滑动窗口(Sliding Window)
- 作用:
- 控制一次可发送的数据量,提高传输效率。
- 通过动态调整窗口大小,避免网络拥塞。
- 示例:
发送窗口大小 = 5 个数据包 只有当 5 个数据包的 ACK 都收到后,才能继续发送新的数据。
3. 超时重传机制(Timeout Retransmission)
(1) 超时重传(Retransmission Timeout, RTO)
- 如果 ACK 没有在规定时间内收到,则发送方会重传数据。
- RTO 时间计算:
- 结合 RTT(往返时间),动态调整超时时间,防止过早/过晚重传。
RTO = RTT + 4 × RTT 偏差(自适应算法)
(2) 快速重传(Fast Retransmit)
- 当接收方发现数据包丢失,会立即发送 3 次相同的 ACK,通知发送方重传。
- 示例:
发送方:发送 Seq = 100, 101, 102, 103 接收方:收到 100、102,丢失 101 接收方:返回 ACK = 101(3 次) 发送方:立即重传 Seq = 101(无需等待超时)
4. 流量控制(Flow Control)
(1) 滑动窗口
-
作用:
- 避免发送方发送过快,接收方来不及处理。
- 通过接收窗口(Receive Window) 告知发送方当前可接受的数据量。
-
示例:
发送方:当前窗口大小 = 10KB,发送 5KB 接收方:缓冲区满了,只能接受 2KB 发送方:调整窗口大小为 2KB,避免数据丢失
(2) 零窗口(Zero Window)
- 如果接收方的缓冲区满了,会发送窗口大小 = 0,让发送方暂停发送数据,等待恢复后继续传输。
5. 拥塞控制(Congestion Control)
目的:防止网络过载,提高数据传输效率。 TCP 采用四种算法进行拥塞控制:
(1) 慢启动(Slow Start)
- 初始时,发送方 窗口大小(cwnd) = 1。
- 每次收到 ACK,窗口大小翻倍,直到达到阈值(ssthresh)。
(2) 拥塞避免(Congestion Avoidance)
- 当 cwnd 达到阈值时,不再翻倍,而是每次增加 1,防止网络拥塞。
(3) 快速重传 & 快速恢复
- 如果收到 3 次重复 ACK,说明有数据丢失,立即触发快速重传。
- 快速恢复:调整 cwnd,使其逐步恢复。
(4) 拥塞发生(Congestion Collapse)
- 网络严重拥塞时,直接将阈值减半,重新进入慢启动。
6. 四次挥手(Four-Way Handshake)
作用:确保数据完整传输,安全释放连接。
过程:
- 客户端 → 服务器:
FIN(请求关闭连接)。 - 服务器 → 客户端:
ACK(确认关闭请求)。 - 服务器 → 客户端:
FIN(通知即将关闭连接)。 - 客户端 → 服务器:
ACK(最终确认关闭)。
👉 为什么是四次挥手?
- 服务器可能还有未发送完的数据,必须等数据发送完毕后再断开连接。
7. 总结
| 机制 | 作用 |
|---|---|
| 三次握手 | 确保通信双方可正常收发数据 |
| 数据分片 & 组装 | 确保大数据按顺序传输 |
| 序列号 & ACK | 确保数据按序到达,无丢失 |
| 滑动窗口 | 控制数据流速,防止接收方超负荷 |
| 超时重传 | 避免数据丢失,自动补发 |
| 快速重传 | 3 次重复 ACK 触发加速重传 |
| 流量控制 | 防止接收方处理不过来 |
| 拥塞控制 | 避免网络过载,提升效率 |
| 四次挥手 | 确保数据完整传输后再释放连接 |
👉 这些机制共同保证了 TCP 可靠传输,使其成为 Web、邮件、文件传输 等需要稳定性的应用的首选协议。
5534

被折叠的 条评论
为什么被折叠?



