TCP状态处理详解
1. TCP状态处理基础
在TCP通信中,当检测到段丢失时,我们会将该段标记为丢失,并增加丢失计数器的值。这是一种主动的方式,用于感知网络拥塞,并至少重传一个段,以避免重传定时器超时,从而防止进入丢失状态。在检测到丢失段后,我们会调用 tcp_sync_left_out() 函数来计算已经离开网络的段。
2. tcp_xmit_retransmit_queue() 函数处理
当接收到每个重复ACK或者重传队列的头部超时,我们会更新丢失段的信息。处理流程如下:
1. 正常重传 :根据标记为丢失的段数量( tp → lost_out )进行正常重传。
2. 决策 :如果拥塞窗口允许,需要在向前重传和发送新段之间做出决策。
当 tp → lost_out 为正数时,遍历重传队列(第919 - 941行),对每个段执行以下操作:
- 检查拥塞窗口 :在第922行检查拥塞窗口是否大于正在传输的数据包数量。如果是,则可以向网络中发送更多段;否则返回。
- 检查段是否丢失 :在第925行检查段是否标记为丢失。如果是,且该段尚未被SACK或重传,则尝试重传。若 tcp_retransmit_skb() 返回非零错误码,则表示重传失败,直接返回,不再进行第二次尝试。
- 重置重传定时器 </
超级会员免费看
订阅专栏 解锁全文
38万+

被折叠的 条评论
为什么被折叠?



