第18章 TCP连接的建立与终止使用179
下第二个超时时间几乎准确地为 2 4 秒。运行十多次测试,发现第一次超时时间在 5 . 5 9 秒~ 5 . 9 3
秒之间变化。然而,第二次超时时间则总是 2 4 . 0 0 秒(精确到小数点后面两位)。
这是因为B S D 版的T C P 软件采用一种500 ms的定时器。这种500 ms的定时器用于确定本章
中所有的各种各样的T C P超时。当我们键入t e l n e t命令,将建立一个6秒的定时器(1 2个时钟滴
答(t i c k )),但它可能在之后的 5 . 5 秒~ 6 秒内的任意时刻超时。图 1 8 - 7 显示了这一发生过程。
尽管定时器初始化为 1 2 个时钟滴答,但定时计数器会在设置后的第一个 0~500 ms中的任意时
刻减1。从那以后,定时计数器大约每隔 500 ms减1,但在第1个500 ms内是可变的(我们使用
限定词“大约”是因为在 T C P 每隔500 ms获得系统控制的瞬间,系统内核可能会优先处理其
他中断)。
图18-7 TCP的500 ms定时器
当滴答计数器为 0时,6秒的定时器便会超时(见图 1 8 - 7 ),这个定时器会在以后的 2 4 秒
(4 8个滴答)重新复位。之后的下一个定时器将更接近 2 4 秒,因为当T C P的500 ms定时器被内
核调用时,它就会被修改一次。
18.3.2 服务类型字段
在图1 8 - 6 中,出现了符号 [ tos 0x10 ]。这是I P 数据报内的服务类型(TO S)字段(参见图
3 - 2)。B S D / 3 8 6中的Te l n e t客户进程将这个字段设置为最小时延。
18.4 最大报文段长度
最大报文段长度(M S S)表示T C P传往另一端的最大块数据的长度。当一个连接建立时,
连接的双方都要通告各自的 M S S 。我们已经见过 M S S 都是1 0 2 4 。这导致I P 数据报通常是4 0 字
节长:2 0 字节的T C P 首部和2 0 字节的I P 首部。
在有些书中,将它看作可“协商”选项。它并不是任何条件下都可协商。当建立一个连
接时,每一方都有用于通告它期望接收的 M S S 选项(M S S 选项只能出现在S Y N 报文段中)。如
果一方不接收来自另一方的 M S S值,则M S S就定为默认值5 3 6字节(这个默认值允许 2 0 字节的
I P 首部和2 0字节的T C P 首部以适合5 7 6字节I P 数据报)。
一般说来,如果没有分段发生, M S S 还是越大越好(这也并不总是正确,参见图 2 4 - 3 和
图2 4 - 4 中的例子)。报文段越大允许每个报文段传送的数据就越多,相对 I P和T C P 首部有更高
的网络利用率。当 T C P 发送一个S Y N 时,或者是因为一个本地应用进程想发起一个连接,或
者是因为另一端的主机收到了一个连接请求,它能将 M S S 值设置为外出接口上的 M T U长度减
去固定的I P 首部和T C P 首部长度。对于一个以太网, M S S 值可达1 4 6 0 字节。使用IEEE 802.3的
封装(参见2 . 2 节),它的M S S 可达1 4 5 2 字节。
在本章见到的涉及 B S D / 3 8 6 和S V R 4的M S S 为1 0 2 4 ,这是因为许多 B S D的实现版本需要
应用程序在此刻使
TCP设置一个6秒(12
滴答)的定时器
每滴答500毫秒
11时钟滴答×500ms/滴答=5.5
TCP重新设置一个
24秒的定时器
秒