今天来聊一下事实标准协议TCP/IP中传输层里TCP协议中,主机与服务器建立连接时的三次握手,和断开连接时的四次挥手。
本博文分两部分介绍,
一:状态详解
二:三次握手和四次挥手状态介绍
这里总共涉及到十种状态,其实总共有十一种状态,接下来分别介绍一下它们;
一:状态详解
CLOSED:关闭—>即没有任何连接状态
LISTEN:监听状态—>服务器随时监听着,看有没有谁发来连接请求
SYN_SENT:同步发送—>客户端在第一次握手时向服务器发送请求建立连接后的状态
SYN_RECEIVED:同步接收—>服务器收到客户端的请求后,在第二次握手中回复客户端确认信息并向其发送建立连接请求后的状态(简写SYN_RCVD)
ESTABLISHED:已建立连接—>在客户端收到服务端的确认及请求信号后,进行第三次握手即立刻回复确认信息,并且双方都立即进入到已建立连接状态,准备数据传输
FIN_WAIT_1:关闭等待1—>第一次挥手中,客户端主动向服务器端发送断开连接请求后进入此状态
FIN_WAIT_2:关闭等待2—>第二次握手中,客户端收到来自服务器端发来的断开连接确认信息后,进入关闭等待2状态,等待服务器端发来断开连接请求
TIME_WAIT:时间等待—>第三次挥手中,客户端也收到服务器端发来的断开连接请求后,立即回复确认信息(第四次挥手),并进入此状态
CLOSE_WAIT:等待关闭—>第一次挥手中,服务器端收到客户端发来的断开连接请求后,回复其确认信息(第二次挥手),并进入此状态
LAST_ACK:最后确认—>第三次挥手中,服务器端将数据整理结束后,发送断开连接信号给客户端,并等待其确认信息
CLOSING:关闭中—>双方同时发送断开连接,等待对方确认(这种状态在三次握手和四次挥手里并没有表现)
二:三次握手和四次挥手状态介绍
我在这里将他们分为服务器端和客户端介绍 ,如下图所示(图是自己画的,有点丑*-*,但毕竟是自己总结的,可以加深印象),第一张图是客户端的状态装换图,第二张是服务器端的状态装换图。
图一
图二
红色圈住的是客户端的三次握手,黄色圈住的是四次挥手。
其实,我们可以想象一下,这就像谈恋爱一样(虽然我是单身,但大概过程还是了解的*-*),必须有一方是主动的,所以当你中意对方时,是不是要去试探一下对方是否也喜欢你呀,这时你就想用某种方式去表达,(就像是第一次握手中我们客户端主动给服务器端发信号,说我想与你建立连接,即(SYN=1),然后就进入一个SYN_SENT发送信号的状态),这时对方若对你也有意思的话是不是会给你个回应呀,(这时就像第二次握手中,服务器端收到客户端的请求信号后,若是想与他建立连接,就会给客户端一个确认信号(ACK=1即收到了它发来的请求信号)并且也给客户端一个请求连接信号(即我也想与你建立连接),然后进入SYN_RECEIVED(简写RCVD)接收状态),然后这时,你们两情相悦,是不是就可以建立正常男女朋友关系了?!!就可以明目张胆的来往了!!!(就像第三次握手中,客户端也收到了服务器发来的确认信号和建立连接请求,一看服务器端也挺乐意与它建立连接的,那就赶紧建立连接呗,就立即给服务器端一个确认信号(ACK=1),并且双方立即进入ESTABLISHED状态,开始数据传输了)。这样想想就简单了是不是,
当然关闭连接的过程也一样。我们就想象一下分手的时候(当然还是希望有情人终成眷属,可以白头偕老的,但是,总会有那么些不愉快的事情发生是不是),分手也分很多种,有一方主动提出分手另一方被动接收的、有还没说出分手就已经分开的(我的意思你懂的^-^)、还有双方都准备分手的…….太多种,但今天就讲一下,其中一方先主动分手的。我与你不愉快了,要分手了,那我就要主动给你一个分手信号“咱们不合适,分手吧”(就像第一次挥手,客户端主动向服务器端发送了断开连接信号(FIN=1分手信号),随后客户端就会进入FIN_WAIT_1关闭等待状态1,而服务器进入CLOSE_WAIT等待关闭状态),那你收到我的分手信息了,不管同不同意分手,是不是要给我一个回应啊(比如说挽留啊、那刚好我也同意分手啊之类的),你说你收到了我的分手信息,让我先屡屡(就像第二次挥手中,服务器端收到了客户端的分手信号,就给她一个回应(ACK=1),说我收到了,客户端就会进入FIN_WAIT_2关闭等待2状态),那要是你也考虑清楚了,反正想分手了,以后在一起也不开森,就开始将我们之间的帐算算(服务器回给客户端确认信号后,就开始整理数据,该发的发完,该收的收回来),省的以后因为某些东西拌嘴,分就分清楚,等你整理清楚了,那你也给我说了“好,那咱们就分手吧”(这时进入第三次挥手,服务器端也给客户端一个分手信号(FIN=1),确定也要与它断开连接,此时服务器端会进入LAST_ACK最后确认状态(即等待客户端回复)),我已经下定决心跟你分手并且已经主动提出来了,所以当听到你给我说分手后,我这边会立即给你回复“好”(第四次握手,客户端收到服务器端发来的分手信息后,立即给出一个确认信息(ACK=1),并且客户端会进入TIME_WAIT时间等待状态(时间较长),然后再进入CLOSED状态,服务器端收到客户端的确认后,立即进入CLOSED状态,随机进入LISTEN监听状态,随时等待其他主机访问),分手结束,好聚好散。
原创文章,作者:M.Sun,如若转载,请注明出处:http://www.178linux.com/85837