TCP 可靠传输的保证

TCP(传输控制协议)通过多种机制保证数据在网络上的可靠传输。这些机制包括:

1. 数据包重传

  • 确认应答(ACK)

    • 接收方在收到数据包后,发送确认应答(ACK)给发送方,表示数据包已成功接收。如果发送方在超时时间内未收到确认应答,它会重传数据包。
  • 超时重传

    • 发送方会设置一个超时时间(RTO, Retransmission Timeout),如果在超时时间内没有收到 ACK,发送方会重传数据包。

2. 序列号和确认号

  • 序列号

    • 每个数据包(TCP 段)都有一个序列号,用于标识数据包的顺序和帮助接收方重新组装数据包。
  • 确认号

    • 确认号是接收方在 ACK 中返回的值,表示接收方期望接收到的下一个字节的序列号。这帮助发送方确定哪些数据已经被成功接收。

3. 流量控制

  • 滑动窗口机制
    • TCP 使用滑动窗口来控制流量,防止发送方发送的数据超过接收方的处理能力。接收方通过窗口大小来告知发送方它可以接收多少数据。

4. 拥塞控制

  • 慢启动(Slow Start)

    • 在连接初始阶段,TCP 发送方的拥塞窗口(CWND)逐渐增加,以避免突然的网络拥塞。
  • 拥塞避免(Congestion Avoidance)

    • 当网络中开始出现拥塞时,TCP 通过减小拥塞窗口的大小来减少数据流量,从而减轻网络拥塞。
  • 快速重传(Fast Retransmit)和快速恢复(Fast Recovery)

    • 如果发送方收到三个重复的 ACK(表示有数据丢失),它会立即重传丢失的数据包,并调整拥塞窗口以应对网络拥塞。

5. 数据完整性

  • 校验和
    • TCP 在每个数据包中包含校验和字段,用于检测数据在传输过程中是否发生了错误。接收方计算接收到的数据包的校验和,并与发送方的校验和进行比较。如果不匹配,数据包会被丢弃,并可能导致重传。

6. 数据重组

  • 顺序重组
    • 接收方根据数据包的序列号将接收到的数据重新组装成原始数据流。即使数据包乱序到达,TCP 也能确保数据按正确顺序交给应用层。

总结

通过以上机制,TCP 能够确保数据的完整性、顺序和准确性,从而提供可靠的端到端数据传输。这些特性使得 TCP 成为需要高可靠性的应用(如文件传输、电子邮件、网页浏览等)的理想选择。