没有合适的资源?快使用搜索试试~ 我知道了~
计算机高手培养手册大全
需积分: 6 2 下载量 147 浏览量
2010-02-08
00:31:19
上传
评论
收藏 669KB PDF 举报
温馨提示
试读
19页
适用于计算机初学者,也成成为高手的速查工具。。
资源详情
资源评论
资源推荐
下载
第21章 TCP的超时与重传
21.1 引言
T C P提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确
认都有可能会丢失。 T C P 通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出
时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,
即怎样决定超时间隔和如何确定重传的频率。
我们已经看到过两个超时和重传的例子:(1)在6 . 5 节的I C M P 端口不能到达的例子中,看
到T F T P 客户使用U D P 实现了一个简单的超时和重传机制:假定 5秒是一个适当的时间间隔,
并每隔5秒进行重传;( 2)在向一个不存在的主机发送 A R P的例子中(第 4 . 5 节),我们看到
当T C P 试图建立连接的时候,在每个重传之间使用一个较长的时延来重传 S Y N 。
对每个连接,T C P 管理4个不同的定时器。
1) 重传定时器使用于当希望收到另一端的确认。在本章我们将详细讨论这个定时器以及
一些相关的问题,如拥塞避免。
2) 坚持( p e r s i s t ) 定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。第
2 2章将讨论这个问题。
3) 保活( k e e p a l i v e ) 定时器可检测到一个空闲连接的另一端何时崩溃或重启。第 2 3 章将描述
这个定时器。
4) 2MSL定时器测量一个连接处于 T I M E _ WA I T状态的时间。我们在 1 8 . 6 节对该状态进行
了介绍。
本章以一个简单的 T C P 超时和重传的例子开始,然后转向一个更复杂的例子。该例子可
以使我们观察到T C P时钟管理的所有细节。可以看到 T C P的典型实现是怎样测量 T C P 报文段的
往返时间以及 T C P 如何使用这些测量结果来为下一个将要传输的报文段建立重传超时时间。
接着我们将研究T C P的拥塞避免
—
当分组丢失时T C P 所采取的动作
—
并提供一个分组丢失
的实际例子,我们还将介绍较新的快速重传和快速恢复算法,并介绍该算法如何使 T C P检测
分组丢失比等待时钟超时更快。
21.2 超时与重传的简单例子
首先观察T C P 所使用的重传机制,我们将建立一个连接,发送一些分组来证明一切正常,
然后拔掉电缆,发送更多的数据,再观察 T C P 的行为。
正常发送本行
在发送本行前断连
9分钟后TCP放弃时输出
图2 1 - 1表示的是t c p d u m p 的输出结果(已经去掉了 b s d i 设置的服务类型信息)。
图21-1 TCP超时和重传的简单例子
第1、2和3行表示正常的T C P 连接建立的过程,第4行是“hello, world”(1 2个字符加上回
车和换行)的传输过程,第 5行是其确认。接着我们从 s v r 4 拔掉了以太网电缆,第 6行表示
“and hi”将被发送。第 7 ~ 1 8行是这个报文段的1 2次重传过程,而第 1 9行则是发送方的 T C P 最
终放弃并发送一个复位信号的过程。
现在检查连续重传之间不同的时间差,它们取整后分别为 1、3、6、1 2、2 4 、4 8和多个6 4
秒。在本章的后面,我们将看到当第一次发送后所设置的超时时间实际上为 1 . 5秒(它在首次
发送后的1 . 0 1 3 6 秒而不是精确的1 . 5 秒后,发生的原因我们已在图 1 8 - 7中进行了解释),此后该
时间在每次重传时增加1倍并直至6 4 秒。
这个倍乘关系被称为“指数退避 (exponential backoff ) ”。可以将该例子与 6 . 5 节中的T F T P
例子比较,在那里每次重传总是在前一次的 5秒后发生。
首次分组传输(第6行,2 4 . 4 8 0 秒)与复位信号传输(第 1 9 行,5 6 6 . 4 8 8秒)之间的时间差
约为9分钟,该时间在目前的 T C P 实现中是不可变的。
对于大多数实现而言,这个总时间是不可调整的。Solaris 2.2允许管理者改变这个时
间(E . 4 节中的t c p _ i p _ a b o r t _ i n t e r v a l变量),且其默认值为2分钟,而不是最常用的
9分钟。
21.3 往返时间测量
T C P超时与重传中最重要的部分就是对一个给定连接的往返时间( RT T )的测量。由于路
由器和网络流量均会变化,因此我们认为这个时间可能经常会发生变化, T C P 应该跟踪这些
变化并相应地改变其超时时间。
首先T C P 必须测量在发送一个带有特别序号的字节和接收到包含该字节的确认之间的
RT T。在上一章中,我们曾提到在数据报文段和 A C K 之间通常并没有一一对应的关系。在图
第21章 TCP的超时与重传使用227
下载
2 0 . 1 中,这意味着发送方可以测量到的一个 RT T,是在发送报文段4(第1 ~ 1 0 2 4 字节)和接收
报文段7(对1 ~ 1 0 2 4字节的A C K )之间的时间,用M表示所测量到的RT T 。
最初的T C P规范使T C P 使用低通过滤器来更新一个被平滑的 RT T 估计器(记为O)。
R← R+ ( 1 - ) M
这里的 是一个推荐值为 0 . 9 的平滑因子。每次进行新测量的时候,这个被平滑的 RT T 将得到
更新。每个新估计的9 0%来自前一个估计,而1 0 % 则取自新的测量。
该算法在给定这个随RT T 的变化而变化的平滑因子的条件下, RFC 793推荐的重传超时时
间RTO(Retransmission Ti m e O u t)的值应该设置为
RTO = R
这里的 是一个推荐值为2的时延离散因子。
[Jacobson 1988] 详细分析了在 RT T 变化范围很大时,使用这个方法无法跟上这种变化,
从而引起不必要的重传。正如 J a c o b s o n 记述的那样,当网络已经处于饱和状态时,不必要的
重传会增加网络的负载,对网络而言这就像在火上浇油一样。
除了被平滑的RT T估计器,所需要做的还有跟踪RT T 的方差。在往返时间变化起伏很大时,
基于均值和方差来计算 RTO,将比作为均值的常数倍数来计算 RTO能提供更好的响应。在
[Jacobson 1988]中的图5和图6中显示了根据RFC 793计算的某些实际往返时间的 RTO和下面考
虑了往返时间的方差所计算的 RTO的比较结果。
正如J a c o b s o n 所描述的,均值偏差是对标准偏差的一种好的逼近,但却更容易进行计算
(计算标准偏差需要一个平方根)。这就引出了下面用于每个 RT T 测量M的公式。
E r r = M-A
A←A + g E rr
D ←D + h( | E r r |-D)
RTO = A + 4D
这里的A是被平滑的RT T(均值的估计器)而 D则是被平滑的均值偏差。 E r r是刚得到的测量结
果与当前的RT T 估计器之差。A和D均被用于计算下一个重传时间( RTO)。增量g起平均作用,
取为1 / 8 (0 . 1 2 5 )。偏差的增益是h,取值为0 . 2 5 。当RT T变化时,较大的偏差增益将使 RTO快
速上升。
[Jacobson 1988]指明在计算 RTO时使用 2 D ,但经过后来更深入的研究,
[Jacobson1990c]将该值改为4D,也就是在BSD Net/1的实现中使用的那样。
J a c o b s o n指明了一种使用整数运算来计算这些公式的方法,并被许多实现所采用(这也就
是g, h和倍数4均是2的乘方的一个原因,这样一来计算均可只通过移位操作而不需要乘、除运
算来完成)。
将J a c o b s o n 与最初的方法比较,我们发现被平滑的均值计算公式是类似的( 是1减去增
益g),而增益可使用不同的值。而且 J a c o b s o n计算RTO的公式依赖于被平滑的 RT T 和被平滑的
均值偏差,而最初的方法则使用了被平滑的 RT T 的一个倍数。
在看完下一节中的例子时,我们将看到这些估计器是如何被初始化的。
Karn算法
在一个分组重传时会产生这样一个问题:假定一个分组被发送。当超时发生时, RTO正
228使用TCP/IP详解,卷1:协议
下载
如2 1 . 2节中显示的那样进行退避,分组以更长的 RTO进行重传,然后收到一个确认。那么这个
A C K是针对第一个分组的还是针对第二个分组呢?这就是所谓的重传多义性问题。
[Karn and Partridge 1987]规定,当一个超时和重传发生时,在重传数据的确认最后到达
之前,不能更新 RT T 估计器,因为我们并不知道 A C K 对应哪次传输(也许第一次传输被延迟
而并没有被丢弃,也有可能第一次传输的 A C K被延迟)。
并且,由于数据被重传, RTO已经得到了一个指数退避,我们在下一次传输时使用这
个退避后的 RTO。对一个没有被重传的报文段而言,除非收到了一个确认,否则不要计算
新的RTO。
21.4 往返时间RTT的例子
在本章中,我们将使用以下这些例子来检查 T C P 的超时和重传、慢启动以及拥塞避免等
方方面面的实现细节。
使用s o c k 程序和如下的命令来将 3 2 7 6 8字节的数据从主机 s l i p 发送到主机v a n g o g h . c s .
b e r k e l e y . e d u上的丢弃服务。
slip % sock -D -i -n32 vangogh.cs.berkeley.edu discard
在扉页前图中,可以看到 s l i p通过两个 S L I P 链路与1 4 0 . 2 5 2 . 1 以太网相连,并从这里通过
I n t e r n e t到达目的地。通过使用两个 9600 b/s的S L I P 链路,我们期望能够得到一些可测量的
时延。
该命令执行3 2 个写1 0 2 4字节的操作。由于s l i p 和b s d i 之间的M T U 为2 9 6 字节,因此这些
操作会产生1 2 8 个报文段,每个报文段包含 2 5 6字节的用户数据。整个传输过程的时间约为 4 5
秒,我们观察到了一个超时和三次重传。
当该传输过程进行时,我们在 s l i p上使用t c p d u m p 来截获所有的发送和接收的报文段,
并通过使用 - D 选项来打开插口排错功能(见 A . 6 节),这样便可以通过运行一个修改后的
t r p t ( 8 ) 程序来打印出连接控制块中与 RT T 、慢启动及拥塞避免等有关的多个变量。
对于给出的跟踪结果,我们不能够完全进行显示,相反,我们将在介绍本章时看到它的
各个部分。图2 1 - 2 显示的是前5秒中的数据和确认的传输过程。与前面 t c p d u m p 的输出相比,
我们已对其显示稍微进行了修改。虽然我们仅能够在运行 t c p d u m p 的主机上测量分组发送
和接收的时间,但在本图中我们希望显示出分组正在网络中传输(它们确实存在,因为这
个局域网连接与共享式的以太网并不一样)以及接收主机何时可能产生 A C K(在本图中去
掉了所有的窗口大小通告。主机 s l i p 总是通告窗口大小为 4 0 9 6 ,而v a n g o g h 则总是通告窗
口大小为8 1 9 2)。
还需要注意的是在本图中我们已经将报文段按照在主机 s l i p 上发送和接收的序号记为
1 ~ 1 3 和1 5。这与在这个主机上所收集的 t c p d u m p的输出结果有关。
21.4.1 往返时间RTT的测量
在图2 1 - 2 左边的时间轴上有三个括号,它们表明为进行RT T计算对哪些报文段进行了计时,
并不是所有的报文段都被计时。
大多数源于伯克利的T C P实现在任何时候对每个连接仅测量一次 RT T 值。在发送一个报文
段时,如果给定连接的定时器已经被使用,则该报文段不被计时。
第21章 TCP的超时与重传使用229
下载
剩余18页未读,继续阅读
mayala520yy
- 粉丝: 13
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0