TCP的连接与终止
TCP的连接与终止
1.TCP报头
T C P将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据; T C P提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。
2.TCP连接的建立与终止
3.TCP的状态变迁
导致两个进入ESTABLISHED状态的变迁对应打开一个连接,而两个导致从ESTABLISHED状态离开的变迁对应关闭一个连接。
4. 2MSL等待状态
TI M E WA I T状态也称为2 M S L等待状态。每个具体T C P实现必须选择一个报文段最大生存时间M S L(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。
对一个具体实现所给定的M S L值,处理的原则是:当T C P执行一个主动关闭,并发回最后一个A C K,该连接必须在T I M E WA I T状态停留的时间为2倍的M S L。这样可让T C P再次发送最后的A C K以防这个A C K丢失(另一端超时并重发最后的F I N)。
这种2 M S L等待的另一个结果是这个T C P连接在2 M S L等待期间,定义这个连接的插口(客户的I P地址和端口号,服务器的I P地址和端口号)不能再被使用。这个连接只能在2 M S L结束后才能再被使用。
遗憾的是,大多数T C P实现(如伯克利版)强加了更为严格的限制。在2 M S L等待期间,插口中使用的本地端口在默认情况下不能再被使用。所以一般都是客户机执行主动关闭。
我们说图1 8 - 1 3中客户执行主动关闭并进入T I M E WA I T是正常的。服务器通常执行被动关闭,不会进入T I M E WA I T状态。这暗示如果我们终止一个客户程序,并立即重新启动这个客户程序,则这个新客户程序将不能重用相同的本地端口。这不会带来什么问题,因为客户使用本地端口,而并不关心这个端口号是什么。
然而,对于服务器,情况就有所不同,因为服务器使用熟知端口。如果我们终止一个已
经建立连接的服务器程序,并试图立即重新启动这个服务器程序,服务器程序将不能把它的
这个熟知端口赋值给它的端点,因为那个端口是处于2 M S L连接的一部分。在重新启动服务器程序前,它需要在1 ~ 4分钟。
下图就是一个服务器执行主动关闭带来影响的例子。
5.最大报文段长度
最大报文段长度(Max Segment Size)表示T C P传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。当建立一个连接时,每一方都有用于通告它期望接收的MSS选项(MSS选项只能出现在SYN报文段中)。如果一方不接收来自另一方的MSS值,则MSS就定为默认值5 3 6字节(这个默认值允许2 0字节的I P首部和2 0字节的T C P首部以适合5 7 6字节I P数据报)。
例子
考虑我们的主机s l i p,通过M T U为2 9 6的S L I P链路连接到路由器b s d i上。图1 8 - 8显示这些系统和主机s u n。
从s u n向s l i p发起一个T C P连接,并使用t c p d u m p来观察报文段。图1 8 - 9显示这个连接的建立(省略了通告窗口大小)。
在这个例子中, s u n发送的报文段不能超过2 5 6字节的数据,因为它收到的M S S选项值为2 5 6(第2行)。此外,由于s l i p知道它外出接口的M T U长度为2 9 6,即使s u n已经通告它的M S S为1 4 6 0,但为避免将数据分段,它不会发送超过2 5 6字节数据的报文段。系统允许发送的数据长度小于另一端的M S S值。只有当一端的主机以小于5 7 6字节的M T U直接连接到一个网络中,避免这种分段才会有效。如果两端的主机都连接到以太网上,都采用5 3 6的M S S,但中间网络采用2 9 6的M T U,也将会出现分段。使用路径上的M T U发现机制是关于这个问题的唯一方法。路径上的MTU发现机制就是运用ICMP的需要分片但是设置了不分片位(DF)的错误消息,这个错误消息返回下一站的MTU。如果所用的ICMP版本并不返回下一站的MTU的话,那么只能一个一个(设定一系列的测试值)测试了,由大到小。