【网络原理】❤️Tcp 连接管理机制❤️ “三次握手” “四次挥手”的深度理解, 面试最热门的话题,没有之一, 保姆式教学 !!!

news2024/11/25 12:59:03

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

引言

在数字化时代,我们几乎无时无刻不在与网络进行着无声的对话。无论是在线购物、视频会议,还是简单的网页浏览,背后都离不开一种看似简单却又极其复杂的技术—— 传输控制协议(TCP)。

它确保了数据的可靠传输,是网络通信的基石。然而,TCP连接的建立和终止过程,即所谓的 “三次握手"和"四次挥手”,却充满了技术细节和策略考量。本文将深入探讨这一过程,揭示其背后的原理和重要性,为读者提供一个全面的视角,以理解网络通信的这一核心机制。

目录

  1. 三次握手和四次握手的初识

  2. 三次握手

  3. 四次挥手

一. 三次握手和四次挥手的初识

在Tcp 中有一种特殊的连接管理机制, 我们称之为 “三次握手, 四次挥手”

在Tcp中, 握手和挥手只是代表 连接 的含义。

上回我们说到, 对于网络上的连接来说:

连接并不是物理上的用绳子来连接。

而是 双方都保存对方信息 称之为 “连接”

双方都不保存对方信息 称之为 “断开连接”

三次握手 就是 建立连接 的过程, 四次挥手 就是 断开连接 的过程。

下面跟着小编来深度学习面试常考内容——三次握手,四次挥手吧~ 💖 💖 💖 💖

二. 三次握手

1. 三次握手的流程步骤

在这里插入图片描述

首先,客户端向服务器发送请求: 会发送一个 Syn 的标志位 的数据报, 并设置 syn = 1 ,就是告诉服务器 这个客户端想和它进行连接

于是, 当服务器接收到了 客户端发来是 Syn 的数据报, 就会开始 建立连接 , 并且返回一个 应答报文 Ack 和 一个 Syn 的数据报。 发送 Ack 是代表反馈给 客户端已经接收你需要连接的请求了, 发送 Syn 是告诉客户端: 服务器也想和该客户端建立连接

由于这两次 SynAck 是接收到 客户端发来的 Syn 时就会发送的, 所以 Tcp 就会把 这两次发送合并成一次发送, 以此提高 连接效率

最后当接收到对方的 Ack 就感知到了 对方已经连接好了 ,同时接收到了 Syn 并且自己也连接好就返回 Ack 给对方, 让对方也感受到 两端都连接好了

鱼式疯言

补充细节

  1. 上面的栗子是客户端作为发送方, 但是在一些情况下, 服务器也可以作为发送方。

  2. syn 全英文: synchronized 翻译: 同步化

多线程 中, 是 含义, 用于解决 线程安全问题

Tcp 中, 是 同步化 的含义, 小编的理解就是 ; 用于 同步连接 的消息

  1. 有小伙伴问了, 如果是在 三次握手 的期间, 出现了 丢包情况 , 依然还是会进行 超时重传的 , 仍然是可以保证三次握手的 正常进行 的。

2. 三次握手的 “三次”

有小伙伴就问了?

为啥 三次握手,不是两次握手 呢?

其实从上面的流程中, 可以看出 三次握手

第一次: 客户端 发送 Syn 的数据包来表示希望服务器进行连接, 可以认为是 连接的开始

第二次: 服务器返回 Ack 并且发送 Syn 希望对端连接么,可以认为是 连接的进行

第三次: 客户端确定接受了上述的 所有需求并完成 ,所以返回 Ack 表示 , 可以认为的是 连接的结束

三者缺一不可, 一旦 缺少一步 , 连接很有 可能会失败

为啥是 三次握手, 不是四次握手 呢?

主要原因还是因为第二次的发送过程, 系统内核为了提升效率,就把需要反馈给 客户端的 Ack 和 发送给 客户端请求连接的 Syn

就好比小爱同学很懒, 有一天她在看电视, 突然觉的很渴, 但是自己又不想起来, 就等下次。 等他想上厕所了, 于是就 上完厕所顺便喝水 , 从而 提高效率

就像上面
这里就可以多 减少一次发送的次数 , 从而 加快两个端口的连接

3. 三次握手的优势

  1. 投石问路 , 用于保证通信链路的 完整传输

栗子说明

不知道小伙伴们有没有坐过早班的 第一趟地铁 , 是不是都是没什么人呢!

但是早班的第一趟地铁并不是第一趟的, 在第一趟之前, 还有一趟 提前开一趟空车

