计算机网络笔记:TCP三次握手和四次挥手过程

news2025/1/10 23:50:36

TCP是面向连接的协议,连接的建立和释放是每一次面向连接的通信中必不可少的过程。TCP连接的管理就是使连接的建立和释放都能正常地进行。

三次握手

TCP连接的建立—三次握手建立TCP连接

在这里插入图片描述

① 若主机A中运行了一个客户进程,当它需要主机B的服务时,就发起TCP连接请求,并在所发送的分段中用SYN=1表示连接请求,并产生一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x主机B收到A的连接请求报文,就完成了第一次握手

  • 客户端发送SYN=1表示连接请求
  • 客户端发送一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x

主机B如果同意建立连接,则向主机A发送确认报文,用SYN=1ACK=1表示同意连接,用ack=x+1表明正确收到A的序号为x的连接请求,同时也为自己选择一个随即发送序号seq=y作为它的发送序号的初始值。主机A收到主机B的请求应答报文,完成第二次握手

  • 服务端发送SYN=1ACK=1表示同意连接
  • 服务端发送ack=x+1表明正确收到A的序号为x的连接请求
  • 服务端发送一个随即发送序号seq=y作为它的发送序号的初始值

③ 主机A收到主机B的确认后,还要向主机B发出确认,用ACK=1表示同意连接,用ack=y+1表明收到B对连接的应答,同时发送A的第一个数据seq=x+1主机B收到主机A的确认报文,完成第三次握手。此时双方就可以使用协定好的参数以及各自分配的资源进行正常的数据通信了。

  • 客户端发送ACK=1表示同意连接
  • 客户端发送ack=y+1表明收到B对连接的应答,同时发送A的第一个数据seq=x+1

为什么需要三次握手,两次不行?

为了确认双方的接收能力和发送能力都正常。

通过第三次握手,主要目的是为了防止已失效的连接请求报文段突然又传送到了主机B,因而产生错误

所谓“失效的连接请求报文段”是指一端(如A)发出的连接请求,由于没有在允许的时间内传送到目的方(如B),使得发送方不得不又发送一个新的连接请求报文段。

而在新的连接请求建立并传送完数据将连接释放后,出现了一种情况,即主机A发出的第一个连接请求报文段迟迟到达了B。本来,这是一个已经失效的报文段,但主机B收到此失效的连接请求报文段后,就误认为是主机A又发出一次新的连接请求,于是向主机A发出确认报文段,同意建立连接。主机A由于并没有要求建立连接,因此不会理睬主机B的确认,也不会向主机B发送数据。但主机B却以为传输连接就这样建立了,并一直等待主机A发来数据。主机B的许多资源就这样白白浪费了。

采用三次握手机制可以防止上述现象的发生。在上述情况下,主机A就不会理睬主机B发来的确认,也不会向主机B发出确认报文,连接也就建立不起来。

四次挥手

TCP连接的拆除—用四次握手释放TCP连接

在这里插入图片描述
① 在数据传输结束后,通信双方都可以释放连接。在上图,主机A的应用进程先向其TCP发出连接释放请求,并不再发送数据。TCP通知对方要释放从A到B这个方向的连接,便发送FIN=1的报文段给主机B,其序号u等于已传送过的数据的最后一个字节的序号加1。这时A处于等待B确认的状态。

② 主机B的TCP收到释放连接的通知后,即发出确认,其确认序号ack=u+1,而这个报文段自己的序号是v,等于主机B已经传送过的数据的最后一个字节的序号加1,同时通知高层的应用进程。这样,从A到B的连接就释放了,连接处于半关闭状态,即主机A已经没有数据要发送了,但主机B若发送数据,A仍要接收。也就是说,从B到A这个方向的连接并未关闭,可能还要等待一段时间。等待是因为若主机B还有一些数据要发往主机A,则可以继续发送,主机A只要收到数据,仍应向主机B发送确认。

③ 在主机B向主机A的数据发送结束后,其应用进程就通知TCP释放连接。主机B发出的连接释放报文段必须将FIN置1,先假设B的序号为w(在半关闭状态下主机B可能又发送了一些数据),同时还必须重复上次已发送过的确认序号ack=u+1。这时主机B进入等待A的确认状态。

④ 主机A收到B的连接释放报文段后,必须对此发出确认,在确认报文段中将ACK置1,给出确认序号ack=w+1,而自己的序号是seq=u+1。从B到A的连接被释放掉。主机A的TCP再向其应用进程报告,整个连接已经全部释放。

为什么需要四次挥手?

TCP 使用四次挥手的原因是因为 TCP 的连接是全双工的,所以需要双方分别释放到对方的连接,单独一方的连接释放,只代 表不能再向对方发送数据,连接处于的是半释放的状态。

最后一次挥手中,客户端会等待一段时间再关闭的原因,是为了防止发送给服务器的确认报文段丢失或者出错,从而导致服务器 端不能正常关闭。

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

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

相关文章

迁移学习

迁移学习 什么是迁移学习 迁移学习【斯坦福21秋季:实用机器学习中文版】 迁移学习(Transfer Learning)是一种机器学习方法,它通过将一个领域中的知识和经验迁移到另一个相关领域中,来加速和改进新领域的学习和解决问…

OS开源项目周报0105

由OpenDigg 出品的iOS开源项目周报第四期来啦。iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等。 Hero 酷炫的iOS动画引擎 Traits 实时修改原生iOS 应用属性 JSDBanTangHomeDemo 仿半糖首页…

【Git】‘git‘ 不是内部或外部命令,也不是可运行的程序

一、问题 我想利用git clone命令从github上下载项目源代码,发现报错: git 不是内部或外部命令,也不是可运行的程序或批处理文件。我用cmd跑一下git命令,发现报错: 二、问题分析 这个错误提示表明您的系统中没有安装…

