这是 TCP 的核心设计问题。不可靠信道可能丢包、乱序、重复、损坏,可靠传输需要以下机制组合:
- 检错:校验和(checksum)检测比特错误,损坏即丢弃。
- 确认与重传:接收方对每个报文回 ACK;发送方维护定时器,超时未确认则重传(ARQ 思想)。为防 ACK 丢失导致的重复,需要序列号标识每个字节/报文,接收方按序重组、去重。
- 流水线化:停等协议效率太低(每发一个包等一个 RTT),引入滑动窗口——发送方在窗口内可连续发多个报文,用累积确认(Go-Back-N)或选择确认(SACK)推进窗口,吞吐提升一个数量级以上。
- 流量控制:接收方通过 rwnd 窗口通告自己的接收能力,防止淹没慢速接收方。
- 拥塞控制:慢启动、拥塞避免、快速重传/快速恢复,感知网络状况动态调整发送速率(cwnd),防止压垮网络。
- 连接管理:三次握手同步初始序列号,四次挥手优雅关闭,TIME_WAIT 处理旧报文。
追问方向:超时时间如何估计(RTT 测量与 Karn 算法)、为什么 QUIC 要在用户态重做可靠传输、可靠 UDP(如游戏协议)的取舍。答题时按"问题→机制"逐层递进最清晰。