TCP三次握手和四次挥手以及11种状态

2023-11-03

1、三次握手

置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN

  • ACK:表示验证字段
  • SYN:位数置1,表示建立TCP连接
  • FIN:位数置1,表示断开TCP连接
    在这里插入图片描述

三次握手过程说明:
1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)
2、由服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。
3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

2、四次挥手

在这里插入图片描述

四次挥手过程说明:
1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成)
2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)
3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)
4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程完毕

3、11种状态

在这里插入图片描述

1、一开始,建立连接之前服务器和客户端的状态都为CLOSED;
2、服务器创建socket后开始监听,变为LISTEN状态;
3、客户端请求建立连接,向服务器发送SYN报文,客户端的状态变味SYN_SENT;
4、服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD;
5、然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED;
6、服务器端收到客户端的ACK后变为ESTABLISHED。此时3次握手完成,连接建立!

在这里插入图片描述

由于TCP连接是全双工的,断开连接会比建立连接麻烦一点点。
1、客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1;
2、服务器收到FIN后向客户端发送ACK,服务器的状态围边CLOSE_WAIT;
3、客户端收到ACK后就进入FIN_WAIT2状态,此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送;
4、直到发完数据,就会发送FIN报文,此时服务器进入LAST_ACK状态;
5、客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态;
6、再过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。
至此,还有一个状态没有出来:CLOSING状态。
CLOSING状态表示:
客户端发送了FIN,但是没有收到服务器的ACK,却收到了服务器的FIN,这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。

11种状态

LISTEN:等待从任何远端TCP 和端口的连接请求。
SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。
SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。
ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。
FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。
FIN_WAIT_2:等待远端TCP 的连接终止请求。
CLOSE_WAIT:等待本地用户的连接终止请求。
CLOSING:等待远端TCP 的连接终止请求确认。
LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)
TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。
TIME_WAIT 两个存在的理由:
1.可靠的实现tcp全双工连接的终止;
2.允许老的重复分节在网络中消逝。
CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)

参考链接 :
TCP三次握手和四次挥手以及11种状态 : https://mp.weixin.qq.com/s/1pSpw6I9RKXSwTKoBGG_zA

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP三次握手和四次挥手以及11种状态 的相关文章

  • linux kernel development 3rd

    很早就听说这本书了 但是一直未看 现在稍微看看 第3章 1 vfork与fork不一样 但是也没多大作用 不看也罢 2 进程pcb task struct保存在process kernel栈的底端 而而thread info在栈顶端 不知具
  • C语言.表白神器.爱你之心之闪耀

    前言 爱你之心之闪耀 这个名字比较沙雕哈哈哈 爱你之心之闪耀 前言 爱心函数的选取 爱心函数1 爱心函数2 简单爱心 粒子发射原理 爱心结构 一些宏 初始化 init 创建若干爱心并初始化 setHeart 展示爱心 showHeart 爱
  • Vue3的使用

    1 安装命令步骤 vue create 命令 接下来我们创建 runoob vue3 app 项目 vue create runoob vue3 app 执行以上命令会出现安装选项界面 Vue CLI v4 4 6 Please pick
  • 解决升级JDK后:找不到sun.misc.Unsafe的类文件

    原因 JDK9以后已经将sun misc Unsafe弃用 同时改进了lib文件的存储方式 将sun misc Unsafe全部存储在了jdk unsupported里面 解决 手动添加弃用的类文件 在编译时 携带参数 add module
  • 运维Shell脚本小试牛刀(七):在函数文脚本件中调用另外一个脚本文件中函数

    运维Shell脚本小试牛刀 一 运维Shell脚本小试牛刀 二 运维Shell脚本小试牛刀 三 cd dirname 0 pwd 命令详解 运维Shell脚本小试牛刀 四 多层嵌套if elif elif else fi 蜗牛杨哥的博客 C
  • react 字段拼接

    Array from columns el index1 gt

