保证TCP可靠的方法

TCP(Transmission Control Protocol,传输控制协议)是一种 面向连接可靠传输 的协议,它通过一系列机制保证数据的准确性完整性,防止丢失、乱序和重复。以下是 TCP 可靠性的核心保障机制:


1. 三次握手(Three-Way Handshake)

作用

  • 建立可靠的双向连接,确保通信双方都能正常发送和接收数据。
  • 避免历史连接影响(如 SYN 洪泛攻击)。

过程

  1. 客户端 → 服务器:发送 SYN(请求建立连接)。
  2. 服务器 → 客户端:收到后返回 SYN-ACK(确认连接请求)。
  3. 客户端 → 服务器:收到后发送 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)

作用:确保数据完整传输,安全释放连接。

过程

  1. 客户端 → 服务器FIN(请求关闭连接)。
  2. 服务器 → 客户端ACK(确认关闭请求)。
  3. 服务器 → 客户端FIN(通知即将关闭连接)。
  4. 客户端 → 服务器ACK(最终确认关闭)。

👉 为什么是四次挥手?

  • 服务器可能还有未发送完的数据,必须等数据发送完毕后再断开连接。

7. 总结

机制作用
三次握手确保通信双方可正常收发数据
数据分片 & 组装确保大数据按顺序传输
序列号 & ACK确保数据按序到达,无丢失
滑动窗口控制数据流速,防止接收方超负荷
超时重传避免数据丢失,自动补发
快速重传3 次重复 ACK 触发加速重传
流量控制防止接收方处理不过来
拥塞控制避免网络过载,提升效率
四次挥手确保数据完整传输后再释放连接

👉 这些机制共同保证了 TCP 可靠传输,使其成为 Web、邮件、文件传输 等需要稳定性的应用的首选协议。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值