开空车的原因: 用于 检查通信链路的完整保证链路不出意外 , 如果是空车还能 及时的调整 , 如果承载有人的车就会调整就很不方便了, 以此提前的空车就起到 投石问路 的效果

  1. 确定通信双方的 发送能力接收能力

在这里插入图片描述

假设有一天我和女神 联机打游戏

首先小编作为发送方, 女神作为接收方

我: 喂,听得到吗?

当女神听到这句话,就知道了,我的麦克风和女神的耳机是没有问题的

然后女神就要回了, 在回我的同时也可以顺便检查女神的麦克风和我的耳机是否正常。

女神: 听的到, 你听得到我吗?

当我听到这句话了,前面的我问的是, 听得到吗? 当她回我听得到, 说明我的麦克风和她的耳机都是没有问题的, 然后她再问我听得到吗? 于是我听到了, 说明 她的麦克风和我的耳机都是没有问题的。

我说: 听得到,我们可以说话了。

最后都说明 两边的耳机和麦克风都没有问题 , 最后我要把这个消息传送回女神, 就可以让两边都感知到 连接没有问题正常通信 了。

这里的 耳机 就代表 接收能力, 这里的 麦克风 就代表 发送能力

通过上面的 三次握手 的方式, 就能形象的体现确认 发送能力和接收能力 是否 良好

  1. 防止前朝的剑斩当朝的官即: 防止 过时数据 的传输。

这句话就是说, 防止因为中间数据包传输 停滞了很久才返回

在这里插入图片描述

上述过程就是,防止有一段 数据包中途迷路 了, 当经过一段期间,

在此的期间,就会出现了 两台主机的断连, 又出现了 两台主机重新连接 , 但是很有 可能在不同的应用程序 上运行了。

而在三次握手期间,每一次连接都会更新不同的 数据序号包 , 只需要比对 发送过来的数据序号包当前端口的序号 差异是不是很大, 如果很大的话, 就说明是 前朝 的数据, 就进行 直接丢弃

鱼式疯言

补充说明

对于上面提及的 序列号, 并不是说都是从 1 开始的, 而是 每次连接 都是会设置 不同的序列号 , 以此来 防止过时数据 的发送。

三. 四次挥手

在这里插入图片描述

1. 四次挥手的流程步骤

在这里插入图片描述

我们知道四次挥手的过程其实就是 关闭连接 的过程

我们假设主动断开连接的一方为 客户端 , 被动断开连接的一方为 服务器

首先: 由客户端 先设置 fin 的标志位为 1并发送 给服务器, 希望服务器断开连接。

然后服务器接受到了 客户端 fin 的标志位为 1 的报文, 于是就触发了 ack 返回给客户端以确认 fin 的发送。

随后服务器也发送一个 fin 以此来表示 服务器也 希望客户端同时也关闭连接

最后 客户端接收到了 , 也返回一个带有 ack 的报文。

鱼式疯言

服务器和客户端都有可能成为 主动发送到一方 或者 被动发送的一方

2. 四次挥手的 “四次”

有小伙伴问了, 为啥这次偏偏是四次挥手呢?

其实在断开连接的过程中, finack 不同的是

ack系统内核 去调度的, 当有一端 有报文发送时 , 就会触发 ack 报文的返回给发送的那一方。

fin应用程序 调度的, 只有当 程序执行到 close() 方法/ 进程结束时 , 才会发送 fin

上次的调用过程是不一样的, 所以触发的时间是很有可能不相同, 很有可能被动关闭的一方先接收到 fin 就直接返回ack , 而程序需要执行多行代码, 才会执行到 close() , 才会发送 fin

所以两者一般情况下是不能合并的, 所以才有 中间两次的发送

鱼式疯言

一般情况下不能合并, 并不是说一定不能合并 , 在一些特殊的协议中就更有可能出现 三次挥手 的情况。

3. 连接的不同状态

在这里插入图片描述

在不同连接的状态下, Tcp也会呈现的不同状态。 用于确保 建立连接关闭连接 的可靠。

下面小编重要是介绍以下几个状态: ESTABLISHED , CLOSE_WAIT , TIME_WAIT

<1>. ESTABLISHED

这是两端都 都建立好了连接 , 可以进行业务上的 正常通信 的状态。

也就相当于双方都接通好了电话, 可以 正常打电话 的状态。

<2>. CLOSE_WAIT

这是 被动关闭连接的一端 , 就会进入这个状态, 接收到 fin 之后, 等待代码执行到 close 方法。

鱼式疯言

