简述TCP四次挥手

article/2025/9/23 0:44:07

四次挥手主要用到了两个标志位(ACK&FIN):

  • ACK 示意参考:TCP三次握手
  • FIN: 终止数据传输标志位---->当FIN为1的时候代表此数据为终止断开连接的请求

四次挥手流程:

在这里插入图片描述

由于TCP连接是双向传输的对等的模式即双工 wiki百科定义:

全双工(full-duplex)的系统允许二台设备间同时进行双向资料传输。全双工的系统可以用复线铁路类比。两个方向的车辆因使用不同的轨道,因此不会互相影响。
一般的电话、手机就是全双工的系统,因为在讲话时同时也可以听到对方的声音

意思是说双方都可以同时向对方发送或接收数据。当客户端要关闭连接时,会发送请求告知服务器我要关闭连接了。这时服务器会回一个确认数据,这时客户端到服务器的连接关闭。但是服务器到客户端的连接并没断开仍然可继续传输数据,等到服务器发送完了所有的数据后,会发送一个FIN段来关闭此方向上的连接。客户端发送ACK确认关闭连接 此时双方的连接都关闭了即挥手成功

第一次挥手:

客户端向服务器请求断开连接

  • seq:我(client)这条数据的序列号是300
  • FIN:我(client)已经没有数据给你发送了 我要断开连接

当服务器收到客户端终止连接请求的时候需要做出响应即第二次挥手

第二次挥手:

服务器表示已经收到了客户端断开连接的请求

  • ack: 我(server)已经收到你(client)序列号为300的数据了
  • ACK:服务器表示你(client)断开连接的请求我(server)这边已经正确收到了

至此客户端到服务器的连接关闭,但服务器还存在部分数据没有发送给客户端的情况 当服务器发送完成数据会向客户端发送断开连接的请求即第三次挥手

第三次挥手:

服务器收到客户端断开连接且已经没有数据需要发送给客户端的时候向客户端请求断开连接

  • seq:我(server)这条数据的序列号400
  • FIN:我(server)已经没有数据给你发送了 我要断开连接

当客户端收到服务器终止连接请求的时候需要做出响应即第四次挥手

第四次挥手:

服务器表示已经收到了客户端断开连接的请求

  • ack: 我(client)已经收到你(server)序列号为400的数据了
  • ACK:客户端表示你(server)断开连接的请求我(client)这边已经正确收到了

至此服务器到客户端的连接关闭 客户端到服务器的连接也关闭了 四次挥手保证了双端正确的断开连接


http://chatgpt.dhexx.cn/article/nNIThNGi.shtml

相关文章

简述四次挥手

什么是四次挥手 由于TCP连接是全双工的,断开一个TCP连接,需要客户端与服务器发送四个包来确认连接的断开 简述四次挥手的过程: 因为TCP是全双工的,因此,每个方向都要单独关闭 当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着 一方向不会再…

三次握手四次挥手

三次握手四次挥手是tcp协议中的,在说三次握手四次挥手先说一下tcp协议和udp协议。 (1)我们常用的网络通信如浏览网页、软件聊天、看的爱奇艺上的视频都是通过tcp、udp这两种协议来进行数据传输的; (2)tcp…

TCP三次握手与四次挥手(详解)

TCP三次握手 一:引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西;由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是经过由TCP创建的一个从客户端…

TCP连接的四次挥手全过程

TCP通过四次挥手来释放连接 四次挥手的过程如下: 第一次挥手: 客户端向服务器发送一个 FIN 数据包(FIN 1,seq u)主动断开连接,报文中会指定一个序列号。告诉服务器:我要跟你断开连接了&am…

http三次握手四次挥手详解

1、 TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 四次挥…

TCP四次挥手及原因

聚散终有时,TCP 断开连接是通过四次挥手方式。 双方都可以主动断开连接,断开连接后主机中的「资源」将被释放。 上图是客户端主动关闭连接 : 一次挥手 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文&…

TCP三次握手和四次挥手详解

文章目录 三次握手和四次挥手简述三次握手的目的三次握手流程详解半连接队列和全连接队列四次挥手的目的四次挥手详解为什么客户端需要TIME_WAIT状态为什么挥手比握手多一次为什么三次挥手不行TCP报文参数释义 三次握手和四次挥手简述 三次握手,即客户端与服务端进…

三次握手,四次挥手,为什么是三次握手四次挥手

