第十八章 TCP连接的建立和终止

来源:互联网 发布:棋牌源码论坛eenot 编辑:程序博客网 时间:2024/05/19 23:16

18.2 连接的建立与终止

18.2.3 建立连接协议

为了建立一条TCP连接:
(1)请求端发送一个SYN段指明客户打算连接的服务器端口,以及初始序号(ISN)。这个SYN为报文段1.

(2)服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN占用一个序号

(3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN进行确认

以上过程称作三次握手

发送第一个SYN的一端将执行主动打开,接受这个SYN并发回下一个SYN的另一端执行被动打开。

18.2.4 连接终止协议

建立一个连接需要三次握手,而终止一个连接需要经过4次握手。

这是由TCP的半关闭造成的。既然一个TCP全双工,因此每个方向必须单独地进行关闭。

和SYN一样,FIN占用一个序号

 

下图是连接的建立和终止时间系列

9611502

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18.3 连接建立超时

大多数系统建立一个新连接的最长时间限制是75秒。

18.3.1 第一次超时时间

TCP软件采用一种500ms的定时器。这种500ms的定时器用于确定本节中的各种TCP超时。

当我们键入命令时,将建立一个6秒的定时器(12个时钟滴答),但它可能在之后的5.5~6秒内的任意时刻超时。

尽管定时器初始化为12个时钟滴答,但定时器会在设置后的第一个0~500ms中的任意时刻减一。从那以后,定时器大约每隔500ms减一,但在第一个500ms内是可变的。

18.4 最大报文段长度

最大报文段长度(MSS)表示TCP传往另一端的最大数据的长度。当建立一个连接时,连接的双方都要通告各自的MSS。

当建立一个连接时,每一方都有用于通告它期望接受的MSS选项(MSS选项只能出现在SYN报文段中)。如果一方不接受来自另一方的MSS值,则MSS就定为默认值536字节(这个默认值允许20字节的IP首部和20字节的TCP首部以适合576字节的IP数据报)

对于一个以太网,MSS值可达1460字节。

18.6 TCP的状态变迁图

image

只有当SYN_RCVD状态是从LISTEN状态进入,而不是从SYN_SENT状态进入时从SYN_RCVD状态回到LISTEN的状态变迁才是有效地.

18.6.2 平静时间的概念

对于来自某个连接的较早替身的迟到报文段,2MSL等待可防止将它解释成使用相同插口对新连接的一部分.但这只有在处于2MSL等待连接中的主机处于正常工作状态时才有效.

TCP在重新启动后的MSL秒不能建立任何连接.这就称作平静时间

18.6.3 FIN_WAIT_2状态

在FIN_WAIT_2状态我们已经发出FIN,并且另一端也对它进行了确认.只有另一端的进程完成这个关闭,我们这段才会从FIN_WAIT_2状态进入TIME_WAIT状态

这就意味着我们这段可能永远保持这个状态.另一端也将处于CLOSE_WAIT状态,并一直保持这个状态直到应用层决定进行关闭.

18.7 复位报文段

TCP首部中的RST比特是用于”复位”的.

可能产生复位报文段的情况:

18.7.1.到不存在的端口的连接请求

当连接请求到达时,目的端口没有进程正在监听.

18.7.2异常终止一个连接

有可能发送一个RST复位报文段终止一个连接,称为异常释放

异常终止一个连接对应用程序有两个优点

(1)丢弃任何待发送数据并立即发送复位报文段;

(2)RST的接收方会区分另一端执行的是异常关闭还是正常关闭.

18.7.3 检测半打开连接

如果一方已经关闭或异常终止而另一方却还不知道,我们将这样的TCP连接称为半打开的.

只要不再半打开的连接上传输数据,仍处于连接状态的一方就不会检测另一方已经出现异常.

0 0
原创粉丝点击