如果发送 服务器这端 出现了大量的 CLOSE_WAIT 的状态, 就表示代码 执行不到 close 方法 , 就说明服务器这端代码出现了 BUG 了。

<3>. TIME_WAIT

这是 主动关闭连接的一端 , 就会进入这个状态, 就进入 等待系统设置好的一段时间 , 延迟过了 系统设置好的时间 才执行 close 方法 。

在这里插入图片描述

之所以设置一个等待的时间, 就是为了防止返回到 ack 丢包 , 如果一旦 ack 丢包, 当 主动断开连接的一方就会在系统设置好的一定时间里等待 , 对端就会进行 重传操作重新发送 fin , 就需要主动断开连接的一方 重新发送 ack

对于能不能重新发送ack 的前提是, 这端是还没断开连接的, 所以主动连接的一方就需要在一定时间内等待, 保证 连接断开的完整性

鱼式疯言

一般而言
设置的等待时间为: 2*MSL

MSL 即为 数据包在网络通路传递过程中所需要消耗的最大时间, 所以 2 倍的MSL 是可以检查 ack 是否被接收的

总结

  • 三次握手和四次挥手的初识: 三次握手是 建立连接 的过程, 四次挥手是 断开连接 的过程, 连接就是通信双方保存对方的信息的过程的理解。

  • 三次握手: 三次握手的过程, 以及三次握手为何是三次, 和它的优势: 投石问路确定通信双方接收和发送的能力防止前朝的剑斩当朝的官

  • 四次挥手: 四次挥手的过程, 已经四次挥手为何是四次, 最后就是 断开连接前后过程中不同的状态表示。

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

在这里插入图片描述

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

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

相关文章

杰发科技Bootloader(3)—— 基于7801的APP切到Boot

为了方便在APP中跳转到Boot重新进行升级&#xff0c;有两种办法&#xff0c;7840同样可以使用。 1. 调用reset接口进行复位&#xff0c;复位后会先进Boot&#xff0c;再自动跳转到App。 NVIC_SystemReset(); 2. 直接使用跳转指令&#xff0c;参考Boot跳转到App代码&#xff0…

有哪些常用的企业统一门户?为何选择移动应用管理平台WorkPlus

企业统一门户是为了解决企业内部应用分散、管理繁琐的问题&#xff0c;提供集成化的应用平台&#xff0c;旨在提高员工的工作效率和便利性。而在众多的企业统一门户中&#xff0c;作为一款领先的移动应用管理平台&#xff0c;WorkPlus备受青睐。本文将介绍一些常用的企业统一门…

Sentinel 控制界面

一、下载 可视化jar 二、cmd 启动 jar java -Dserver.port8718 -Dcsp.sentinel.dashboard.server127.0.0.1:8718 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.2.jar 页面访问&#xff1a; http://localhost:8718/#/dashboard/

Elasticsearch Suggesters 自动补全长度设置

问题&#xff1a;在用户输入之后联想词返回长度默认为50&#xff0c;导致返回结果不完全 原因&#xff1a;completion 字段索引时允许存储的文本长度受 max_input_length 参数控制&#xff08;默认为 50 字符&#xff09;。可以在 mapping 中调整这个值 解决&#xff1a;“max…

【西电电装实习】焊接台组、焊接技巧

前言 工训中心 - 电装实习&#xff0c;进行实操的笔记 --- 一、焊台 二、焊枪大功率的握法&#xff08;反握法&#xff09; 三、余锡擦拭 四、pcb板与焊盘 五、焊接技巧 先加热焊盘&#xff0c;再上锡&#xff08;不能不加热焊盘&#xff0c;让锡往下漏&#xff09;上锡的时…

首届世界风筝创意大赛专家委员会成立 艺术大咖共话“风筝文化”

9月6日上午&#xff0c;世界风筝公园首届世界风筝创意大赛专家委员会成立暨座谈会在世界风筝公园召开。来自清华大学、中央音乐学院、中国美术学院等院校的专家学者及国际知名艺术家、设计师齐聚一堂&#xff0c;共同成立大赛专家委员会&#xff0c;并探讨以风筝为主题的艺术创…

简单的springboot log4j2日志配置

简单的springboot log4j2日志配置 1.简介 Log4j2 是 Apache Software Foundation 开发的一个日志记录工具&#xff0c;它是 Log4j 的后续版本&#xff0c;并且在多个方面进行了改进。以下是 Log4j2 的一些关键特性&#xff1a; 性能提升&#xff1a;Log4j2 在设计上做了很多优…

内裤洗衣机哪个牌子好又实惠?诚意盘点五款绝佳内衣洗衣机!

