TCP三次握手和四次挥手以及11种状态

一、三次握手

置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN
ACK:表示验证字段
SYN:位数置1,表示创建TCP链接
FIN:位数置1,表示断开TCP链接服务器

三次握手过程说明:
一、由客户端发送创建TCP链接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,而且将报文中的SYN字段置为1,表示须要创建TCP链接。(SYN=1,seq=x,x为随机生成数值)
二、由服务端回复客户端发送的TCP链接请求报文,其中包含seq序列号,是由回复端随机生成的,而且将SYN置为1,并且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓本身的TCP创建请求已获得验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1能够理解为是确认和谁创建链接。
三、客户端收到服务端发送的TCP创建验证请求后,会使本身的序列号加1表示,而且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

二、四次挥手

四次挥手过程说明:
一、客户端发送断开TCP链接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,而且还将报文中的FIN字段置为1,表示须要断开TCP链接。(FIN=1,seq=x,x由客户端随机生成)
二、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,并且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓本身的TCP断开请求已经获得验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)
三、服务端在回复完客户端的TCP断开请求后,不会立刻进行TCP链接的断开,服务端会先确保断开前,全部传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,而且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)
四、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程完毕

三、11种状态

一、一开始,创建链接以前服务器和客户端的状态都为CLOSED;
二、服务器建立socket后开始监听,变为LISTEN状态;
三、客户端请求创建链接,向服务器发送SYN报文,客户端的状态变味SYN_SENT;
四、服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD;
五、而后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED;
六、服务器端收到客户端的ACK后变为ESTABLISHED。此时3次握手完成,链接创建!

因为TCP链接是全双工的,断开链接会比创建链接麻烦一点点。
一、客户端先向服务器发送FIN报文,请求断开链接,其状态变为FIN_WAIT1;
二、服务器收到FIN后向客户端发送ACK,服务器的状态围边CLOSE_WAIT;
三、客户端收到ACK后就进入FIN_WAIT2状态,此时链接已经断开了一半了。若是服务器还有数据要发送给客户端,就会继续发送;
四、直到发完数据,就会发送FIN报文,此时服务器进入LAST_ACK状态;
五、客户端收到服务器的FIN后,立刻发送ACK给服务器,此时客户端进入TIME_WAIT状态;
六、再过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。
至此,还有一个状态没有出来:CLOSING状态。
CLOSING状态表示:
客户端发送了FIN,可是没有收到服务器的ACK,却收到了服务器的FIN,这种状况发生在服务器发送的ACK丢包的时候,由于网络传输有时会有意外。
LISTEN:等待从任何远端TCP 和端口的链接请求。

SYN_SENT:发送完一个链接请求后等待一个匹配的链接请求。

SYN_RECEIVED:发送链接请求而且接收到匹配的链接请求之后等待链接请求确认。

ESTABLISHED:表示一个打开的链接,接收到的数据能够被投递给用户。链接的数据传输阶段的正常状态。

FIN_WAIT_1:等待远端TCP 的链接终止请求,或者等待以前发送的链接终止请求的确认。

FIN_WAIT_2:等待远端TCP 的链接终止请求。

CLOSE_WAIT:等待本地用户的链接终止请求。

CLOSING:等待远端TCP 的链接终止请求确认。

LAST_ACK:等待先前发送给远端TCP 的链接终止请求的确认(包括它字节的链接终止请求的确认)

TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的链接终止请求的确认。
TIME_WAIT 两个存在的理由:
          1.可靠的实现tcp全双工链接的终止;
          2.容许老的重复分节在网络中消逝。

CLOSED:不在链接状态(这是为方便描述假想的状态,实际不存在)

以上内容但愿帮助到你们网络