TCP是怎么判断丢包
大约 2 分钟
TCP 判断丢包的机制
TCP(传输控制协议)通过多种机制来判断数据包是否丢失,确保数据的可靠传输。以下是主要的判断方法:
1. 超时重传机制(Timeout Retransmission)
- RTO(Retransmission Timeout):TCP维护一个RTO值,表示等待确认ACK的超时时间
- 当发送一个数据段后,启动定时器,如果在RTO时间内未收到对应ACK,则认为该数据包丢失
- RTO基于RTT(Round Trip Time)动态计算,通常RTO = RTT + 4 * RTT偏差
2. 快速重传机制(Fast Retransmit)
- 重复ACK检测:当接收方收到乱序的数据包时,会重复发送最后一个期望的序列号的ACK
- 触发条件:发送方收到3个或以上重复的ACK(duplicate ACK)
- 这表明发送方认为该ACK对应的数据包可能已经丢失
3. SACK(Selective Acknowledgment)选择性确认
- 功能:允许接收方通知发送方哪些数据已收到,哪些数据缺失
- 实现:通过TCP选项字段传递接收窗口中不连续的数据块信息
- 优势:发送方可以精确知道哪些具体的数据包丢失,避免不必要的重传
4. 序列号和确认号机制
- 序列号(Sequence Number):每个TCP段都有唯一的序列号标识
- 确认号(Acknowledgment Number):表示期望接收的下一个字节的序列号
- 通过比较发送的序列号和收到的确认号,TCP可以判断哪些数据未被确认
5. 拥塞控制相关信号
- 丢包作为拥塞信号:TCP将丢包视为网络拥塞的指示
- 调整发送速率:检测到丢包时会降低发送窗口大小,减少网络负载
这些机制协同工作,使TCP能够在不可靠的网络环境中提供可靠的数据传输服务。