TCP状态处理详解
在TCP协议的运行过程中,状态处理是保障数据可靠传输和网络高效运行的关键环节。下面我们将详细探讨TCP不同状态的处理机制。
1. TCP状态处理的初步检查
在处理过程中,首先在第1517行检查FACKed段的数量是否大于重排序段的数量。若满足此条件,意味着重传队列开头的部分段可被视为丢失。需要标记为丢失的段是队列开头尚未被SACKed的所有段。
若上述所有条件都为真,即处于非开放状态,已对 tp→high_seq 进行SACK确认,且facked - out段的数量超过重排序计数,此时会尝试将重传队列开头的重传段标记为丢失,直至找到第一个SACKed段。这是因为重排序长度是facked - out段与重传队列中较低顺序的第一个SACKed - out段位置的差值。在第1518行调用 tcp_mark_head_lost() 函数,这是一种特殊情况,即便未处于快速重传模式,也可能需要标记头部丢失。当有SACK块覆盖 tp→high_seq 时,可启动快速重传。
在第1530行(参考 fast_netrans_alert() ),检查若对超过 tp→high_seq 的数据进行了ACK确认,是否能从任何拥塞状态中恢复。进入除 TCP_CA_Open 之外的任何状态时,会将迄今传输的最高序列号标记为 tp→high_seq 。
若进入下一阶段,意味着要么无法从拥塞状态恢复,要么将进入除丢失状态之外的非开放状态。无论收到重
超级会员免费看
订阅专栏 解锁全文
38万+

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



