TCP 处理机制与拥塞状态管理详解
1. TCP SACK 块处理机制
在 TCP 数据处理过程中,SACK(Selective Acknowledgment)块的管理至关重要。当存在与新重叠段生成的 DSACK 块序列空间相邻的 SACK 块时,需将其移至 SACK 数组开头;若不存在,则需创建一个新的 SACK 块,此操作在 tcp_sack_new_ofo_skb() 函数中完成。
- tcp_sack_new_ofo_skb() 函数 :在新段在乱序队列中找到位置后,由 tcp_data_queue() 调用。该函数需为新段生成一个 SACK 块,此块可能是现有 SACK 块的扩展。若新段与乱序队列中的现有段存在重叠序列空间,在调用此函数前已为该段生成 DSACK。此时,需检查是否存在与生成的 DSACK 序列空间相邻的 SACK 块。由于 SACK 块按到达顺序排列在 tp → selective_acks[] 中,因此需在循环 2405 – 2414 中搜索数组中的所有 SACK 块。若在 2406 行找到与 DSACK 序列空间重叠的 SACK 块,则在 tcp_sack_extend() 中扩展该 SACK 块的序列字段以包含 DSACK 序列空间,并在 2408 – 2409 循环中将该 SACK 块移至 SACK 列表顶部。在 2411 行调用 tcp_sack_maybe
超级会员免费看
订阅专栏 解锁全文
1703

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



