三次握手和四次挥手

今天来聊一下事实标准协议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

(1)
M.SunM.Sun
上一篇 2017-09-01 20:28
下一篇 2017-09-02 11:41

相关推荐

  • N25 – week 3 blog

    本周的blog开始使用了代码语言格式,我原本以为自然的才是最好的,orginal的才是最美的,但是我错了。。。我发现同学们都在各种markdown,各种排版。我说过我早已过了care这些的年纪,但是我不能脱离群体单独存在,所以我底下了傲娇的头。 本周开始blog标题改为英文,逼格满满,麦满分~ 下面开始第$wk_num周的作业 [root@dhcp-10-1…

    Linux干货 2016-12-19
  • Linux文件管理命令

    2018-03-11

    2018-03-11
  • MAN 手册各章节功能及快捷键键位介绍

      man命令在linux下属于一种帮助命令,man手册提供了比较齐全的帮助格式,它大致分为8个章节 一.各个章节如下 1 – commands 1-普通的命令 (用户命令,  可由任何人启动的) 2 – system calls 2-系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函…

    Linux干货 2016-10-17
  • Linux运维实战之6:挂载/卸载磁盘分区

    上次博文我们具体讨论了Linux系统中磁盘的分区及格式化( http://www.178linux.com/60811),本次博文我们具体来说说分区的挂载哈! 【问题引入】 已经格式化好的分区如何与系统现有的文件系统建立关联(如何使用新分区)? 新的磁盘分区创建完成并格式化之后需要挂载(或装入)到目录树上才能被使用。 何谓挂载/卸载? 【答】将某个…

    Linux干货 2016-12-04
  • 如何自建系统内部 yum 仓库

       准备:     a.素材:一套centos6.9和一套centos7.3的ISO镜像光盘     环境:1.centos6.9和centos7.3,安装好的系统各一套(土豪随意 )     b.建立前请关闭防火墙,防止防火墙的干扰     &n…

    2017-08-05
  • keepalived的实验:主主模型

    修改配置文件 [root@proxy1 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived   global_defs { notification_email { root@localhost } notification_email_from k…

    2018-03-11