TCP可靠性可以总结为 6 个方面:
1. 数据分片与序列号
TCP将应用层的数据流分割成适合网络传输的报文段(Segment),每个报文段包含一个序列号(Sequence Number),标识该段数据在整体数据流中的位置。
- 乱序重组: 即使数据包通过不同路径到达,接收方也能根据序列号重新排序。
- 去重: 通过序列号识别并丢弃重复的数据包。
- 重排: 接收方按序号重组数据后,按顺序交给应用层。
|
|
2. 确认应答(ACK)机制
接收方每收到一个报文段,会返回一个确认报文(ACK),其中包含期望接收的下一个字节的序列号。
- 确保发送方知道哪些数据已被正确接收。
- 发送方仅需重传未被确认的数据段。
|
|
3. 超时重传 见《报文重传》。
4. 滑动窗口
-
流量控制 接收方通过TCP头部的**窗口字段(Window Size)**告知发送方当前可接收的数据量(接收窗口 rwnd)。
发送方根据 rwnd 动态调整发送速率,避免接收方缓冲区溢出。 -
拥塞控制 根据一定的算法控制发送速率。
发送方根据网络状态动态调整发送窗口(拥塞窗口 cwnd),避免网络过载。
实际发送窗口大小为 min(rwnd, cwnd)。
5. 校验和
- 数据完整性校验:TCP头部和数据部分均包含校验和,接收方通过校验和验证数据是否在传输中损坏。
- 丢弃损坏数据:若校验失败,接收方丢弃该报文段,并等待发送方重传。
6. 连接管理 也就是三次握手与四次挥手。