什么是TCP三次握手、四次挥手?

news2024/10/7 12:21:43

 🎬作者简介:大家好,我是小徐🥇
☁️博客首页:CSDN主页小徐的博客
🌄每日一句:好学而不勤非真好学者

📜 欢迎大家关注! ❤️

1、三次握手

  1. 你(客户端)给一个朋友(服务器)打电话,告诉他你想开始对话。这就像是发送一个SYN(同步序列编号)信号,表示你想开始建立连接。(client向server发送syn,seq=x,此时client验证client发送能力正常。client置为SYN SENT状态)
  2. 你的朋友接到电话,明白你想开始对话。他回应说“好的,我准备好了”,同时也告诉你2他也想说些话。这就相当于服务器发送SYN-ACK(同步和确认)信号,既确认收到了你的请求,也表明它准备好了并想建立连接。(server收到syn,此时server验证client发送能力正常,server接收能力正常。server向client发送ack=x+1,seq=y,此时server验证server发送能力正常。server置为SYN RCVD状态)
  3. 最后,你回复你的朋友说你收到了他的确认,现在可以开始对话了。这就是发送ACK(确认)信号,确认你已经准备好进行通信。(client收到ack,此时client验证client接收能力正常,server接收发送能力正常。client向server发送ack=y+1,seq=x+1,server接收到后验证client接收能力正常。client置为ESTABLISHED状态)

2、四次挥手

  1. 你(客户端)和朋友(服务器)通话结束后,告诉他你想挂电话了。这就像是发送FIN(结束)信号,表示你想结束这次连接。(client向server发送fin。client置为FIN_WAIT_1)
  2. 朋友听到你想挂电话了,他回应说“知道了,但我还有点事情要处理”,即使他知道对话即将结束。这就相当于服务器发送ACK(确认)信号,确认收到了你想结束连接的请求但可能还需要一些时间来处理剩余的数据。(server向client发送ack。server置为CLOSE WAIT, client置为FIN_WAIT_2)
  3. 一段时间后,你的朋友处理完了他的事情,这时他打电话告诉你他也准备好挂电话了。这是服务器端发送第二个FIN信号,表明他现在也准备好结束这次连接。(等server传输数据完毕后,向client发送fin。server置为LAST ACK)
  4. 最后,你回复说你收到了他的消息,并同意现在可以挂电话了。这就是发送最后一个ACK4.信号,确认收到服务器端的结束请求。(client向server发送ack。client置为TIME WAIT。之后等待2MSL,client关闭。server接收到后置为CLOSED)

其中等待2倍的最大报文段生存时间(2MSL,Maximum Segment Lifetime)是为了确保在网络中的所有剩余数据报文段都被丢弃,以防止旧的数据报文段在之后的连接中引发混淆或冲突。

3、为啥三次握手

TCP三次握手验证了client和server的收包和发包能力。

第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正用。

第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

所以,只有三次握手才能确认双方的接收与发送能力是否正常。

如果是两次握手,服务端无法确定客户端是否已经接收到了自己发送的初始序列号,如果第二次握手报文丢失,那么客户端就无法知道服务端的初始序列号,那 TCP 的可靠性就无从谈起。

客户端由于某种原因发送了两个不同序号的 SYN 包,我们知道网络环境是复杂的,旧的数据包有可能先到达服务器。如果是两次握手,服务器收到旧的 SYN 就会立刻建立连接,那么会造成网络异常。

如果是三次握手,服务器需要回复 SYN+ACK 包,客户端会对比应答的序号,如果发现是旧的报文,就会给服务器发 RST 报文,直到正常的 SYN 到达服务器后才正常建立连接。
所以三次握手才有足够的上下文信息来判断当前连接是否是历史连接。

4、为啥四次挥手

其实在 TCP 握手的时候,接收端发送 SYN+ACK 的包是将一个 ACK 和一个 SYN 合并到一个包中,所以减少了一次包的发送,三次完成握手。

对于四次挥手,因为 TCP 是全双工通信,在主动关闭方发送 FIN 包后,接收端可能还要发送数据,不能立即关闭服务器端到客户端的数据通道,所以也就不能将服务器端的 FIN 包与对客户端的 ACK 包合并发送,只能先确认 ACK,然后服务器待无需发送数据时再发送 FIN包,所以四次挥手时必须是四次数据包的交互。


仅供参考,欢迎评论区留言,一起讨论~

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

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

相关文章

前端面试题-网络部分-http和其他协议之间的区别-ajax请求的步骤-XSS,CSRF-http的加密过程- 浏览器缓存

前端面试题-网络部分-http和其他协议之间的区别-ajax请求的步骤-XSS,CSRF-如果ajax请求-http的加密过程 http和其他协议之间的区别http和tcp之间的区别http和websocket协议有什么区别 Ajax请求的步骤什么是XSS,CSRF攻击https加密的过程浏览器缓存 http和其他协议之间…

BUGKU-WEB Simple_SSTI_1

02 Simple_SSTI_1 题目描述 没啥好说的~ 解题思路 进入场景后&#xff0c;显示&#xff1a; You need pass in a parameter named flag。ctrlu 查看源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

函数对象(仿函数)的相关基本概念及用法

函数对象&#xff08;仿函数&#xff09; 基本概念 重载函数调用操作符的类&#xff0c;其对象称为函数对象 函数对象使用重载的&#xff08;&#xff09;时&#xff0c;行为类似函数调用&#xff0c;因此也被称为仿函数 本质 函数对象&#xff08;仿函数&#xff09;是一…

机器学习本科课程 大作业 多元时间序列预测

