[读书笔记]TCP/IP详解V1读书笔记- 21

连续重传之间不同的时间差,它们取整后分别为1、3、6、1 2、2 4、4 8和多个6 4
秒。这个倍乘关系被称为“指数退避(exponential backoff )”,首次分组传输(第6行,2 4 . 4 8 0秒)

与复位信号传输(第1 9行,5 6 6 . 4 8 8秒)之间的时间差约为9分钟,该时间在目前的T C P实现中是不可变的。

---------------------------------------------------------

M表示所测量到的RT T。
最初的T C P规范使T C P使用低通过滤器来更新一个被平滑的RT T估计器(记为O)。
R← R+ ( 1- rR)M
这里的R是一个推荐值为0 . 9的平滑因子。每次进行新测量的时候,这个被平滑的RT T将得到
更新。每个新估计的9 0%来自前一个估计,而1 0 %则取自新的测量。
该算法在给定这个随RT T的变化而变化的平滑因子的条件下, RFC 793推荐的重传超时时
间RTO(Retransmission Ti m e O u t)的值应该设置为
RTO = Rb
这里的b是一个推荐值为2的时延离散因子。

--------------------------------------------------------

当一个超时和重传发生时,在重传数据的确认最后到达
之前,不能更新RT T估计器,因为我们并不知道A C K对应哪次传输

-----------------------------------------------------------

在发送一个报文段时,如果给定连接的定时器已经被使用,则该报文段不被计时。(测量RTTI时)

------------------------------

报文丢失后,最先知道的是接收端,会发现报文失序,得到的序列号不是期望值,因此,接收方会将失序的报文暂时存储,并减少窗口值,同时向发送方发送最近的一次成功报文的序列号

当发送方接收到3次重复的ACK时,得知有报文丢失,根据丢失的序列号,发送丢失的报文。接收方接收到丢失的报文后,将所有暂存的报文一次性发给应用程序。窗口回复到原来正常水平。

-------------------------------

组丢失的指示:发生超时和接收到重复的确认

---------------------------------

拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估

计,而后者则与接收方在该连接上的可用缓存大小有关。

---------------------------------------------

拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口c w n d和一个慢

启动门限s s t h re s h。这样得到的算法的工作过程如下:

1) 对一个给定的连接,初始化c w n d为1个报文段, s s t h re s h为6 5 5 3 5个字节。

2) TCP输出例程的输出不能超过c w n d和接收方通告窗口的大小。拥塞避免是发送方使用

的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估

计,而后者则与接收方在该连接上的可用缓存大小有关。

3) 当拥塞发生时(超时或收到重复确认),s s t h re s h被设置为当前窗口大小的一半( c w n d

和接收方通告窗口大小的最小值,但最少为2个报文段)。此外,如果是超时引起了拥塞,则

c w n d被设置为1个报文段(这就是慢启动)。

4) 当新的数据被对方确认时,就增加c w n d,但增加的方法依赖于我们是否正在进行慢启

动或拥塞避免。如果c w n d小于或等于s s t h re s h,则正在进行慢启动,否则正在进行拥塞避免。

慢启动一直持续到我们回到当拥塞发生时所处位置的半时候才停止(因为我们记录了在步骤2

中给我们制造麻烦的窗口大小的一半),然后转为执行拥塞避免。

慢启动算法初始设置c w n d为1个报文段,此后每收到一个确认就加1。正如2 0 . 6节描述的

那样,这会使窗口按指数方式增长:发送1个报文段,然后是2个,接着是4个⋯⋯。

拥塞避免算法要求每次收到一个确认时将c w n d增加1 /c w n d。与慢启动的指数增加比起来,

这是一种加性增长(additive increase)。我们希望在一个往返时间内最多为c w n d增加1个报文段

(不管在这个RT T中收到了多少个A C K),然而慢启动将根据这个往返时间中所收到的确认的

个数增加c w n d。

------------------------------------

在收到一个失序的报文段时, T C P立即需要产生一个A C K

(一个重复的A C K)。这个重复的A C K不应该被迟延。该重复的A C K的目的在于让对方知道收

到一个失序的报文段,并告诉对方自己希望收到的序号。

-----------------------------------------

由于我们不知道一个重复的A C K是由一个丢失的报文段引起的,还是由于仅仅出现了几

个报文段的重新排序,因此我们等待少量重复的A C K到来。假如这只是一些报文段的重新排

序,则在重新排序的报文段被处理并产生一个新的A C K之前,只可能产生1 ~ 2个重复的A C K。

如果一连串收到3个或3个以上的重复A C K,就非常可能是一个报文段丢失了(我们在2 1 . 5节

中见到过这种现象)。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。这就

是快速重传算法。

--------------------------------------------------

快速重传算法

1) 当收到第3个重复的A C K时,将s s t h re s h设置为当前拥塞窗口c w n d的一半。重传丢失的

报文段。设置c w n d为s s t h re s h加上3倍的报文段大小。

2) 每次收到另一个重复的A C K时, c w n d增加1个报文段大小并发送1个分组(如果新的

c w n d允许发送)。

3) 当下一个确认新数据的A C K到达时,设置c w n d为s s t h re s h(在第1步中设置的值)。这个

A C K应该是在进行重传后的一个往返时间内对步骤1中重传的确认。另外,这个A C K也应该

是对丢失的分组和收到的第1个重复的A C K之间的所有中间报文段的确认。这一步采用的是拥

塞避免,因为当分组丢失时我们将当前的速率减半。

----------------------------------------------------

posted @ 2011-09-22 23:08  lifengzhong  阅读(347)  评论(0编辑  收藏  举报