三次挥手

为什么建立连接需要三次握手?

三次握手的目的:为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误,保证在信道上传输可靠的数据

  • 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(建立)状态,完成三次握手。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

假设有这样一次场景:客户端(A)   服务端(B)

客户端A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达服务端B,但是服务端B收到此失效的报文之后,会误认为是客户端A再次发出的一个新的连接请求,于是B就向A又发出确认报文,表示同意建立连接。

如果此时没有三次握手,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待。这样B端就会白白浪费掉很多资源

如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

从以上流程可以看到,3次握手,是可以让通信双方确认连接有效,以进行正常全双工通信认知的最少“握手”次数。所以TCP选择了3次握手~

四次挥手

为什么断开连接需要四次挥手?

四次挥手的目的:因为TCP是一个全双工协议,必须单独拆除每一条信道。4次挥手的目的是终止数据传输,保证数据传输完成,并回收资源。

第一步,客户端主动发起一个请求给服务端,里面包含FIN标识位=1,客户端的seq序列号u,表示的是当前客户端在该连接上的当前序列号。

第二步,服务端在收到这个含有FIN的请求消息之后,校验无误之后会立马回复ACK消息给客户端,消息内部包含ACK标志位为1,同时seq号码是FIN的请求消息的seq号+1。此时的服务端同时会主动发个结束标识给服务端上面的应用层程序,应用层程序可以决定是立马结束,还是等到该连接中的数据处理完了之后,在发送FIN消息给客户端来关掉另外的一半连接。

第三步,服务端在处理完该连接上面的Pending住的数据之后,应用程序会close这个连接。服务端会主动发起FIN的消息给客户端。消息内部带有,FIN=1的结束符标识位,以及服务端的seq序列号。

第四步,客户端在收到对应的FIN消息之后,会主动通知应用层程序,告知这个连接现在需要关闭了。然后,客户端会回复ACK消息给服务端,以便断开另外一个方向的通道,这个消息包含ACK=1的标识位和FIN的请求带过来的seq+1。

假设有这样一次场景:客户端(A)   服务端(B)

客户端和服务端通过3次握手建立连接,此时客户端数据全部发送完成,需要断开连接,客户端就会向服务端发送断开请求。

服务器收到对方的客户端发送关闭报文时,仅仅表示客户端不再发送数据了但是还能接收数据,而服务器也未必全部数据都发送给客服端了,所以服务器可以立即关闭,也可以继续发送数据给客户端,如果有数据未发送完毕,就需要通知客户端,我还有数据未发送完,不要断开连接。等全部数据传输完成服务端在发送断开请求。客服端收到服务端断开报文后,重新发送一个断开确认报文,服务端收到断开报文后便断开连接。

这样便保证了数据传输完成,资源回收~

错误之处,望指正~