三次握手 两次握手(情况1) 两次握手(情况2) OK,下面正经地来回答下这个问题,要搞清楚这个问题,首先得了解TCP究竟是如何保证可靠传输的。 PS:TCP协议中,主动发起请求的一…

TCP三次握手四次断开

转载地址:www.51niux.com IP协议是网络层的主要协议,为上层传输层提供无连接、无状态、不可靠的服务。优点是简单高效。无状态是指各个IP报文是独立传送的,不同步传输状态的信息,所以容易发生重复和乱序的情况。不可靠是指IP协议…

有关三次握手,四次挥手的超详细总结!!!

有关三次握手,四次挥手的超详细总结!!! 我们先来看一下三次握手和四次挥手的示意图: 图示为三次握手。 图示为四次挥手。 一、三次握手和四次挥手的过程: 三次握手: TCP建立连接的过程我们…

TCP四次挥手详解

在开始之前可以先了解一下 TCP三次握手 TCP四次挥手过程和状态变迁 为什么挥手需要四次? 为什么TIME_WAIT等待的时间是2MSL? 等待2MSL的意义 TIME_WAIT状态过多有什么危害? 如何解决TIME_WAIT状态过多? TCP四次挥手过程和…

C++ map遍历

C map遍历 #include <iostream> #include <map>using namespace std;int main() {map<int, int> _map;_map[0] 1;_map[1] 2;_map[10] 10;map<int, int>::iterator iter;iter _map.begin();while(iter ! _map.end()) {cout << iter->firs…

C++ map遍历(简单易记忆)

C中map遍历有两种方法&#xff1a; 第一种&#xff0c;使用迭代器&#xff0c;while循环 #include <iostream> #include <map> using namespace std; int main() {map<int,int> p;p[0] 1;p[1] 2;p[3] 4;map<int,int>::iterator it p.begin();whi…

Java中Map的4种遍历方式

原标题&#xff1a;Java中Map的4种遍历方式 第一种方式&#xff1a;这是平常用的最多也最可取的一种遍历方式。 for (Map.Entry entry : map.entrySet()) { System.out.println(“key” entry.getKey() “,value” entry.getValue()); 第二种方式&#xff1a;如果只需要…

HashMap的几种遍历方式及循环删除

目录 1. 前言2. HashMap 的遍历方式2.1. 迭代器 EntrySet2.2. 迭代器 KeySet2.3. ForEach EntrySet2.4. ForEach KeySet2.5. Lambda 表达式2.6. Streams API 3. 循环删除3.1. 迭代器 Iterator 方式3.2. ForEach 循环方式3.3. Lambda 表达式3.3.1. Lambda 删除的正确方式 3.4. S…

Map遍历四种方式及其效率

目录 1、Map介绍 2、Map数据结构及扩容 2.1、数组&#xff1a;寻址容易&#xff0c;插入和删除元素困难 2.2、链表&#xff1a;寻址困难&#xff0c;插入和删除元素容易 2.3、Map数组长度默认16&#xff0c;扩容负载因子为0.75 3、Map遍历4种方式及其效率 3.1、方式一&a…

前端map循环遍历使用

map定义 Array.map() ⽅法返回⼀个新数组&#xff0c;数组中的元素为原始数组元素调⽤函数处理后的值&#xff0c;同时不会改变原来的数组 var newArra[1,3,6,10,44]; var newArraysnewArra.map((index) > { return index*index }) console.log(newArra); //[1,3,6,10,44]…

map forEach for in 循环遍历

1.map遍历数组对象 var map [{ key : "百度", value : "李彦宏" },{key : "阿里巴巴", value : "马云" },]; for (var key in map) { console.log(map[key]); } 2.forEach遍历数组 forEach()方法需要一个函数作为参数&…

Map的循环遍历,修改,删除

预制数据 Map<String, String> map new HashMap<>();map.put("aaa","123");map.put("bbb","123");map.put("CCC","123"); 只循环key ---> map.keyset() for (String key : map.keySet()) {Syst…

Java遍历Map五种方法

一、Map集合遍历日常开发最常使用&#xff0c;简单总结五种方法差异。 ①、IteratorentrySet写法【推荐JDK8以下】&#xff0c;Map.Entry是Map接口的内部接口&#xff0c;获取迭代器&#xff0c;然后依次取出每个迭代器里面的Map.Entry Iterator<Map.Entry<Integer,Strin…