第21章 TCP的超时与重传
21.2 超时与重传的简单例子
首先观察T C P所使用的重传机制,我们将建立一个连接,发送一些分组来证明一切正常,然后拔掉电缆,发送更多的数据,再观察 T C P的行为。
图2 1 - 1表示的是t c p d u m p的输出结果(已经去掉了b s d i设置的服务类型信息)。
第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分钟。