Illustrator如何使用基础功能?

文章目录 0.引言1.菜单栏2.工具箱 0.引言 因科研等多场景需要进行绘图处理,笔者对Illustrator进行了学习,本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结,本文对软件界面基本功能进行阐述。    1…

第四章 数据关联分析方法

基本概念和方法 关联规则和算法应用 基本概念和术语 关联规则算法应用: 一个关联规则分析的例子—————超市购物篮分析 不要看 后面数字看不懂 项集:是指项的集合。包含k个项的项集称为k-项集 支持度:若A是一个项集,则A的…

Vue3 +TypeScript 引入 BabylonJs(Vue3实现3D)【一篇文章精通系列】

本文主要介绍如何使用Vue3和TypeScript引入BabylonJs技术实现3D效果。结合实际案例,详细讲解了如何在Vue3项目中引入BabylonJs,并了解其相关知识。通过本文的学习,相信读者可以轻松掌握Vue3实现3D效果以及BabylonJs的相关知识。 Vue3 TypeS…

天梯赛L1-001 ~ 010

👂 White Lie - Jhameel - 单曲 - 网易云音乐 👂 丁丁猫儿 - 施鑫文月 - 单曲 - 网易云音乐 今年蓝桥 / 天梯都陪跑,希望明年,蓝桥杯省一(CA组60分),天梯赛国三(180分)…

详细的实用技巧,让你轻松成为WEB自动化测试大师

目录 一、什么是WEB自动化测试 二、WEB自动化测试工具 三、SeleniumPython环境搭建 1. 安装Python解释器 2. 安装Selenium库 3. 下载浏览器驱动程序 4. 配置环境变量 四、WEB自动化测试实战 1. 编写测试脚本 2. 使用Page Object模式 3. 使用数据驱动测试 五、总结 …

【PowerDesigner】一款超好用的E-R图工具,快速构建出高质量的数据库结构,提高开发效率和代码质量

博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: Mysql从入门到精通 近期目标:写好专栏的每一篇文章 文章目录…

IPsec IKE第一阶段主模式和野蛮模式

国密标准GMT 0022-2014 IPSec VPN 技术规范,IPsec IKE过程中交换类型的定义将主模式Main mode分配值为2,快速模式-quick mode分配值为32。标准中并没有提现分配值为4的交换类型。在实际应用中,IKE第一阶段经常会出现交换类型为4的情况&#x…

留守儿童爱心网站

摘要 随着留守儿童爱心管理的不断发展,留守儿童爱心网站在现实生活中的使用和普及,留守儿童爱心管理成为近年内出现的一个热门话题,并且能够成为大众广为认可和接受的行为和选择。设计留守儿童爱心网站的目的就是借助计算机让复杂的管理操作…

【C++】-关于类和对象的默认成员函数(中)-拷贝构造函数和赋值运算符重载函数

💖作者:小树苗渴望变成参天大树 ❤️‍🩹作者宣言:认真写好每一篇博客 💨作者gitee:gitee 💞作者专栏:C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点…

带你玩转单向链表(学习必备)

本文概要 本篇文章主要介绍数据结构中单向链表各种操作,适合有C语言基础的同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧! 🌟🌟🌟个人简介🌟&…

Redis入门到实战(实战篇)

Redis基础篇 实战篇Redis 开篇导读 亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来一起看看实战篇我们要学习一些什么样的内容 短信登录 这一块我们会使…

携程:一个被严重低估了的在线旅游平台?

来源:猛兽财经 作者:猛兽财经 携程和旅游行业面临的不利因素依然存在 在疫情期间,由于全球范围内的旅行受到了限制,所以整个旅游行业都受到了巨大打击。休闲旅游和商务旅行也陷入了停顿,此后一直在缓慢恢复。 而当疫情…

Java8流式操作——最终操作

什么是最终操作? 当我们通过最终方法对流对象进行操作,说明stream流操作也完成,最后我们将对象汇总成一个结果(总数、对象、集合……) 方法 collect:将Stream中的元素汇总(转化)成…

探索三维世界【2】:Three.js 的 Texture 纹理

缤纷三维世界大揭秘:探索 Three.js 的 Texture 纹理 1、Texture纹理2、TextureLoader 纹理加载器2.1、创建纹理加载器2.2、纹理属性设置2.3、设置纹理渲染2.4、打光 3、完整代码与展示 1、Texture纹理 Texture 是 three.js 中的“纹理”概念。纹理是指将一张图像映…

ESP8266基于Lua开发使用U8g2模块驱动 i2c ssd1306 OLED显示

ESP8266基于Lua开发使用U8g2模块驱动 i2c ssd1306 OLED显示 📍相关篇《ESP8266基于Lua开发点灯示例》 📖U8g2对应的API接口函数:https://nodemcu.readthedocs.io/en/release/modules/u8g2/ 📺驱动显示效果: &#…

Winform从入门到精通(38)——StatusStrip(史上最全)更新中

一、属性 1、Name 获取StatusStrip控件对象 2、AllowDrop 允许用户拖拽数据到控件上 3、AllowItemReorder 当用于按下alt键时,是否允许对项进行排列,如下图: 4、AllowMerge 5、Anchor 6、AutoSize 7、BackColor 设置StatusStrip的背景色 8、BackgroundImage 设置背…

解决wordpress 没有“add new“按钮

文章目录 问题描述解决方案两个参数的详细解释DISALLOW_FILE_EDITDISALLOW_FILE_MODS 问题描述 新安装的wordpress发现没有“add new“按钮,很奇怪。 解决方案 修改wp-config.php文件,增加如下两行即可修复问题: define(‘DISALLOW_FILE_E…