路由表rto重传修改
今天给各位分享路由表rto重传修改的知识,其中也会对路由表重置命令进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
TCP/IP详解 TCP的超时与重传(21)
TCP 重传机制
通过上面我们直达搜:1)时间上的指数避退 2)复位的时间
往返时间测量
RTT(RTO)指的测量
往返时间RTT的例子
21.4.2 RTT估计器 【平滑的RTT和平滑的均值偏差】
Err = M - A = 0.5 - 2 = -1.5
A= A + gErr = 2 - 0.125 * 1.5 = 1.8125
RTO = A+ 4D = 1.825 + 4 *1.125 = 6.3125
采用上面公式计算的Err 、A 和D的值与实际使用的定点计算方法得到结果有一些微小的差别。 后一种方法得到的RTO的值为6s(因为计算机是采用了移位操作,而非6.3125s)
拥塞举例:
在时刻 10、14、 31 附近发生了3个重传。 我们还可以看到在这3个点中只进行了一次报文段的重传, 因为只有一个点下垂低于向上的斜率。
拥塞避免算法
拥塞避免算法和慢启动算法需要对每个连接维持两个变量: 已给拥塞窗口cwnd 和 一个慢启动门限ssthresh 。 算法的工作如下:
拥塞避免算法:线性增长的过程,上面的例子是慢启动和拥塞避免算法的集合
快速重传与快速恢复算法
快速恢复算法
按每条路由进行度量
新的TCP实现在路由表项中维持粗多我们在前面已经介绍过的指标。 但一个TCP连接关闭时, 如果已经发送改了足够多的数据来获得有意义统计的资料, 且目的节点的路由表项不是一个默认的表项,那么下列信息就曹村在路由表项中以备下次使用: 被平滑的RTT,被平滑的均值偏差以及慢启动门限。 所谓 “足够多的数据”是指一个窗口的数据,这样就可得到16个RTT采样。
当建立一个新的连接时, 无论是主动还是被动,如果该连接将要使用的路由表项已经有这些度量的值,则用这些度量来对相应的变量进行初始化。
ICMP 的差错 : 源站抑制、 主机不可达、网络不可达
————————
TCP的重新分组
当TCP超时并重传时,它不一定哟啊重传同样的报文段。 相反,TCP允许进行冲农信分组而发送一个较大的报文段, 这有助于提高性能(当然, 这个较大的报文daunt不能够超过接收方声明的MSS)。 在协议中这是允许的, 因为TCP是使用字节序号而不是使用报文段序号来进行识别它所要发送的数据和进行确认。
有关内容的总结:
几个TCP中的常见的算法的劣迹
TCP定时器: 2mls定时器、 超时定时器、坚持定时器、保活定时器
为什么TCP协议里面的RTO(超时重传时间)要设
TCP可靠性中最重要的一个机制是处理数据超时和重传。TCP协议要求在发送端每发送一个报文段,就启动一个定时器并等待确认信息;接收端成功接收新数据后返回确认信息。若在定时器超时前数据未能被确认,TCP就认为报文段中的数据已丢失或损坏,需要对报文段中的数据重新组织和重传。尽管超时重传的概念十分简单,但是在实现中,TCP处理超时重传的机制与其他可靠性协议相比是相当复杂的。
一文带你搞定TCP重传
TCP重传机制主要是为了防止网路包丢弃,重传的工作方式主要借助TCP头部中的序列号和确认号来决定是否重传,重传的触发方式主要由以下几种:
什么是超时重传?
发送方在发送数据时设置一个定时器,当超过指定时间后如果还没有收到接收方的ACK响应,就会重发数据包。
超时重传的发生场景
什么是RTT?什么是RTO?
RTT就是数据包的往返时间,RTO就是超时重传时间。
RTO的长短对数据包的重传有什么影响?
RTO如何设置?
RTO既不能过长也不能过短,略微大于RTT是最好的。但RTT会因为网络的变化而发生变化,所以在Linux系统中为了计算RTO,会对RTT进行两个采样:
RFC6289建议使用以下公式计算RTO:
上述表达式中,在linux中α = 0.125,β = 0.25,μ = 1,δ = 4,至于为啥是这些值,别问问就是前人大量的测试积累得出。
假设因为网络阻塞触发了超时,如何避免频繁重发加剧网络阻塞?
超时时间加倍,就是每当重传的时候,都会将下一次的超时时间设置为当前值的两倍,避免频繁重发导致网络更加阻塞。
超时重传的弊端是什么?
超时周期可能相对较长,重传的等待时间可能过长。
什么是快速重传?
快速重传不再以时间作为重传的标准,而是以数据作为重传的标准。
上述Seq2因为某些原因没有抵达接收方,但接收方已经收到了Seq3、4、5的数据包,并且回复了三次ACK2的数据包。发送端在收到三次ACK2的数据包以后,就会在超时定时器之前重传Seq2的数据包。
重传所有包还是重传丢失的包?
由于发送端并不知道三次ACK2的数据包是由发送方的哪几个数据包响应回来的(也就是Seq3、4、5),因此只重传Seq2还是要重传所有的数据包也是个问题。
根据TCP实现的不同,上述两种情况都可能存在。
SACK重传
SACK重传其实就是选择性重传,它是为了解决快速重传不知道需要重传哪些包的问题。
SACK是如何让发送方知道重传哪些包的?
TCP的选项字段增加一个SACK字段,接收方会将已经收到数据包序列号范围发送给发送方,这样发送方通过SACK信息就能找到丢失的数据包重传此数据包。
SACK的使用条件
SACK必须要发送方和接收方同时支持,在linux中可以通过net.ipv4.tcp_sack参数开启(Linux2.4以后默认开启)。
SACK可以让发送方准确的知道哪些数据包接收方没有收到,而D-SACK可以让发送方知道有哪些数据包被重复接收了。
D-SACK的优点是什么?
D-SACK如何让发送方知道ACK包丢失
上图中接收方收到了3000~3999的数据包,但回应的ACK发生了丢失,假设此时触发了超时重传,发送方会首先重传3000~3499的数据包,接收方在收到该包以后发现该包已经被接收过了,于是会回复一个SACK = 3000~3500告诉发送方该数据包已经被接受过了,因为ACK已经到4000了,所以这里是一个D-SACK。发送方在收到报文以后可以知道数据包没有丢,丢的只是ACK报文。
D-SACK如何判断数据包发送延时
上图中1000~1499的数据包被网络延迟,后续发送方收到了三个连续ACK 1000的报文触发了超时重传,重传以后,延时的网络包也抵达了接收方,此时接收方会回复一个SACK=1000~1500,因为ACK已经到了3000,所以这里是一个D-SACK,表示收到了重复的包。发送方收到了该ACK报文以后也可以判断出快速重传的原因是因为网络延迟。
如何开启D-SACK
在Linux下可以通过net.ipv4.tcp_dsack参数开启/关闭这个功能(Linux 2.4后默认打开)。
关于路由表rto重传修改和路由表重置命令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。