TCP协议通过多种核心技术确保数据传输的可靠性,其核心机制可归纳为以下六大关键技术:
一、序列号与确认应答机制
- 字节流编号
TCP为每个传输的字节分配唯一序列号(Sequence Number),接收方通过确认号(ACK)反馈已成功接收的连续字节范围。例如,若发送方发送序号为1-1000的数据,接收方返回ACK=1001,表明已正确接收前1000字节,并期待下一段数据从1001开始。- 作用:确保数据有序性和完整性,解决网络乱序问题。
- 累积确认与延迟确认
- 累积确认:ACK确认号为当前连续接收的最大字节序号(如ACK=5000表示0-4999字节已接收)。
- 延迟确认:接收方延迟发送ACK以合并多个确认,减少网络开销。
二、超时重传与快速重传机制
- 超时重传(RTO)
- 原理:发送方启动定时器,若在往返时间(RTT)内未收到ACK,则重传数据。
- 动态调整:RTO基于RTT估算值动态调整,避免过早或过晚触发重传。
- 快速重传(Fast Retransmit)
- 触发条件:发送方连续收到3次重复ACK(如ACK=1001重复三次),立即重传对应数据段。
- 优势:无需等待超时,减少延迟(例如视频流中丢包时快速恢复)。
三、滑动窗口与流量控制
- 滑动窗口协议
- 发送窗口:动态调整未确认数据的最大发送量,基于接收方的接收窗口(rwnd)通告值。
- 流量控制:防止接收方缓冲区溢出,例如当rwnd=0时发送方暂停发送,直到窗口更新。
- 窗口动态更新
- 接收方通过ACK报文中的窗口字段实时反馈剩余缓冲区空间,发送方据此调整发送速率。
四、校验和与错误检测
- 校验和机制
- 计算方式:TCP首部和数据部分均参与16位校验和计算,接收方验证后丢弃错误报文。
- 作用:检测传输过程中的数据损坏(如比特翻转)。
- 自动丢弃重复数据
- 接收方通过序列号识别重复报文(如网络重传导致的数据冗余),直接丢弃以避免重复处理。
五、拥塞控制算法
- 慢启动(Slow Start)
- 初始阶段:拥塞窗口(cwnd)从1个MSS(最大报文段)开始,每收到一个ACK,cwnd指数增长(cwnd *= 2)。
- 退出条件:cwnd达到慢启动阈值(ssthresh)后进入拥塞避免阶段。
- 拥塞避免(Congestion Avoidance)
- 线性增长:每RTT增加1个MSS,避免窗口膨胀导致网络拥塞。
- 快速恢复(Fast Recovery)
- 触发后调整:发生快速重传时,ssthresh设为当前cwnd的一半,cwnd = ssthresh + 3,后续线性增长。
六、选择性确认(SACK)
- 机制原理
- 接收方通过SACK选项告知发送方已接收的非连续数据块(如已接收1000-2000和3000-4000,但缺少2001-2999)。
- 示例:发送方仅重传丢失的2001-2999数据,避免全量重传。
- 优化效果
- 减少冗余重传,提升带宽利用率(尤其在高速网络或高丢包率场景中显著)。
总结
TCP通过序列号与确认机制保证数据有序性,重传机制应对丢包,滑动窗口实现流量控制,校验和确保数据完整性,拥塞控制算法动态适应网络状态,以及SACK优化重传效率。这些技术协同工作,使TCP成为互联网可靠传输的核心协议。