TCP协议的创建与释放及TCP的有限状态基

1、TCP的连接创建(三次握手)服务器

以下图所示:假定最初两端的TCP进程都处于关闭状态。下图中,client主动打开连接,server被动打开连接ide

    

wKiom1c64PDi280nAADNTG48oZw185.jpg

建立过程:spa

    ①、server的TCP服务器进程先建立传输控制块TCB(存储了每个连接中的重要信息),准备接受client进程的链接请求。而后服务器进程就处于LISTEN(收听)状态,等待客户的链接请求。若有,做出响应。
server

    ②、client的TCP客户进程也是首先建立传输控制模块TCB,而后向server发出链接请求报文段,这时首部中的同步位SYN =1,同时选择一个初始序号 seq =1000,TCP规定,SYN报文段不能携带数据,但要消耗一个序号。这时,TCP客户进程进入SYN-SENT(同步以发送)状态。mss表示最大段尺寸,blog

若是一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP 层分片,为了不这种状况,客户端声明本身的最大段尺寸,建议服务器端发来的段不要超过这个长度。进程

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

    ④、TCP客户进程收到server的确认后,还要向server给出确认,确认报文段ACK 置1,确认号ack =8001,而本身序号为seq=1002,TCP的标准规定,ACK 报文段能够携带数据。但若是不携带数据则不消耗序号,这种状况下,下一个数据报文段的序号还是seq =1002.这时,TCP链接已经创建,client进去ESTABLISHED(已创建链接)状态。
get

    ⑤、当servers收到client的确认后,也进入ESTABLISHED状态。同步

****************为何client还要发送一次确认呢?主要是为了防止已失效的链接请求报文段忽然又传送到了server,于是产生错误。**********************it

2、TCP的链接释放(四次挥手)

以下图所示:

wKiom1c66CbgRmmMAADOmVB2uDc447.jpg

释放链接过程:

    ①、数据传输结束后,通讯的双方均可释放链接。如今client和server都处于ESTABLISHED状态。client的应用进程先向其TCP发出链接释放,并中止再发送数据,主动关闭TCP链接。client把链接释放报文段首部的FIN置1,其序号 seq=1021,它等于前面已传送过的数据的最后一个字节的序号加1.这是client进入FIN-WAIT-1(终止等待1)状态,等待server的确认。TCP规定,FIN报文段即便不携带数据,它也消耗一个序号。

    ②、server收到链接释放报文段后即发出确认,确认号是ack=1022,而后server就进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应经过高层应用进程,而从client到server这个方向的链接就释放了,这时的TCP链接处于半关闭(half-close)状态,即client已经没有数据要发送了,但server若发送数据,client仍要接收。也就是说server到client这个方向的链接并未关闭。

    ③、client收到来自server的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待server发出的链接释放报文段。若server已经没有要向client发送的数据,其应用进程就通知TCP 释放链接。这是B发出的链接释放报文段必须使FIN=1 。现假定server的序号为8011.这是server就进入LAST-ACK(最后确认状态),等待client的确认。

    ④、client在收到server的链接释放报文段后,必须对此发出确认,在确认报文段中把ACK置1 ,序号为8012,而后进入到TIME-WAIT(时间等待)状态。这时候TCP链接尚未释放掉。必须通过时间等待计时器设置的时间2MSL后,client才进入到CLOSE状态。时间MSL叫作最长报文段寿命,建议设置为2分钟。

    ⑤、server接收到了client发出的确认,就进入CLOSED状态。

**************为何client在TIME-WAIT状态必须等待2MSL时间呢?**********

    第一,为了保证client发送的最后一个ACK报文段可以到达server。

    第二,防止“已失效的链接请求报文段”出如今本链接中。

3、TCP有限状态基

    wKiom1c6_PmAM8ZBAADDieGcPps416.png

每一个方框中的大写英文字符串是TCP标准所使用的TCP链接状态名。状态之间的箭头表示可能发生的状态变迁。箭头旁边的字,代表引发这种变迁的缘由,或代表发生状态变迁后又出现什么动做。图中三种不一样的箭头表示的意义不一样,粗实箭头表示对客户进程的正常变迁,粗虚箭头表示对服务器进程的正常变迁。另一种细线箭头表示异常变迁。

    ①、CLOSED 状态时初始状态。

    ②、LISTEN:被动打开,服务器端的 状态变为LISTEN(监听)

    ③、SYN-RECVD:服务器端收到SYN后,状态为SYN;发送SYN ACK;

    ④、SYN_SENTY:应用程序发送SYN后,状态为SYN_SENT;

    ⑤、ESTABLISHED:当链接已经创建,客户端进入ESTABLISHED状态,服务器端收到客户端的确认后,服务器端也进入ESTABLISHED状态。

     ⑥、FIN_WAIT_1:应用程序端发送FIN,准备断开TCP链接

    ⑦、CLOSE_WAIT:服务器端在收到FIN后,发送ACK,状态为CLOSE_WAIT

    ⑧、FIN_WAIT_2:当客户端收到来自服务器端的确认后,就进入FIN_WAIT_2.

    ⑨、LAST_ACK:当服务器端没有要向客户端发送的数据,其应用进程就通知TCP释放链接。服务器端重复上次已发送过得确认号。这时服务器端就进入LAST_ACK状态。

    十、TIME_WAIT:客户端收到服务器端的链接释放报文段后,对此发出确认,而后客户端就进入了TIME_WAIT状态。

相关文章
相关标签/搜索