2025-04-18    2025-04-18    963 字  2 分钟

TCP(传输控制协议)通过多种机制确保数据的可靠传输,以下是其核心机制及工作原理:


1. 三次握手建立连接

  • 目的:确保双方通信能力正常,同步初始序列号(ISN)。
  • 过程
    1. 客户端发送SYN(同步序列号)报文。
    2. 服务端回复SYN-ACK(确认+同步)。
    3. 客户端发送ACK确认。
  • 作用:避免历史重复连接导致的资源浪费,为后续数据传输奠定基础。

2. 数据分块与序列号

  • 分块(Segmentation):将数据分割为适合传输的MSS(最大报文段大小)
  • 序列号(Sequence Number):每个字节分配唯一序列号,标识数据顺序。
  • 作用:接收方按序列号重组数据,解决乱序或重复问题。

3. 确认应答(ACK)与超时重传

  • ACK机制:接收方收到数据后,发送ACK确认(值为期望收到的下一个序列号)。
    • 示例:发送序列号1-1000的数据,接收方回复ACK 1001
  • 超时重传
    • 发送方未收到ACK时,启动重传计时器(RTO动态调整)。
    • 超时后重发数据,多次失败则断开连接。

4. 滑动窗口与流量控制

  • 滑动窗口:发送方维护一个窗口,允许连续发送多个报文段(无需逐个等待ACK)。
    • 窗口大小:由接收方通过TCP头部窗口字段动态通知(流量控制)。
  • 流量控制:防止接收方缓冲区溢出。若缓冲区满,窗口大小设为0,发送方暂停发送(通过零窗口探测保持同步)。

5. 拥塞控制

  • 目的:避免网络过载,动态调整发送速率。
  • 核心算法
    • 慢启动:窗口从1开始指数增长,直到阈值(ssthresh)。
    • 拥塞避免:窗口线性增长,避免激进发送。
    • 快重传:收到3个重复ACK时立即重传(无需等待超时)。
    • 快恢复:重传后窗口降为阈值,进入拥塞避免阶段。

6. 四次挥手释放连接

  • 过程
    1. 主动方发送FIN
    2. 被动方回复ACK(半关闭状态)。
    3. 被动方发送FIN
    4. 主动方回复ACK,进入TIME_WAIT状态(等待2MSL确保最后一个ACK到达)。
  • 作用:确保双方资源释放,处理延迟报文。

7. 其他辅助机制

  • 校验和:通过CRC校验检测数据损坏,丢弃错误报文(触发重传)。
  • 选择性确认(SACK):允许接收方告知缺失的数据块,减少不必要的重传。

总结

TCP通过连接管理、序列号、确认重传、滑动窗口、拥塞控制等机制,在不可靠的IP层上实现了:

  • 无丢失(重传机制)
  • 无重复(序列号去重)
  • 无乱序(滑动窗口排序)
  • 无错误(校验和)
  • 流量平衡(拥塞控制)

这些机制共同确保了端到端的可靠数据传输。