之前写过TCP连接三报文握手,很详细,大家可以有兴趣可以看下这个博客

现在开始写四报文挥手了哦,同样,主要参考湖科大的视频来讲,下面先上图

两个小tips

  1. TCP规定:SYN=1的报文段不 能 携 带 数 据。普通的TCP报文段可以携带数据,但如果不携带数据,则不消耗序号。
  2. TCP规定:终止位FIN=1的报文段即使不携带数据,也要消耗一个序号。

首先讲下四报文挥手主要做了什么

建立一个连接需要三次握手,而终止一个连接要经过四次挥手(也有将四次挥手叫做四次握手的)。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。四次挥手主要是确保客户端和服务器都已发送完所发数据并协商断开连接的过程,如果有一方还未发送完数据,那么就处于半关闭状态,不予完全关闭。

下面开始四报文挥手的详细过程

  • 刚开始双方都处于 ESTABLISHED 状态,假如是客户端先发起关闭请求。四次挥手的过程如下:
  • 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。 即发出连接释放报文段(FIN=1,序号seq=u,ack=v),并停止再发送数据,主动关闭TCP连接进入FIN_WAIT1(终止等待1)状态,等待服务端的确认
  • 第二次挥手服务端收到 FIN 之后,会发送 ACK 报文且把客户端的序列号值 +1 作为 ACK 报文的序列号值表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。 即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段
  • 第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。 即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。
  • 第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的确认号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。 即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。
  • 收到一个FIN只意味着在这一方向上没有数据流动。客户端执行主动关闭并进入TIME_WAIT是正常的,服务端通常执行被动关闭,不会进入TIME_WAIT状态。

在socket编程中,任何一方执行close()操作即可产生挥手操作。

详解TCP的四报文挥手相关推荐

  1. 详解TCP连接释放四次挥手过程

    TCP连接释放的过程叫做挥手,挥手需要在客户和服务器之间交换四个TCP报文段. 下图是四报文挥手释放TCP连接的过程: 数据传输结束后,通信的双方都可释放连接.现在A和B都处于ESTABLISHED状 ...

  2. 详解TCP协议(四)——传输中的流量控制

    文章目录 一.流量控制是什么 二.理解TCP流量控制基础 2.1发送缓存与接收缓存 2.2TCP报文结构中接收窗口字段 2.3滑动窗口协议基础 三.综合应用层.套接字及滑动窗口协议的具体步骤 四.总结 ...

  3. 三次握手和四次挥手图解_详解 TCP 连接的“三次握手”与“四次挥手”

    作者 | AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念 ...

  4. 详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”

    作者 |  AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概 ...

  5. 详解 TCP 连接的“三次握手”与“四次挥手”

    详解 TCP 连接的"三次握手"与"四次挥手" 前言 TCP的三次握手(Three-Way Handshake) 1."三次握手"的详解 2 ...

  6. Linux网络编程---详解TCP

    Linux网络编程---详解TCP的三次握手和四次挥手_shanghx_123的博客-CSDN博客_tcp的协议数据单元被称为 TCP协议详解(TCP报文.三次握手.四次挥手.TIME_WAIT状态. ...

  7. 详解 TCP/IP 协议

    什么是TCP/IP协议 TCP/IP通信协议是目前最完整.最被广泛支持的通信协议,它可以让不同网络架构.不同操作系统的计算机之间通信,是Internet的标准通信协议. TCP的介绍 TCP也叫传输控 ...

  8. 详解 TCP 和 UDP的概念、特点和区别

    文章目录 前言 TCP TCP 连接和断开 TCP 协议的特点 UDP UDP 协议的特点 UDP 协议的适用场合 TCP和UDP的比较 TCP和UDP的使用场景 参考 前言 TCP 和 UDP都是传 ...

  9. 一篇文章带你详解 TCP/IP 协议(下)

    前面的第一二三章已在上篇讲解,还没看过的可以先看看:一篇文章带你详解 TCP/IP 协议(上) 本文继续讲解第四章. 四.网络层中的 IP 协议 IP(IPv4.IPv6)相当于 OSI 参考模型中的 ...

  10. 【计算机网络】传输层 : TCP 连接管理 ( TCP 连接建立 | 三次握手 | TCP 连接释放 | 四次挥手 )

    文章目录 一.TCP 连接管理 二.TCP 连接建立 三.TCP 连接建立 相关报文段 字段 四.SYN 洪泛攻击 五.TCP 连接释放 一.TCP 连接管理 TCP 传输数据过程 : 建立连接 -& ...

最新文章

  1. 03JavaScript中的数据类型
  2. 制作血条_unity-UGUI如何制作血条
  3. Linux(CentOs6.4)安装Git
  4. Linux的进程调度算法简介
  5. VM未能关闭虚拟机电源
  6. CSS把图片设置为背景
  7. Allegro添加中文字体的简单有效方法
  8. 刚才发现微软拼音-简洁2010是目前比较适合程序员的输入法
  9. var,let,cont声明变量的区别
  10. Android使用WebView加载Url时提示“请在微信客户端打开链接”
  11. jsp中去掉超链接下划线吗,在JSP中,若要在JSP正确使用标签: ,在jsp中声称的taglib指令为: 下划线处应该是() 答案:x...
  12. m3u8 视频的解密,合并处理 通过java代码
  13. 如何进行强制类型转换?
  14. FF新闻、头条新闻等开机弹出的广告删除办法
  15. Win10下徽标Win键组合快捷键大全
  16. win10 python3.8.10下ipython无响应处理
  17. 插值与多项式逼近的数值计算方法——《数值计算方法》
  18. 蚂蚁金服面试总结(一面没过)
  19. cocos2d html5 mysql_cocos2d-html5基础知识
  20. php教室预约系统怎么做,预约系统怎么做?

热门文章

  1. python 字符串前面加‘r’的作用(并举例说明)
  2. python编程作业
  3. 成功解决win7安装python过程,Setup failed,需要安装Windows 7 Service Pack 1
  4. 一周内,在闲鱼上被疯狂转了2万次的Redis资料!!!
  5. 浩辰CAD建筑软件教程之门窗套
  6. 计算机无法开移动热点,Windows10系统下无法开启移动热点的解决方法
  7. K8S部署DevOps
  8. 未能加载文件或程序集“XXXX”或它的某一个依赖项。试图加载格式不正确的程序。(已解决)
  9. xp iis访问元数据库失败
  10. 从0开始的技术美术之路(美术篇)(二)角色设计基础