标签:结束 str 发送 复杂 二次 表示 建立连接 客户 服务器端
三次握手:(客户端和服务端建立连接的过程)
状态变更:
客户端,是主动打开,从起始点发送SYN报文段,进入SYN_SENT状态,然后接受SYN,ACK,走黑粗线的路径进入到数据传输状态,也就是ESTABLISHED
服务端,是从起始点走虚线的部分,被动打开后,接受客户端的SYN,进入SYN_RCVD,最后,接受客户端第三次握手的ACK,进入数据传输状态,也就是ESTABLISHED。
四次挥手:(客户端与服务器端断开连接的过程)
状态变更:
服务端:服务端的状态转移,因为收到了客户端的FIN,所以发送一个ACK给客户端,同时自己进入到CLOSE_WAIT状态,等待服务端应用程序结束,发送FIN给客户端,自己进入LAST_ACK状态,等待最后的ACK到来,接收到ACK,结束状态。
客户端:因为先发起关闭,状态比较复杂,他先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时他等待接收服务端的报文,该报文会有三种可能:
a.只有服务端的ACK
b.只有服务端的FIN
c.既有服务端的ACK,又有FIN
对于第一种,该ACK是服务端确认了客户端的FIN而发的,这时客户端会进入FIN_WAIT_2状态,这是当他收到服务端的FIN来时,发送了一个ACK,会进入到TIME_WAIT状态,他要在这个状态等待2MSL的时间,1个MSL是报文段在网络的最长时间,客户端等待2MSL,是为了当最后一个ACK丢失时,可以在发送一次,因为这时,服务端在等待超时后在发送一个FIN给客户端,所以客户端也知道了ACK丢失了。
对于第二种,只有服务端的FIN的时,会发送一个ACK给服务端,客户端进入CLOSING状态,然后接收到服务端的ACK时,也会进入TIME_WAIT状态。
对于第三种,同时都收到了,就省略了进入CLOSING状态,直接进入TIME_WAIT状态。
标签:结束 str 发送 复杂 二次 表示 建立连接 客户 服务器端
原文地址:http://www.cnblogs.com/LionheartCGJ/p/6646741.html