Tcp连接的建立与终止

Tcp的建立,终止

TCP报文段的格式

       对于TCP报文段,每个输出行开始按如下格式显示

       源 > 目的 : 标志

      

这个字段的格式是开始的序号,一个冒号,隐含的结尾序号及圆括号内的数据字节数

第二行中字段ack 1415531522表示确认序号

Win 4096表示发端通告的窗口大小

Tcp的建立称之为三次握手

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

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

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

 

ISN是随时间变化的


Tcp的终止被称为四次挥手

由于TCP连接是全双工的(即数据在两个方向上能同时传递),因此每个方向必须单独的进行关闭.这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接.

  收到一个FIN只以为着在这一方向上没有数据流动.一个TCP连接在收到一个FIN后仍能发送数据.

  首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭

(1)  TCP客户端发送一个FIN,用来关闭客户到服务器的数据传输.

(2)  服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号+1.和SYN一样,一个FIN将占用一个序号.

(3)  服务器关闭客户端的链接,发送一个FIN给客户端.

(4)  客户端发回ACK报文确认,并将确认序号设置为收到序号+1.


最大报文长度MSS

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

       当TCP发送一个SYN时,它能将MSS值设置为外出接口上的MTU长度减去固定的IP首部和TCP首部.对于一个以太网,MSS值可达1460字节.

       如果目的IP地址为”非本地的”,MSS通常的默认值为536.而且,如果中间的传输网络的MSS更小的话,这个值还会变的更小.

TCP的半关闭

       TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力.这就是所谓的半关闭.

    TCP状态变迁图


2MSL等待状态

       TIME_WAIT状态也称为2MSL等待状态.每个具体TCP实现必须选择一个报文段最大生存时间MSL.它是任何报文段被丢弃前在网络内的最大时间

       对于一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该链接必须在TIME_WAIT状态停留时间为2倍的MSL.这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发)

       这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口(客户端的ip地址和端口号,服务器的IP地址和端口号)不能被使用.这个连接只能在2MSL结束后才能使用.

平静时间的概念

如果处于2MSL等待端口的主机出现故障,它会在MSL秒内重新启动,并在重启后的MSL秒内不能建立任何连接

FIN_WAIT_2状态

:这就是著名的半关闭的状态了,这是在关闭连接时,客户端和服务器两次握手之后的状态。在这个状态下,应用程序还有接受数据的能力,但是已经无法发送数据,但是也有一种可能是,客户端一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,而直到应用层来决定关闭这个状态。

复位报文段

       RST:TCP首部中的6个标志比特之一,表示重置连接,复位连接

       一般来说,无论何时一个报文段发往基准的连接出现错误,TCP都会发出一个复位报文段.

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

       对于UDP,当一个数据报到达目的端口时,该端口没在使用,他将产生一个ICMP不可达的信息.而TCP则使用复位.

异常终止一个连接

终止一个连接的正常方式是一方发送FIN.有时这也称为有序释放,应为在所有排队数据都已发送之后才发送FIN,正常情况下没有任何数据丢失.但也有可能发送一个复位报文段而不是FIN来中途释放一个连接.有时称这位异常释放

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

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

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

检测半打开连接

如果一方已经关闭或异常终止连接而另一方缺还不知道,我们将这样的TCP连接称为半打开的.任何一端的主机异常都可能导致发生这种情况.只要不打算在半打开连接上传输数据,仍处于连接状态的一方就不会检测另一方已经出现异常.

       半打开连接的另一方产检原因是当客户主机突然掉电而不是正常的结束客户应用程序后再关机,服务器主机重启后,从客户向服务器发送另一行字符.由于服务器的TCP已经重新启动,它将丢失复位前的所有信息,因此他不知道数据报文段中提到的连接.TCP的处理原则是接受方以复位作为应答.

发布了24 篇原创文章 · 获赞 2 · 访问量 7980
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章