三次握手和四次挥手

article/2025/9/15 16:16:34

三次握手和四次挥手

  • 三次握手
  • 四次挥手

♠ \color{red}{\spadesuit}
ok,上一篇介绍完TCP/IP的常见状态码,对TCP协议有一个大概的了解了,接下来进入TCP协议的(建立连接)三次握手和四次挥手(关闭连接)

三次握手

三次握手是指建立一个TCP连接时,需要客户端和服务端总共发送3个包,如图所示
三次握手
第一次握手:建立连接时,客户端发送SYN包(SYN=1 Seq=x)到服务端,并进入SYN_SEND状态,等待服务器端的确认;

第二次握手:服务器端收到SYN包,由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和ACK都置为1后,随机产生一个Seq=y,向客户端发送一个SYN包,即SYN+Ack包(SYN=1 Seq=y Ack=x+1),此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器端的SYN+Ack包,确认收到的ACK是否为1,ack是否为x+1,若是,则将标志位ACK置为1,后向服务器端发送确认包ack(ACK=1 Seq=x+1 Ack=y+1),此包发送完毕后,客户端和服务器端进入ESTABLISHED(established)状态,完成三次握手。客户端和服务器端开始传送数据。

三次握手的目的

是连接服务器指定的端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息。

注意!不要将序列号Ack与标志位中的ACK混淆!

四次挥手

对于一个已经建立的连接,TCP使用改进的三次挥手来释放连接(使用一个带有FIN附加标记的报文段)

假设主动关闭方为主机A,被动关闭方为主机B,如图

四次挥手
第一次挥手:当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段,进入FIN_WAIT_1状态

第二次挥手:主机B收到该FIN报文段之后,并没有立刻用FIN报文段回复主机,而是先向主机A发送一个确认序号Ack,同时通知自身的相应应用程序:对方要求关闭连接,主机B进入CLOSE_WAIT状态,主机A成功收到主机B发送的ACK之后进入FIN_WAIT_2状态
(ps:思考一下,为什么要先向主机A发送Ack,而不是直接一起发送Ack+FIN包)

第三次挥手:主机B的应用程序告诉TCP,我要彻底关闭连接,TCP向主机A发送一个FIN报文段,主机B进入LAST_ACK状态

第四次挥手:主机A收到该报文段后,向主机B发动一个Ack,表示连接彻底释放,主机A进入TIME_WAIT状态(为什么要进入等待状态而不是直接关闭?面试题常考哦~)

以上两个问题可查看我的另一篇博文介绍你不可不知的经典面试题集锦


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

相关文章

详解三次握手和四次挥手

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官&#xff1…

TCP为什么需要3次握手与4次挥手

http://blog.csdn.net/xifeijian/article/details/12777187 为什么需要“三次握手” 在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次…

一文搞懂TCP的三次握手和四次挥手

目录 1、三次握手 2、四次挥手 3、11种状态名词解析 TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕…

【通俗易懂】三次握手与四次挥手

1.三次握手 三次握手(Three-way Handshake)是指在建立一个TCP连接时,客户端和服务器会一共发送三个报文段。 初始时客户端和服务器都处于CLOSED状态,当服务器应用程序创建一个监听套接字时,服务器处于LISTEN状态。 …

面试官,不要再问我三次握手和四次挥手

温馨提示:本篇文章会长期维护及更新,详情见:https://yuanrengu.com/2020/77eef79f.html 面试相关文章推荐: 面试必备 | 小伙伴栽在了JVM的内存分配策略。。。垃圾收集器(CMS、G1)及内存分配策略Java虚拟机…

C语言数据结构创建矩阵,及代入数据

创建一个这样的矩阵 数据由我们插入(定位坐标行列及插入的数据) 代码如下: 思路:将每个坐标节点和我们插入的节点坐标做对比,如果行列坐标都相等,则value置1并输出其相应的数据,否则value还是为0&#x…

数据结构-树(c语言实现篇)

数据结构之二叉树(c语言实现篇) 介绍树的概念和二叉树的概念和应用,内容主要是以二叉树为主。 1. 树 1.1 树的概念 树是n个结点的有限集,当n0时,称为空树。树是一种非线性的数据结构,与前面的线性表、栈和…