在当今繁忙的生活中&#xff0c;内衣洗衣机已成为我们日常生活中不可或缺的家电。但是&#xff0c;面对市场上众多品牌的内衣洗衣机&#xff0c;那么&#xff0c;到底内衣洗衣机哪个牌子好&#xff1f;本次我将在这篇文章中探讨内衣洗衣机的选购策略&#xff0c;以帮助大家找到…

Java并发编程实战 10 | 线程安全问题

什么是线程安全&#xff1f; 《Java并发实践》的作者 Brian Goetz 对线程安全的定义是&#xff1a;当多个线程访问同一个对象时&#xff0c;如果无需考虑这些线程在运行时的调度策略和交替执行顺序&#xff0c;也不需要进行额外的同步处理&#xff0c;仍然能够得到正确的结果&…

C语言--12字符串处理函数

函数strstr 函数strchr与strrchr 注意&#xff1a; 这两个函数的功能&#xff0c;都是在指定的字符串 s 中&#xff0c;试图找到字符 c。strchr() 从左往右找第一个&#xff0c;strrchr() 从左往右找最后一个。字符串结束标记 ‘\0’ 被认为是字符串的一部分。 函数strlen 示例…

一款免费开源功能丰富的看图软件NeeView

NeeView 是一款功能丰富的图像查看软件&#xff0c;它以其独特的浏览体验和广泛的支持格式受到用户的欢迎。NeeView 不仅可以浏览普通的图像文件&#xff0c;还能够查看压缩包内的图片、预览PDF文档甚至播放视频文件。 NeeView 的主要特点&#xff1a; 多格式支持&#xff1a…

《人工智能安全治理框架》1.0版

人工智能是人类发展新领域&#xff0c;给世界带来巨大机遇&#xff0c;也带来各类风险挑战落实《全球人工智能治理倡议》&#xff0c;遵循“以人为本、智能向善”的发展方向&#xff0c;为推动政府、国际组织、企业、科研院所、民间机构和社会公众等各方&#xff0c;就人工智能…

无人机之穿越机的类型

穿越机&#xff0c;即FPV Drone或Racing Drone&#xff0c;是一种主要通过第一人称视角&#xff08;FPV&#xff09;进行操作的无人机。这种无人机通常配备有四个电机和相应的飞控系统&#xff0c;使其具有极高的飞行自由度和速度。穿越机的类型多样&#xff0c;可以从不同角度…

GD32E230程序烧录和开发环境使用介绍

GD32E230程序烧录和开发环境使用介绍 从GD32提供的资料来看&#xff0c;支持IAR、Keil、EmbeddedBuilder&#xff1b;目前该软件还是比较粗糙&#xff0c;个人上手体验不佳&#xff0c;面板菜单按键烧操作一下&#xff0c;动不动就卡死&#xff0c;仅支持gdlink调试器。 Embed…

第100+24步 ChatGPT学习:概率校准 Beta Calibration

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

元宇宙的崛起:重塑2024年游戏行业的新趋势

最早可以追溯到1994年&#xff0c;当时出现了世界上第一个轴测图界面的多人互动社交游戏《Web World》。‌这个游戏允许用户实时聊天、旅游、改造场景&#xff0c;开启了游戏中的UGC模式&#xff0c;可以视为元宇宙游戏的雏形。 2021年Roblox元宇宙的概念股上市&#xff0c;Fac…

学生护眼台灯哪个品牌比较好?分享五款效果好的学生护眼台灯

现在孩子的很多兴趣班和课后辅导班都是在线上举行&#xff0c;通常对着手机电脑长时间。电子产品有大量蓝光和辐射&#xff0c;会伤害到孩子的眼睛。但为了学习&#xff0c;也是没办法。护眼台灯的出现可以让孩子们的眼睛得到保护&#xff0c;防止蓝光对眼睛的伤害。学生护眼台…

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹&#xff0c;比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”&#xff0c;打开命令提示符&#xff0c;进入到发布代码目录 命令行启动.netcore项目的命令为: dotnet 项目启动文件.dll --urls"ht…

CSP-J基础之数学基础 计数原理与排列组合 一篇搞懂

文章目录 前言加法原理加法原理是什么使用场景 乘法原理举个例子总结 区别加法原理乘法原理总结 乘法原理的运用排列组合**排列****组合**总结 计算排列的可能种数举个例子数学定义数学公式应用公式例子应用 总结全排列举个例子数学定义数学公式作用 组合数学定义组合的公式举个…

系统安全设计规范(Word完整版)

1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完整性检查 1.…