三次握手和四次挥手

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

相关推荐

  • 马哥教育网络20期—nginx

    Nginx 一. Nginx 特性 二. Nginx 基本架构 三. Nginx 基本功能 四. Nginx 安装 五. Nginx 配置文件 六. Nginx http服务功能测试 七. Nginx LNMP 一. Nginx 特性 模块化,目前只能将模块编译进Nginx,暂时不支持动态装卸载模块.(httpd优势) 可靠性,一个主进程(master)控制…

    Linux干货 2016-06-26
  • N21-天天-第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 主要功能: 网桥将两个相似的网络连接起来,并对网络数据的流通进行管理。它工作于数据链路层,不但能扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全性。 集线器的英文称为“Hub”。主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心…

    Linux干货 2016-08-29
  • rhel6.7安装pymssql(通过Python连接MSsql数据库)

    依赖安装: freetds、python-devel、cython、Python3.x 1、安装freetds tar -jxvf freetds-dev.0.99.134.tar.bz cd freetds-dev.0.99.134 ./configure –prefix=/usr/local/freetds&nb…

    Linux干货 2016-05-23
  • LA LN MP

    L A/N MP 安装 添加epel源 yum install epel* 安装所需环境 yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zl…

    Linux干货 2016-05-28
  • 你的数据根本不够大,别老扯什么Hadoop了

    本文原名“Don’t use Hadoop when your data isn’t that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过高频交易平台,当过创业公司的CTO,更习惯称自己为统计学者。对了,他现在自己创业,提供数据分析、推荐优化咨询服务,他的邮件是:stucchio@gmail.co…

    Linux干货 2015-04-04
  • vim 的使用简介

    linux day 8 使用vi和vim的三种主要模式 移动光标,进入插入模式 改变、删除、复制文本 撤销改变 搜索文档 vim寄存器 可视化和多窗口 vim帮助 vi: Visual Interface,文本编辑器 文本:ASCII, Unicode 文本编辑种类: 行编辑器: sed 全屏编辑器:nano, vi vim-Vi Improved 其他编辑…

    Linux干货 2016-08-15