三次握手和四次挥手图解_图解TCP三次握手和四次挥手相关推荐

  1. 三次握手和四次挥手图解_图解 TCP 三次握手和四次挥手

    人到中年,难免长胖发福. 大家好,我是你们有点严肃的胖福(hu), 这里我们聊学习和工作. - 内容提要 - TCP 有 6 种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) ...

  2. 三次握手的本质_关于TCP三次握手,这是我见过最好的解读了,通俗易懂

    文|洪生鹏 关于TCP协议三次握手的问题,在面试中是最为常见的知识点之一,得到了很多面试官的青睐,如果这个知识点没有掌握好,面试官要是问得深入一点,求职者往往会不知所措. 为什么建立连接需要三次握手? ...

  3. c++ tcp 封装_关于TCP三次握手和四次挥手问题,求你别再问了问了...

    少点代码,多点头发 三次握手建立链接,四次挥手断开链接.这个问题算非常经典的问题,也是面试官非常喜欢问的问题. 不夸张的说,龙叔在校招面试的时候每一家公司都问到过关于三次握手和四次挥手相关的问题,相信 ...

  4. 【大白话系列】图解TCP三次握手【使用wireshark工具抓包分析TCP三次交互流程】

    文章目录 1.首先准备好抓包工具wireshark 2.准备一段简单的socket程序 3.打开wireshark工具进行抓包 4.举例了解一下TCP报文段中的ACK和Seq的含义 5.流程分析 6. ...

  5. 华容道6×6图解_解放重卡促销盘点,四款6×4牵引车最低只要27.2万元

    [卡车之家 原创]随着新冠疫情的持续平稳,商用车市场的行情也保持在一个客观的形势之下,再加上临近过年,各地经销商纷纷对自家的产品进行降价促销. 这次卡车之家重点是对解放车型盘点,四款解放6×4牵引车, ...

  6. 四种形态图解_波浪理论:调整浪的四种形态(图解)

    调整浪共有四种形态:简单调整浪﹑ABC调整浪﹑三角形调整浪和12345调整浪.如图[调整浪形态示意图]所示. 调整浪较为复杂,是很多投资者容易出错的地方.经过对历史数据的分析和统计,我们为投资者归纳出 ...

  7. 四种形态图解_图解缺口理论,附实例

    一.先说说缺口的定义: 1.当第二天的开盘价高于第一天的最高价时出现的向上的跳空缺口. 2.当第二天的开盘价低于第一天最低价时出现的向下的跳空缺口. 因此,缺口的方向有两种,向上跳空缺口或者向下跳空缺 ...

  8. php框架大全图解_图解ThinkPHP5框架(四):一张图彻底吃透框架配置(终结版)

    本课共分10个模块,从配置文件格式(php/ini/json/xml)到场景配置,模块配置,扩展配置,独立配置,动态配置,自定义配置加载,环境变量变量,全景展现一个多彩的ThinkPHP5配置世界~~ ...

  9. java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...

    大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 转载文章请保留以下声明: 一:存储模式 留言或私信我,邀请你加入"图数据库交流"微信群! 1. ...

最新文章

  1. 【 Linux 】创建一个文件夹并在此文件下创建一个c源文件
  2. VTK:图片之ImageDilateErode3D
  3. cocos2d-x 3.0rc2中读取sqlite文件
  4. JavaScript继承详解(二)
  5. pt-archiver数据归档
  6. mysql 存储过程使用参数_mysql 存储过程 使用参数
  7. 可转债数据一览表集思录_可转债投资每周记录20200816
  8. 【嵌入式工具】Keil下载,安装,配置教程大全
  9. 自动移动鼠标避免锁屏
  10. 计算机网络的产生与发展可分为哪四个阶段,计算机网络形成与发展大致分为如下4个阶段...
  11. mysql中orderby用法_MySQL教程:OrderBy用法_MySQL
  12. 【JSOI2018】绝地反击
  13. html5学生dw网页设计大作业,hbuilder华谊网页设计成品模板,静态网页设计定制
  14. HJ3 明明的随机数
  15. JAVA泛型通配符T,E,K,V区别,T以及ClassT,ClassT的区别
  16. 前端攻城狮的自我修养1
  17. 矩阵指数 matlab,空间计量-矩阵指数空间模型
  18. tf 设置多显卡_让显卡再次危机,《孤岛危机》重置版能否找回当年的感动
  19. 干了两个星期,赚了3万!同城wifi贴项目揭秘!
  20. MODBUS协议下,能否实现MCGS触摸屏与FX5U之间无线通讯?

热门文章

  1. MySQL Server 5.0安装教程
  2. 手机芯片三国杀:高通、联发科、展讯都想成霸主
  3. Redis 错误1067:进程意外终止,Redis不能启动,Redis启动不了
  4. 关于mysql的wait_timeout参数 设置不生效的问题
  5. struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性
  6. 查找删除Code First Entity Framework基本与最佳添加(add/create),删除(delete/remove),修改(update/modify)操作...
  7. not in SQL语句转化为 not exists
  8. Backbone源码分析-Backbone架构+流程图
  9. SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」(亲测)
  10. 平滑重启更新(GR机制)