TCP的CLOSE_WAIT和TIME_WAIT状态

TCP初始化连接三次握手:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立。

注意:当请求者收到SYS/ACK包后,就开始建立连接了,

而被请求者第三次握手结束后才建立连接。

关闭连接要四次握手:发FIN包,ACK 包,FIN包,ACK包,四次握手!!(因为TCP连接是全双工

客户端TCP状态迁移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服务器TCP状态迁移:
CLOSED->LISTEN->SYN_RECEIVED->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

关闭TCP连接一定需要4次挥手吗?

 不一定,4次挥手关闭TCP连接是最安全的做法。但在有些时候,我们不喜欢TIME_WAIT状态(如当MSL数值设置过大导致服务器端有太多TIME_WAIT状态的TCP连接,减少这些条目数可以更快地关闭连接,为新连接释放更多资源),这时我们可以通过设置SOCKET变量的SO_LINGER标志来避免SOCKET在close()之后进入TIME_WAIT状态,这时将通过发送RST强制终止TCP连接(取代正常的TCP四次握手的终止方式)。但这并不是一个很好的主意,TIME_WAIT 对于我们来说往往是有利的

以上出自:http://hi.baidu.com/suxinpingtao51/item/be5f71b3a907dbef4ec7fd0e

TCP建立链接

      TCP的CLOSE_WAIT和TIME_WAIT状态_第1张图片

close:关闭状态

listen:收听状态

syn-sent:同步已发送状态

syn-srcvd:同步接收状态

established:已建立连接状态

TCP释放链接

    TCP的CLOSE_WAIT和TIME_WAIT状态_第2张图片
   

close-wait:关闭等待状态

fin-wait1:终止等待1状态

fin-wait2:终止等待2状态

last-ack:最后确认状态

time-wait:时间等待状态

TCP释放链接:

CLOSE_WAIT:服务器端发送ACK包后进入的状态

TIME-WAIT:客户端发送ACK包后等待2MSL的时间

客户端发送ACK包后等待2MSL时间的原因?

         TCP的CLOSE_WAIT和TIME_WAIT状态_第3张图片

你可能感兴趣的:(TCP的CLOSE_WAIT和TIME_WAIT状态)