(六):TCP的链接创建与释放过程

一:    TCP的三次握手即链接的创建


用三次握手创建TCP链接,如图示:服务器

如图,假设A运行的是TCP客户程序,而B运行的是TCP服务器程序。网络

最初两端的TCP进程都处于CLOSED(关闭)状态spa

注意:A主动打开链接,B被动打开链接。进程

    B的TCP服务器进程先建立传输控制块TCB,准备接受客户进程的链接请求。而后服务器进程就处于LISTEN(侦听)状态,等待客户的链接请求。若有,即作出响应。同步

    A的TCP客户进程也是首先建立传输控制块TCB,而后向B发送链接请求报文段。这时候首部中的同步位SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN报文段即SYN=1的报文段不能携带数据,但要消耗掉一个序号。这是,TCP客户进程进入SYN-SENT(同步已发送)状态。请求

   B收到链接请求报文段后,如赞成创建链接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号是ack+1,同时也为本身选择一个初始序号seq=y。请注意,这个报文段也不能携带数据,但一样要消耗掉一个序号。这时,TCP服务器进程进入SYN-RCVD(同步已收到 )状态程序

   TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号是ack=y+1,而本身的序号seq=x+1。TCP的标准规定,ACK报文段能够携带数据。但若是不携带数据则不消耗序号。在这种状况下,下一个数据报文段的序号还是seq=x+1。这时候,TCP链接已经创建。A进入ESTABLISHED(已创建链接)状态。im

    当B收到A的确认后,B也进入已创建链接状态。通信

    为何A还要发送一次确认呢?数据

    这主要是为了防止已失效的链接请求报文段忽然又传送到了B,于是产生错误。

 

 

二:    TCP的四次挥手即链接的释放

TCP释放链接的过程,四次挥手,如图示:

        

               

    数据传输结束后,通讯的双方均可释放链接。

    如今A 和 B都处于创建链接状态即ESTABLISHED。A的应用进程向其TCP发出链接释放报文段,并中止在发送数据,主动关闭TCP链接。A把链接释放报文段首部的终止控制位FIN置1,其序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1。.这时A进入FIN-WAIT-1(终止等待1)状态,等待B的确认

    请注意,FIN报文段即便不携带数据,它也消耗掉一个序号

    B收到 链接释放报文段后即发出确认确认号是ack=u+1,而这个报文段本身的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。而后B就进入CLOSE-WAIT(关闭等待)状态。

    TCP服务器进程这时应通知应用进程,于是从A到B这个方向的链接就释放了。

    注意:这时的TCP链接处于半关闭(half-close)状态即A已经没有数据要发送了,但B若发送数据,A仍要接收。也就是说,从B到A这个方向的链接并未关闭,这个状态可能会持续一些时间。

    A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态。等待B发出的链接释放报文段。

    若B已经没有要向A发送的数据,其应用进程就通知TCP释放链接。这时B发出的链接释放报文段必须使FIN=1。现假定B的序号w(在半关闭状态,B可能又发送了一些数据)。B还必须重复上次已发送的确认号ack=u+1。这时B就进入LAST-ACk(最后确认)状态,等待A的确认。                                                                      

    A在收到B的链接释放报文段后,必须对此发出确认。在确认报文段中把ACK置1确认号ack=w+1,而本身的序号是seq=u+1。而后进入到TIME-WAIT(时间等待)状态

    注意:如今TCP链接尚未释放掉。必须通过时间等待计时器TIME-WAIT设置的时间2MSL后,A才进入到CLOSED状态。时间MSL叫作最长报文段寿命。    

    当A进入到时间等待状态后,要通过必定的时间才能进入CLOSED状态。才能开始下一个链接的创建。

    当A撤下相应的传输控制块TCB后,就结束了此次的TCP链接。

    为何A在TIME-WAIT时间等待状态必须等待一段时间了。好比说等待2MSL。

第一:

        为了保证A发送的最后一个ACK报文段可以到达B。这个ACK报文段有可能丢失,于是使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。接着A重传一次确认,从新启动2MSL计时器。最后,A和B都正常进入到CLOSED状态。若是A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段当即释放链接,那么就没法收到B重传的FIN+ACK报文段。于是也不会在发送一次确认报文段,这样,B就没法正常进入到ClOSED状态。

第二:

        防止以前提到过的“已失效的链接请求报文段“出如今本链接中。A在发送完最后一个ACK报文段后,在通过时间2MSL,就可使本链接持续的时间内所产生的全部报文段都从网络中消失,这样就可使下一个新的链接中不会出现这种旧的链接请求报文段。

 

    注意:

        B只要收到了A发出的确认,就进入了CLOSED状态。一样,B在撤销相应的传输控制块TCB后,就结束了此次的TCP链接。能够发现,B结束TCP链接的时间要比A早一些。

相关文章
相关标签/搜索