c语言的数据结构表达式求值

最近学习c语言的数据结构中有关栈的实现。下面是用栈实现表达式求值的一个实例,用的是顺序栈的形式 原理: List item 我们默认一‘#’开始,最后输入’#‘结束 在运算中的每一步中,任意两个相继出现的算符theta1和theta2之间的关…

C语言数据结构篇——栈的顺序存储

作者名:Demo不是emo 主页面链接:主页传送门创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,中后期主要是经验和能力的提高,我也刚接触计算机1年,也在不断的探索&#xf…

C语言数据结构之查找(顺序查找,折半查找)

C语言数据结构之查找(顺序查找,折半查找) tips:前些天已经学习了树和图的相关知识,今天来总结下两种常用的查找方式(顺序查找,折半查找)。 为了演示方便,顺序查找和折半…

【C语言数据结构7】--串的实现

串 一、什么是串 串就是我们常说的字符串,它同样是一个线性表。可能有人认为串就是元素为字符的线性表,但这种说法是不准确的。对于普通的线性表,它们关注的往往是单个元素,每个单独的元素都有独立的含义。比如我们用线性表存储…

C语言数据结构——查找(检索)

一、查找的基本概念 查找:查询某个关键字是否在(数据元素集合)表中的过程。也称作检索。 查找表: 由同一类型的数据元素(或记录)构成的集合。 主关键字: 能够惟一区分各个不同数据元素的关键字 次关键字: 通常不能惟一区分各个不同数据元素的…

C语言数据结构——广义表

C语言数据结构中,广义表和数组一样,也是线性表的一种推广! 广义表的定义: 广义表 LS 为n(n≥0)个元素的有穷序列,记作: LS (d1, d2, … dn) 其中&#xff1…

C语言数据结构——图

一、图的基本概念 图是由顶点集合及顶点间的关系集合组成的一种数据结构。vertex, edge 图G的定义是: G (V,E) 其中, V {x|x∈某个数据元素集合} E { (x,y)|x,y∈V} (无向图&#…

数据结构(c语言版本)

1.基本概念 1.1数据 对客观事物的符号表示,在计算机与科学中是指所有能输入到计算机并被计算机程序处理的符号的总称。 1.2数据元素 是数据的基本单位,在计算机程序中作为一个整体进行考虑和处理 1.3数据对象 是相同性质数据元素的集合&#xff0c…

c语言数据结构

目录 一、数据结构构造概述 1.1、什么是数据结构 1.2、数据的逻辑结构的4种分类 二、线性表 2.1、线性表概述 2.2、顺序表 2.3、链表 2.3.1、链表节点的创建 2.3.2、链表结点遍历 2.3.3、链表结点删除 2.3.4、链表的插入 ​ 三、栈和队列 3.1、栈概述 3.2、栈…

C语言数据结构知识点小结(全)

Catologue C语言数据结构一、基本概念和术语二、时间、空间复杂度(1)时间复杂度(2)空间复杂度 三、类C语言有关操作补充1:数组定义补充2:动态内存分配补充3:C中的参数传递 四、线性表&#xff0…

七丶青龙nvjdc部署教程+短信验证登录对接傻妞

青龙nvjdc部署教程短信验证登录对接傻妞Nolanjdc 没有服务器的先自行购买,这里推荐腾讯云2H4G8M首年70–点击购买 青龙面板安装教程 傻妞机器人安装教程 XDD安装教程 QQ交流:1014549449 --------------点击跳转 注丶只能对接一个,要么对接…

手机短信验证

在项目中经常会用到手机短信验证注册,登录等功能,所以我想写一篇文章来给大家提供一个参考。 阿里大于-个人感觉比较好用的短信验证平台,下面是接入阿里大于sdk的步骤。 阿里大于官网:直通车, 进入官网需要注册,注册…

014_关于session实现短信验证登录的前端启动

014_关于session实现短信验证登录的前端启动 1、进入到nginx相对应的文件夹,shfit右键,进入PowerShell并且执行nginx 2、启动我们的nginx,嘿嘿,可以访问我们的前端网页啦!!!它就是模仿我们的大众点评来着…