42、TCP状态处理与拥塞控制详解

TCP状态与拥塞控制详解

TCP状态处理与拥塞控制详解

1. SACK实现与拥塞控制

SACK(Selective Acknowledgment)实现对拥塞状态有很好的控制能力。我们可以根据立即被SACK确认的段的数量来决定是否进入恢复状态。

2. tcp_check_sack_reneging()函数

该函数用于检查是否需要销毁从对端接收到的所有SACK块,因为这些块可能存在错误。如果需要销毁,我们会进入丢失状态,因为所有被SACK确认的段都会被标记为丢失。判断的依据是,写队列中的第一个段在第1032行被标记为SACK确认。但这种情况不应该发生,因为如果写队列中第一个未确认的段已经到达接收端,它应该被按顺序确认。如果这个段被SACK确认,意味着这个按顺序的段仍然在乱序队列中,即使在这个段之前接收的数据没有空洞。在这种情况下,我们会在第1035行调用tcp_enter_loss()函数,将重传队列中的所有段标记为丢失。调用该函数时,第二个参数设为1,表示我们希望将重传队列中的所有段标记为丢失,同时不初始化tp→undo_marker。tp→undo_marker保持未初始化状态,意味着我们不想从丢失状态恢复,因为我们知道接收端出现了问题,到目前为止它无法正确处理未确认的段,我们需要再次重传所有段。在这里我们启动慢启动算法,在第1037行传输重传队列中的第一个段,并在第1038行重置重传定时器。

3. TCP状态的默认处理

对于TCP状态的默认处理,我们有一段通用代码。当TCP进入任何拥塞状态,并且我们收到对低于tp→high_seq(进入拥塞状态时记录)的数据的确认时,会进入这里。在不同的TCP状态下,会有不同的条件。另外,当我们处于OPEN状态并收到第一个

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值