tcp的状态转换

http://blog.sina.com.cn/s/blog_8e5d24890102w9yi.html

 

tcp连接的步骤

  1. 三次握手建立连接

(1)     客户端给服务器发送一个报文,发起一个访问的请求,“我想访问你”

(2)     服务器接收到请求,给客户端一个响应的报文,“我准备好了,你好了吗”

(3)     客户端收到响应,发送一个确认的报文,“我也准备好了,咱们开始吧”

然后就开始数据传输。

 

  1. 四次握手断开连接

Tcp连接是全双工的,即同一时间,连接双方都可以发送/接收数据。这就意味着需要两条数据传输通道,一条用来发送数据,一条用来接收数据,两条通道相对独立。

现在假设 甲,乙 之间建立了tcp连接:
(1)甲把自己的数据都传送完了,给乙发一个报文信息,“我弄好了,我先断了啊”

(2)乙收到了甲发过来的报文,赶紧回复一个报文,“我知道了,你断吧”

(3)乙也结束了数据传输,给甲发报文,“我也弄好了,回见”

(4)甲收到报文,给乙一个回复,“恩,我知道了,回见”

连接结束。

下图就是三次握手建立连接,四次握手断开连接的示意图。

 

 

下图是tcp连接状态转换图:

 

 

 

 

 

(1)     CLOSED

连接没有建立的初始状态。

(2)     LISTEN

监听端口,接收访问,常见于服务器。

(3) SYN_RCVD:服务器已经准备好连接了,只要收到客户端的ACK报文后,它会进入到ESTABLISHED状态,即建立好连接了。

(4)SYN_SENT:主动发起连接的一方,在发出连接请求后进入此状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

(5)ESTABLISHED:连接已经建立了,可以数据传输了。

 

 

下面是断开连接的部分:

(6)FIN_WAIT_1: 连接的一方主动断开连接之后进入此状态。

                          另一方一旦收到FIN报文,就会马上做出相应,所以此状态的时间较短。

(7)FIN_WAIT_2:FIN_WAIT_1状态下收到另一端的回复后进入此状态,此状态下tcp连接                       半双工,即只有一端还在发送数据。

(8)TIME_WAIT: 双方都发完数据了,等待2MSL时间后就会回到初始状态。

注:MSL(最大分段生存期)指明TCP报文在Internet上最长生存时间,每个具体的TCP实现都必须选择一个确定的MSL值.RFC 1122建议是2分钟,但BSD传统实现采用了30秒.TIME_WAIT 状态最大保持时间是2 * MSL,也就是1-4分钟.

(9)CLOSING: 连接双方同时断开连接的话,就会进入此状态。

(10)CLOSE_WAIT: 被动关闭连接的一方进入此状态,在此状态完成最后需要传送的数据,

                              就可以发送FIN报文,断开连接了。

(11)LAST_ACK: 被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。

posted @ 2016-11-01 13:40  小帅666  阅读(208)  评论(0)    收藏  举报