随机推荐

  • 正确解决:坑爹的0xc000007b

    1 出现0xc000007b 应用程序无法正常启动 其根本原因是缺乏所需要的DLL 提供了错误版本的dll相当于没有DLL 提示完全一样 2 网上有人说缺乏dx运行环境 如果属实 也是因为缺乏dx相关的dll 所以根本原因 在低一点 3 与
  • PyCharm运行Python代码时出现“未找到模块”错误

    PyCharm运行Python代码时出现 未找到模块 错误 在PyCharm中执行Python脚本时 有时会出现 ModuleNotFoundError No module named XXXX 错误 这种错误是因为在项目中没有安装对应的
  • C++求vector中的最大值

    习惯了Python的编程以后 再回过头来写C 感觉头都被搞大了 Python是一门高级语言 而C 是一门偏底层的语言 所以Python一行解决的问题用C 也许需要好几行 比如在一个列表中找最大值的问题 如果是Python的话 那么代码大概是
  • (二十八)业绩归因之Brinson模型

    单期Brinson模型 一个时期的基金收益可以分为四个部分 资产配置收益 个股选择收益 交互收益和基准组合收益 先构建4个概念性的组合 Q1 Q4 基准收益组合和实际投资组合 Q2 积极资产配置组合 这表示基金经理能自主选择资产配置的比例
  • 定时器中断控制LED状态实验

    一 STM32 通用定时器简介 STM32F1 的通用定时器是一个通过可编程预分频器 PSC 驱动的 16 位自动装载计数 CNT 构成 STM32 的通用定时器可以被用于 测量输入信号的脉冲长度 输入捕获 或者产生输出波 输出比较和 PW
  • C++虚函数详解

    C 虚函数详解 前言 C 的特性使得我们可以使用函数继承的方法快速实现开发 而为了满足多态与泛型编程这一性质 C 允许用户使用虚函数 virtual function 来完成 运行时决议 这一操作 这与一般的 编译时决定 有着本质的区别 虚
  • 毕业设计-基于 MATLAB 的医学超声图像处理仿真平台设计与研究

    目录 前言 课题背景和意义 实现技术思路 一 平台的总体设计 二 医学超声图像处理仿真平台算法概述及 GUI 实现 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设
  • 管理的核心是什么?这里有一套科学、高效的团队管理法则

    员工就该牢牢约束才能管好 对于员工的管理尺度令许多管理者头大 管紧了 容易让员工产生反叛心理 甚至导致人员的流失 管的松了 员工好像又不怎么用心工作 其实在这里 很多管理者经常有一个误区就是 管理就是控制和约束 但实际上有效的管理是对员工的
  • MES系统最全介绍来了

    制造型企业在生产过程中 或多或少都会遇到以下生产问题 1 生产现场管理混乱 造成人力资源和物流的浪费 2 生产进度不透明 给业务和跟单带来诸多不便 3 不能及时了解产品不良率 质量控制难度大 4 仓储管理不规范 造成材料积压过多 物料查找麻
  • VMware Workstation 16 在此主机上不支持嵌套虚拟化 修复方法

    一 准备工作 已安装 VMware Workstation 16 Pro 以上版本 操作系统为 Windows 10 以上版本 设备已联网 并能访问到 VMware 官方服务器 二 操作步骤 1 升级 VMware Workstation
  • 想拿 20k 无压力?Android开发必读的一篇文章!

    程序员分很多种类和等级 如果要提高达到20k的概率 有两个条件如果满足的话 则很容易达到 1 一线城市 北上广深杭 2 互联网行业 如果你非得抬杠 我要在三线城市 做外包要赚20k的话 很难 我自己也做不到 所以 如果你要做程序员的话 必须
  • [Spring Boot]02 使用IDEA快速构建Spring Boot工程

    新建 Spring Initializr 项目 选择 Spring Initializr 如下图选择SDK和URL 点击NEXT 填写项目信息Group和Artifact 什么是Group和Artifact Group 是项目组织的唯一标识
  • MySQL高级篇_第18章_主从复制

    1 主从复制概述 1 1 如何提升数据库并发能力 在实际工作中 我们常常将 Redis 作为缓存与 MySQL 配合来使用 当有请求的时候 首先会从缓存中进行查找 如果存在就直接取出 如果不存在再访问数据库 这样就提升了读取的效率 也减少了
  • [vulnerhub] easy_cloudav write up

    摘要 0x1 靶机 192 168 88 13 靶机下载地址 https download vulnhub com boredhackerblog easy cloudantivirus ova 攻击机 192 168 88 8 每周六都会
  • Unity3D 移动物体方式总结

    简述 在Unity 3D中很多时候我们会想要移动一个物体到别的位置 如让想人物跑动起来 或者想要移动相机来跟随人物 有很多种方法可以改变物体的坐标 实现移动的目的 移动的本质是在每一帧中修改物体的position 在这里把之前使用过的移动物
  • python项目开发中首先要学习的几个知识点

    python项目开发中首先要学习的几个知识点 1 知识点 python中的推荐命名规范 python项目的推荐目录结构 python中 init py的作用 python中在不同文件夹 同一个文件夹两种情况下如何引用另一个 py文件 pyt
  • U-Net实现医学图像分割(pytorch)

    刚开始学习pytorch框架时候 在github上下载过大佬的图像分割代码来训练自己数据集 但是却经常报错 后面在kaggle上下载了一个比较简洁易理解的分割代码 又根据自己的需求进行了修改评价指标 网络框架搭建以及可视化功能编写 本文的主
  • 如何将LaTeX公式拷贝到Word中

    LaTeX可以方便地用来编辑公式 但是它的排版需要编译以后才能看到 Word就在公式编辑上着实让人觉得麻烦 但是Word可以及时显示你所编辑的内容 本文介绍一种方法来帮助你将LaTeX源码直接在Word中转化为公式 方法 有两种方法可供选择
  • Scikit-learn之支持向量机

    Scikit learn之支持向量机 1 支持向量机简介 2 SVM在sklearn中的实现 2 1 实现目标 2 2 实现步骤 2 3 线性核函数 2 4 多项式核函数 2 5 高斯核函数 2 6 总结 1 支持向量机简介 SVM 支持向
  • TCP三次握手和四次挥手以及11种状态

    1 三次握手 置位概念 根据TCP的包头字段 存在3个重要的标识ACK SYN FIN ACK 表示验证字段 SYN 位数置1 表示建立TCP连接 FIN 位数置1 表示断开TCP连接 三次握手过程说明 1 由客户端发送建立TCP连接的请求