TCP核心处理:ACK处理与拥塞控制详解
1. 网络资源消耗与飞行中数据包计算
在网络中,会有额外的段被发送,这会消耗网络资源。因此,在计算飞行中的数据包时,需要考虑 tp → retrans_out 。
2. tcp_ack_is_dubious() 函数
此函数用于确认当前是否处于拥塞状态或已检测到拥塞,有三个检查条件:
1. 当前ACK设置了 FLAG_NOT_DUP 标志,用于指示是否为重复ACK。
2. 当前ACK设置了 FLAG_CA_ALERT 标志,表明检测到拥塞,需要警惕。
3. 当前TCP状态不能为 TCP_CA_Open ,即已处于某种拥塞状态。
FLAG_NOT_DUP 由三个标志组合定义:
- FLAG_DATA :若收到数据则设置该标志。即使未确认新数据,设置此标志时也不应视为重复ACK。例如,数据仅单向流动,接收方总是收到相同的ACK序列号,不能将所有ACK都视为重复。
- FLAG_WIN_UPDATE :若对端接收窗口改变或确认了新数据,则设置该标志。讨论的重复ACK是在对端收到乱序段后生成的,乱序段不会使窗口左边缘右移,不会改变接收窗口。若段未确认新数据、不携带新数据但改变了发送窗口,则可视为对端的窗口更新,而非重复ACK。
- FLAG_ACKED :若确认了新数据或收到SYN段,则设置该标志,
超级会员免费看
订阅专栏 解锁全文
3039

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



