《TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》 —2.2 T/TCP中的新TCP选项
2.2 T/TCP中的新TCP选项
T/TCP协议中有三个新的TCP选项。图2-1给出了目前TCP协议使用的所有选项。其中前3个出自最初的TCP协议规范,即RFC 793 [Postel 1981b]。而窗口宽度和时间戳则是在RFC 1323 [Jacobson, Braden, and Borman 1992]中定义的。最后三个选项(CC、CCnew和CCecho)则是T/TCP协议新引入的,在RFC 1644 [Braden 1994]中定义。最后这几个选项的使用规则如下:
1) CC选项在客户执行主动打开操作时发出的第一个SYN报文段中使用。它也可以在其他一些报文段中使用,但前提是对方发过来的SYN报文段中带有CC或CCnew选项。
2) CCnew选项只能在第一个SYN报文段中使用。当需要执行正常的三次握手操作时,客户端的TCP协议就使用CCnew选项而不用CC选项。
3) CCecho选项仅在三次握手过程中的第二个报文段中使用,通常由服务器发出该报文段,并携带有SYN和ACK。该报文段将CC或CCnew的值返回给客户,告知客户本服务器支持T/TCP协议。
本章以及下一章的例子中我们还会进一步讨论这些选项。
图2-1 TCP选项
不难发现,T/TCP的3个新选项均为6字节长。为了使这些选项继续按4字节定界(这在某些系统体系结构中有助于提高性能),我们通常在这些选项的前面加上两个单字节的无操作(NOP)。
如果客户既支持RFC 1323,也支持T/TCP协议,这时客户发给服务器的第一个SYN报文段中的TCP选项如图2-2所示。我们特意给出了每个选项的类型值和长度值;NOP用阴影表示,其类型值(kind)为1。第二个选项是窗口宽度(Window Scale),这里用“WS”标记。方格上方的数字是每个选项相对于选项字段起始的字节偏移量。TCP协议选项的最大长度为40字节,本例中的TCP选项共需28字节。从图中可以看出,采用NOP填充以后,所有4个4字节的值都符合4字节定界规则。
图2-2 同时支持RFC 1323和T/TCP的客户发给服务器的第一个SYN报文段的TCP选项
如果服务器既不支持RFC 1323,也不支持T/TCP协议,它发给客户带有SYN和ACK的应答中就只有报文段最大长度(MSS)选项。但如果服务器既支持RFC 1323,也支持T/TCP协议,那么它给客户的应答中将包含图2-3所示的TCP选项,总长为36字节。
图2-3 服务器对图2-2所示请求的应答中的TCP选项
由于CCecho选项总是和CC选项一起发送,因此T/TCP协议的设计本可以把这两个选项合二为一,从而为宝贵的TCP协议选项空间节省4字节。或者也可以这样,这种最坏的选项排列只在服务器给出SYN/ACK时出现,而它们的出现无论如何总要使TCP处理速度变慢的,因此索性连NOP字节也省去,则实际上可以节省7字节。
由于报文段的最大长度和窗口宽度选项只在SYN报文段中出现,而CCecho选项只在SYN/ACK报文段中出现,因此,如果连接两端都支持RFC 1323和T/TCP协议,则自此以后的报文段中也都只包含时间戳和CC选项,如图2-4所示。
图2-4 两端都支持RFC 1323和T/TCP时非SYN报文段所包含的TCP选项
可以看出,一旦连接建立,时间戳和CC选项给所有的TCP报文段都增加了20字节。
当讲到T/TCP协议时,我们常常用一般术语CC选项作为本节所引入的3个TCP选项的统称。
时间戳和CC选项带来了多大的额外开销呢?假设两台主机位于两个不同的网络上,报文段最大长度设为典型值512字节。要传递1MB的文件,如果没有这些选项,则需要1954个报文段;如果使用时间戳和CC选项,则需要2033个报文段,较前者增加了4%。如果报文段最大长度为1460字节,那么报文段数只增加了1.5%。
- 点赞
- 收藏
- 关注作者
评论(0)