基础:TCP四次挥手做了什么,为什么要挥手?


1. TCP 四次挥手在做些什么


在这里插入图片描述

1. 第一次挥手

1)挥手作用:主机1发送指令告诉主机2,我没有数据发送给你了。

2)数据处理:主机1(可以是客户端,也可以是服务端),设置 Sequence NumberAcknowledgment Number,向主机2发送一个 FIN 报文段;随后,主机1 进入 FIN_WAIT_1 状态。



2. 第二次挥手

1)挥手作用:主机2收到主机1信息后,回复报文给主机1,告诉主机1我也没有数据发送给你了,可以进行关闭连接。

2)数据处理:主机2收到了主机1发送的 FIN 报文段,向主机1回一个 ACK 报文段,Acknowledgment NumberSequence Number 加1;主机1进入 FIN_WAIT_2 状态。



3. 第三次挥手

1)挥手作用:主机2向主机1发送关闭连接指令请求。

2)数据处理:主机2向主机1发送 FIN 报文段,请求关闭连接,同时主机2进入 CLOSE_WAIT 状态;。



4. 第四次挥手

1)挥手作用:主机1收到主机2的关闭请求后,回复确认关闭指令给主机2,关闭链接。

2)数据处理:主机1收到主机2发送的 FIN 报文段,向主机2发送 ACK 报文段,然后主机1进入 TIME_WAIT 状态;主机2收到主机1的 ACK 报文段以后,就关闭连接;此时,主机1等待 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭,那好,主机1也可以关闭连接了。


2. 为什么要四次挥手


1. TCP 协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。

2. TCP 是全双工 模式,这就意味着,当主机1发出 FIN 报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2, 它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据。

3. 当主机2返回 ACK 报文 段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1。

4. 当主机2也发送了 FIN 报文段时,这个时候就表示主机2也没有数据要发送,就会告诉主机1,我也没有数据要发送了。

5. 主机1收到主机2的 FIN 报文后,回复 ACK 确认之后彼此就会愉快的中断这次TCP连接。


3. 四次挥手状态参数说明

  • FIN_WAIT_1FIN_WAIT_1 针对主动发起关闭一方来讲;FIN_WAIT_1FIN_WAIT_2 状态的真正含义都是表示等待对方的 FIN 报文。而这两种状态的区别是:FIN_WAIT_1 状态实际上是当SOCKETESTABLISHED 状态时, 它想主动关闭连接,向对方发送了 FIN 报文,此时该 SOCKET 即进入到 FIN_WAIT_1 状态。而当对方回应 ACK 报 文后,则进入到 FIN_WAIT_2 状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应 ACK 报文,所以 FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态还有时常常可以用 netstat 看到。

  • FIN_WAIT_2FIN_WAIT_2 针对主动发起关闭一方来讲;FIN_WAIT_2 状态下的 SOCKET表示半连接,也即有一方要求 close 连接,但另外还告诉对方,我暂时还有点数据需要传送给你(ACK 信息),稍后再关闭连接。

  • CLOSE_WAITCLOSE_WAIT针对被动关闭一方来讲;表示在等待关闭。当主动关闭一方 close 一个 SOCKET 后发送 FIN 报文给自己,被动关闭一方会回应一个 ACK 报文给对方,此时则进入到 CLOSE_WAIT 状态。接下来,被动关闭一方要看是否还有数据发送给对方,如果没有的话,那么可以 close 这个 SOCKET,发送 FIN 报文给对方,也即关闭连接。被动关闭一方在CLOSE_WAIT状态下,需要完成的事情是等待自己去关闭连接。

  • LAST_ACKLAST_ACK针对被动关闭一方来讲;表示被动关闭一方在发送 FIN 报文后,最后等待对方的 ACK 报 文。当收到 ACK 报文后,也即可以进入到 CLOSED 可用状态。

  • TIME_WAITTIME_WAIT主动发起关闭一方来讲;表示收到了对方的 FIN 报文,并发送出了 ACK 报文,就等 2MSL 后即可回到 CLOSED 可用状态。 如果 FINWAIT1 状态下,收到了对方同时带 FIN 标志和 ACK 标志的报文时,可以直接进入到 TIME_WAIT 状态,而无须经过 FIN_WAIT_2 状态。

  • CLOSED表示连接中断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见六大WEB安全问题

一、XSS跨站脚本攻击 1.Cross-Site Scripting(跨站脚本攻击)简称 XSS(因为缩写和 CSS重叠,所以只能叫 XSS),是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行…

力扣---全排列---回溯

