TCP状态转换图的理解

怎样去读懂TCP的状态转换图?服务器

     

  

 

1.概述并发

       我第一次看这个转换图的时候,看的有点蒙,虽然知道表示的是TCP链接的状态转换图,可是不知道怎么去看这个图,怎么去理出个头绪,可能比较笨吧。spa

       阅读这个图,首先从总体上须要知道,这个图表示的是TCP从创建到断开过程当中,客户端和服务器各自的状态变迁,头脑里先有这个概念,而后为了表述方便,在途中的某些状态点标注了字符。设计

      

2.三次握手创建链接blog

       由起始点A开始TCP创建链接的三次握手。进程

       A->B->D->E  表示的是服务器在TCP链接创建过程当中的状态变迁it

       A->C->E        表示的是客户端在TCP链接创建过程当中的状态变迁io

 

       正常链接创建的总体流程:服务器端

       A->B,服务端的应用进程创建套接字,监听客户端的链接,此时服务器端由CLOSED转换为LISTEN状态,等待客户端链接im

       A->C,客户端的应用进程主动链接服务器,发送第一个SYN握手,此时客户端状态变迁为SYN_SENT

       B->D,服务器接收到客户端发送的SYN,而后回复客户端SYN,ACK应答,此时服务端的状态变迁为SYN_RCVD

       C->E,客户端接收到服务端的SYN,ACK,客户端状态变迁为ESTABLISHED,并发送ACK给服务器

       D->E,服务端接收到客户端的ACK应答,服务端状态变迁为ESTABLISHED,至此TCP链接的三次握手过程完成,服务器和客户端创建了链接,客户端主动链接,服务端被动链接

       链接创建过程当中的异常状况:

       D->B,服务器在接受到客户端的第一个SYN后,状态变迁为SYN_RCVD,并给客户端发送了SYN,ACK应答,正常状况来讲,客户端会接收到服务端的应答,并回复一个ACK应答给服务端,可是若是出现异常状况,好比客户端的应用进程主动关闭或者客户端接收服务器的SYN,ACK回包超时,客户端会给服务端回一个RST,此时客户端的状态会从SYN_SENT变迁为CLOSED,服务端在接收到RST后,会从SYN_RCVD变迁为LISTEN

 

3.四次握手断开链接

       TCP链接断开须要经历四次握手,假设客户端主动断开链接。

       E->F->G,       表示服务端在TCP链接断开过程当中的状态变迁

       E->J->L->H,   表示客户端在TCP链接断开过程当中的状态变迁

 

       正常链接断开:

       E->J,客户端应用进程主动关闭,发送FIN,客户端状态变迁为FIN_WAIT_1

       E->F->G,服务端收到FIN,状态变迁为CLOSED_WAIT,并给客户端发送一个ACK,且服务端的应用进程会接受这个FIN做为一个文件结束符,一段时间后,接受到这个文件结束符的应用进程将调用close关闭套接字,这将致使TCP会给客户端发送一个FIN,此时服务器状态变迁为LAST_ACK

       J->L->H,客户端收到ACK以后,状态变迁为FIN_WAIT_2,在这以后,收到服务端close发送的FIN,状态变迁为TIME_WAIT,并应答一个ACK给服务端

       服务端在收到这个ACK后,服务端就彻底关闭,状态变迁为CLOSED,而客户端在2MSL超时后,也会彻底关闭,状态变迁为CLOSED

       这个TIME_WAIT设计的仍是十分巧妙的,后续能够再补充TIME_WAIT和一些异常状况的说明

相关文章
相关标签/搜索