TCP(传输控制协议)通过多种机制确保数据的可靠传输,以下是其核心机制及工作原理:
1. 三次握手建立连接
- 目的:确保双方通信能力正常,同步初始序列号(ISN)。
- 过程:
- 客户端发送
SYN
(同步序列号)报文。 - 服务端回复
SYN-ACK
(确认+同步)。 - 客户端发送
ACK
确认。
- 客户端发送
- 作用:避免历史重复连接导致的资源浪费,为后续数据传输奠定基础。
2. 数据分块与序列号
- 分块(Segmentation):将数据分割为适合传输的MSS(最大报文段大小)。
- 序列号(Sequence Number):每个字节分配唯一序列号,标识数据顺序。
- 作用:接收方按序列号重组数据,解决乱序或重复问题。
3. 确认应答(ACK)与超时重传
- ACK机制:接收方收到数据后,发送
ACK
确认(值为期望收到的下一个序列号)。- 示例:发送序列号1-1000的数据,接收方回复
ACK 1001
。
- 示例:发送序列号1-1000的数据,接收方回复
- 超时重传:
- 发送方未收到
ACK
时,启动重传计时器(RTO动态调整)。 - 超时后重发数据,多次失败则断开连接。
- 发送方未收到
4. 滑动窗口与流量控制
- 滑动窗口:发送方维护一个窗口,允许连续发送多个报文段(无需逐个等待
ACK
)。- 窗口大小:由接收方通过
TCP头部
的窗口字段
动态通知(流量控制)。
- 窗口大小:由接收方通过
- 流量控制:防止接收方缓冲区溢出。若缓冲区满,窗口大小设为0,发送方暂停发送(通过零窗口探测保持同步)。
5. 拥塞控制
- 目的:避免网络过载,动态调整发送速率。
- 核心算法:
- 慢启动:窗口从1开始指数增长,直到阈值(
ssthresh
)。 - 拥塞避免:窗口线性增长,避免激进发送。
- 快重传:收到3个重复
ACK
时立即重传(无需等待超时)。 - 快恢复:重传后窗口降为阈值,进入拥塞避免阶段。
- 慢启动:窗口从1开始指数增长,直到阈值(
6. 四次挥手释放连接
- 过程:
- 主动方发送
FIN
。 - 被动方回复
ACK
(半关闭状态)。 - 被动方发送
FIN
。 - 主动方回复
ACK
,进入TIME_WAIT
状态(等待2MSL确保最后一个ACK
到达)。
- 主动方发送
- 作用:确保双方资源释放,处理延迟报文。
7. 其他辅助机制
- 校验和:通过CRC校验检测数据损坏,丢弃错误报文(触发重传)。
- 选择性确认(SACK):允许接收方告知缺失的数据块,减少不必要的重传。
总结
TCP通过连接管理、序列号、确认重传、滑动窗口、拥塞控制等机制,在不可靠的IP层上实现了:
- 无丢失(重传机制)
- 无重复(序列号去重)
- 无乱序(滑动窗口排序)
- 无错误(校验和)
- 流量平衡(拥塞控制)
这些机制共同确保了端到端的可靠数据传输。