1. 问题描述 1.1 阐述问题 对某电力部门的二氧化碳排放量进行回归预测&#xff0c;有如下要求 数据时间跨度从1973年1月到2021年12月&#xff0c;按月份记录。数据集包括“煤电”&#xff0c;“天然气”&#xff0c;“馏分燃料”等共9个指标的数据&#xff08;其中早期的部分…

yarn/npm certificate has expired

目录 报错 原因&#xff1a;HTTPS 证书验证失败 方法 a.检查网络安全软件&#xff1a;可能会拦截或修改 HTTPS 流量 b.strict-ssl:false关闭验证【临时方法】 报错 info No lockfile found. [1/4] Resolving packages... error Error: certificate has expired at TLS…

【华三】GRE VPN 实验配置

【华三】GRE VPN 实验配置 前言报文格式实验需求配置思路配置拓扑GRE配置步骤R1基础配置GRE 配置ISP_R2基础配置R3基础配置GRE 配置PCPC1PC2抓包检查OSPF建立GRE隧道建立配置文档前言 VPN :(Virtual Private Network),即“虚拟专用网络”。 它是一种通过公用网络(通常是互…

骨传导耳机是什么原理?适合什么场景使用?

骨传导耳机是一种非常特殊的蓝牙耳机&#xff0c;它们通过骨传导技术将声音直接传送到内耳。这种技术不同于传统耳机&#xff0c;它不通过空气传送声音&#xff0c;而是通过头骨的振动来传送声音。 骨传导耳机的传声原理跟传统耳机有所不同&#xff0c;传统耳机通过空气振动将…

爱上算法:每日算法(24-2月2号)

&#x1f31f;坚持每日刷算法&#xff0c;将其变为习惯&#x1f91b; 题目链接&#xff1a;101. 对称二叉树 最开始肯定是比较简单的想法&#xff0c;就是遍历左右节点呀&#xff0c;不相等我就直接返回false。 但是这样错了&#xff0c;我们要的是以根节点为轴&#xff0c;而…

使用 Python、Elasticsearch 和 Kibana 分析波士顿凯尔特人队

作者&#xff1a;来自 Jessica Garson 大约一年前&#xff0c;我经历了一段压力很大的时期&#xff0c;最后参加了一场篮球比赛。 在整个过程中&#xff0c;我可以以一种我以前无法做到的方式断开连接并找到焦点。 我加入的第一支球队是波士顿凯尔特人队。 波士顿凯尔特人队是…

【Linux】文件周边002之初步理解文件管理(打开的文件)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.&#xff08;打开…

PMP资料怎么学?PMP备考经验分享

PMP考试前大家大多都是提前备考个一两个月&#xff0c;但是有些朋友喜欢“不走寻常路”&#xff0c;并不打算去考PMP认证&#xff0c;想要单纯了解PMP&#xff0c;不管要不要考证&#xff0c;即使是仅仅学习了解一下我个人都非常支持&#xff0c;因为专业的基础的确能提高工作效…

【Linux系统 02】Shell脚本

目录 一、Shell概述 二、输入输出 三、分支控制 1. 表达式 2. if 分支 3. case 分支 四、循环控制 1. for 循环 2. while 循环 3. select 循环 五、函数 一、Shell概述 Shell是Linux系统连接用户和操作系统的外壳程序&#xff0c;将用户的输入和请求选择性传递给操…

Unity笔记:相机移动

基础知识 鼠标输入 在Unity中&#xff0c;开发者在“Edit” > “Project Settings” > “Input Manager”中设置输入&#xff0c;如下图所示&#xff1a; 在设置了Mouse X后&#xff0c;Input.GetAxis("Mouse X")返回的是鼠标在X轴上的增量值。这意味着它会…

考勤|基于Springboot的大学生考勤系统设计与实现(源码+数据库+文档)

大学生考勤系统目录 目录 基于Springboot的大学生考勤系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、系统登录注册 2、管理员功能模块 3、教师功能模块 4、学生功能模块 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码…

【CSS + ElementUI】更改 el-carousel 指示器样式且隐藏左右箭头

需求 前三条数据以走马灯形式展现&#xff0c;指示器 hover 时可以切换到对应内容 实现 <template><div v-loading"latestLoading"><div class"upload-first" v-show"latestThreeList.length > 0"><el-carousel ind…

@所有人 您需要的 幻兽帕鲁服务器搭建教程 已上线

所有人 您需要的 幻兽帕鲁服务器搭建教程 已上线 幻兽帕鲁一键购买及部署体验购买及部署购买云服务器ECS部署幻兽帕鲁 创建账户并登录Steam其他操作更新服务器修改游戏参数其他操作释放资源 一直拖到今天才来写这篇幻兽帕鲁服务器搭建教程&#xff0c;确实是因为前段时间有事耽…

【Rust】——rust前言与安装rust

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

机器学习系列5-特征组合、简化正则化

1.特征组合 1.1特征组合&#xff1a;编码非线性规律 我们做出如下假设&#xff1a;蓝点代表生病的树。橙色的点代表健康的树。 您可以绘制一条直线将生病的树与健康的树清晰地分开吗&#xff1f;不可以。这是一个非线性问题。您绘制的任何线条都无法很好地预测树的健康状况…

R语言学习case12:ggplot 置信区间(多线型)

接上文&#xff1a;多条曲线 R语言学习case11&#xff1a;ggplot 置信区间&#xff08;包含多子图&#xff09; 在ggplot2中&#xff0c;每个geom函数都接受一个映射参数。然而&#xff0c;并非每个美学属性都适用于每个geom。你可以设置点的形状&#xff0c;但不能设置线的“…

群晖NAS开启FTP服务结合内网穿透实现公网远程访问本地服务

⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP…