三次握手和四次挥手

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

相关推荐

  • Hadoop HDFS分布式文件系统设计要点与架构

    Hadoop简介:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件…

    Linux干货 2015-04-13
  • DNS和BIND配置(第一部分)

    一、知识整理 1、最初只有七个一级域名:Top Level Domain:tld:com、edu、mil、gov、net、org、int;     一级域名分三类:组织域、国家域、反向域。最多127级域名;全球有13个根节点服务器。 2、一次完整的查询请求经过的流程:client—hosts文件&#8212…

    Linux干货 2016-10-17
  • yum与rpm生产中最频繁使用

    yum 命令 使用方法: yum [选项] [包名称] 常用选项: install #安装软件,后面跟包名称,例如:yum install wget 安装wget软件包list #列出所有软件,一般和grep一起使用,例如:yum list | grep java ,查看所有java安装包,一般情况下不使用search,grep可以更大范围搜索包,例如只记得…

    Linux干货 2017-04-18
  • HA cluster应用—CoroSync+Pacemaker

    HA cluster应用——CoroSync v2 (quorum system)+Pacemaker (standalone daemon)+ crmsh/pcsh corosync简述: Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程。可以说Corosync是OpenAIS工程的一部分。OpenAIS从openais…

    2016-11-27
  • 利用ansible-playbook从测试环境获取tomcat中java项目新版本发布到生产环境

    一、环境描述 安装有ansible的服务器:192.168.13.45 测试环境服务器:192.168.13.49 /home/app/api-tomcat/webapps/api.war为测试环境新版本war包位置 生产环境服务器:192.168.13.51 /home/app/api-tomcat/webapps/api.war为生产环境war包位置 /…

    Linux干货 2016-12-18
  • proxy_pass转发路径

    一、引言 在nginx中配置proxy_pass时,proxy_pass后面的路径最后面加“/”和不加“/”会有所区别。加“/”时,nginx不会代理location部分,不加“/”时,nginx会同时代理location部分。下面通过实验来证明。 二、实验 实验环境简要说明:     node1为httpd服务器(1…

    Linux干货 2017-01-12