TCP 网络数据处理机制深度剖析
1. 重排序长度相关处理
在 TCP 数据传输过程中,重排序长度的计算和处理是一个关键环节。当处理接收到的 SACK 块时,我们需要进行一系列的检查和操作。
- 未重传段的重排序更新 :首先检查段是否从未被重传(第 897 行)。若满足此条件,且该段的 FACK 计数小于 ACK 段到达之前向前确认的段数时,才更新重排序。第 880 行的条件是为了检查当前段的顺序(fack_count)是否低于之前最高顺序的 SACK 段(tp → facked_out)。
- 新 SACK 段的标记与计数调整 :如果新的 SACK 段被标记为丢失,我们会清除该段的丢失标志,并调整丢失段的计数器(第 883 - 885 行)。同时,将新的 SACK 段标记为 SACK 状态(第 889 行),并将 SACK 段的计数器加 1(第 891 行)。若新段 FACK 的段数比之前记录的多,则更新 FACK 段(第 893 - 894 行)。
- D - SACK 块的处理 :检查当前考虑的 SACK 块是否为 D - SACK。若该块覆盖的段已被重传(TCPCB_SACKED_RETRANS 标志已设置),则清除重传标记,并将重传计数器减 1。
- 重排序长度的计算 :重排序长度是指具有最高序列号(tp → facked_out)和最低序列号(reord)的 SACK/ACK 段之间的段数。因此,我们标记 fack_count 和之前记录的重排序中的最小值。最后,调用 tcp_update_reordering() 更
超级会员免费看
订阅专栏 解锁全文
904

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