思路: 递归做法,一般会有visit数组来判断第 i 位是否被考虑了。我们先考虑第0位,再考虑第1位,再考虑第2位...dfs函数中还是老套路,先判定特殊条件,再从当下的角度(决定第 j 位是哪个元素&#x…

Java 枚举(超详细讲解)

Java语言的强大之处在于它提供了多种多样的类库,从而大大提高了程序的编程效率和质量。 一、枚举 事先考虑到某一变量可能的取值,尽可能用自然语言忠表意清楚的单词来表示它的每一个值,用这中思路定义的类型被称为枚举类型。 枚举事由一组固…

获取淘宝商品评论的爬虫技术分享(已封装API,可测试)

item_review-获得淘宝商品评论 公共参数 请求地址: taobao/item_review 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,it…

零基础机器学习(4)之线性回归的基本原理

文章目录 一、线性回归的基本原理1.相关与回归2.线性回归的原理分析①线性回归的一般公式②线性回归的损失函数③线性回归方程的参数求解方法A.最小二乘法B.梯度下降法 一、线性回归的基本原理 1.相关与回归 相关描述的是变量之间的一种关系。 从统计角度看,变量之…

Nacos介绍和统一配置管理

Nacos(全称为 Alibaba Cloud Nacos,或简称为 Nacos)是一个开源的分布式服务发现和配置管理系统。它由阿里巴巴集团开发并开源,旨在帮助开发人员简化微服务架构下的服务注册、发现和配置管理。 一、Nacos 提供了以下主要功能&…

Sentry(Android)源码解析

本文字数:16030字 预计阅读时间:40分钟 01 前言 Sentry是一个日志记录、错误上报、性能监控的开源框架,支持众多平台: 其使用方式在本文不进行说明了,大家可参照官方文档:https://docs.sentry.io/platforms…

【No.16】蓝桥杯动态规划下|线性DP装箱问题|计数DP0/1背包的方案数|过河卒|完全背包小明的背包2|最长公共子序列|蓝桥骑士|推荐练习题(C++)

线性DP&#xff0c;0/1背包简化版&#xff0c;装箱问题 【题目描述】有一个箱子容量为V(正整数&#xff0c; 0 ≤ V ≤ 20000 0 \le V \le 20000 0≤V≤20000)&#xff0c;同时有n个物品( 0 < n ≤ 30 0 < n \le 30 0<n≤30)&#xff0c;每个物品有一个体积(正整数)。…

【web前端】CSS语法

CSS语法 1. CSS语法格式 通常情况下语法格式如下: 选择器{属性名:属性值;属性名:属性值;属性名:属性值;... }2. CSS添加方式 2.1 行内样式 直接将样式写在本行的标签内。 <h1><p style"font-size: 48px; color:red;";>行内样式测试</p></…

RHEL9部署Docker环境

华子目录 Docker引擎架构docker引擎架构示意图执行过程示例 RHEL9上安装Docker1.系统要求2.安装yum-utils工具包3.yum安装docker-ce4.配置docker镜像加速docker拉取镜像的过程配置阿里云镜像仓库重新加载守护进程重启Docker服务 5.拉取并运行hello-world镜像6.测试是否安装成功…

SpringCloudAlibaba和SpringCloud的区别

SpringCloudAlibaba实际上对SpringCloud实现拓展组件功能. 1.nacos 分布式配置中心分布式注册中心Eurekaconfig 2.目的是为了推广阿里的产品&#xff0c;如果使用了SpringCloudAlibaba,最好使用alibaba整个体系产品 SpringCloudAlibaba版本对应: 2020.0 分支对应的是 Spring…

ElasticSearch首次启动忘记密码,更改密码(Windows 10)

先启动ElasticSearch 启动方式cmd到lasticsearch-8.12.2\bin目录下输入elasticsearch 启动成功后新开一个窗口输入elasticsearch-reset-password -u elastic

长安链共识算法切换:动态调整,灵活可变

#功能发布 长安链3.0正式版发布了多个重点功能&#xff0c;包括共识算法切换、支持java智能合约引擎、支持后量子密码、web3生态兼容等。我们接下来为大家详细介绍新功能的设计、应用与规划。 随着长安链应用愈加成熟与广泛&#xff0c;一些在生产中很实用的需求浮出水面。长安…

RIPGeo代码理解(五)utils.py( 辅助函数)第一部分

​ 代码链接:RIPGeo代码实现 ├── lib # 包含模型(model)实现文件 │ |── layers.py # 注意力机制的代码。 │ |── model.py # TrustGeo的核心源代码。 │ |── sublayers.py # layer.py的支持文件。 │ |── utils.p…

Linux发布项目(包括前端和后端)到OpenEuler虚拟机上

后端&#xff1a;SpringBoot 前端&#xff1a;VUE3 操作系统&#xff1a;Linux 虚拟机&#xff1a;OpenEuler 发布项目是需要关闭虚拟机上的防火墙 systemctl stop firewalld 一、发布后端项目到虚拟机 1打包后端项目为jar包 2将打包后的jar包放到虚拟机 /opt 目录下 3 运行项…

算法体系-12 第 十二 二叉树的基本算法 下

一 实现二叉树的按层遍历 1.1 描述 1&#xff09;其实就是宽度优先遍历&#xff0c;用队列 2&#xff09;可以通过设置flag变量的方式&#xff0c;来发现某一层的结束&#xff08;看题目&#xff09;看下边的第四题解答 1.2 代码 public class Code01_LevelTraversalBT {publ…

Elsevier(爱思唯尔)如何查询特刊special issue

1. 以Knowledge-Based Systems为例 网站&#xff1a;https://www.sciencedirect.com/journal/knowledge-based-systems 2.具体位置

Linux进程间通信【一】

进程间通信介绍 进程间通信的概念 进程间通信简称IPC&#xff08;Interprocess communication&#xff09;&#xff0c;进程间通信就是在不同进程之间传播或交换信息。 进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多…

linux内核input子系统概述

目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…

基于springboot+vue的电影院购票系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…