rto初始化和计算_TCP系列15—重传—5、Linux中RTO的计算

之前我们介绍的都是协议中给出的RTO计算方法,下面我们看一下linux实现中RTO的计算方法。在linux中维护了srtt、mdev、mdev_max、rttvar、rtt_seq几个状态变量用来计算RTO,其中linux实现中的mdev变量相当于协议中的RTTVAR变量。rtt_seq状态变量用来控制一个RTT时间窗,linux在一个RTT时间窗内部更新状态变量的方式与RTT时间窗结束更新状态变量的方式不同,rtt_seq则用来判断当前是在RTT时间窗内部,还是一个RTT时间窗已经结束。

一、RTT时间窗的判断

几个状态变量中的rtt_seq用来判断当前采样是否处于RTT时间窗内,我们简单的说一下如何判断

在TCP窗口管理时候维护发送窗口有两个状态变量,一个是snd.una,另外一个是snd.nxt。其中snd.una表示还没有被ACK确认的数据包里面最早的系列号,snd.nxt表示下一个待发送的数据包。初始的时候设置rtt_seq =snd.nxt,随着数据包的发送和ACK报文的接收,snd.una和snd.nxt都会向前滑行,当更新RTT状态变量的时候,如果发现snd.una<=rtt_seq,说明之前发送的数据包还没有收到ACK,当前还处于RTT时间窗内部。如果发现snd.una>rtt_seq说明之前发送的数据包已经收到了对应的ACK确认,那么一个RTT时间窗结束,并把rtt_seq设置为snd.nxt继续下一个RTT时间窗的处理。

二、状态变量的更新

1、在测量到第一个RTT采样之前,linux会先查看本地缓存中是否由目标ip地址的RTT缓存信息,如果由对应的缓存信息,则会根据缓存信息初始化RTO,如果没有对应的缓存信息,则会把RTO初始化为3s。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值