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

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

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

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

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

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

在这里插入图片描述

引言

在数字化时代,我们几乎无时无刻不在与网络进行着无声的对话。无论是在线购物、视频会议,还是简单的网页浏览,背后都离不开一种看似简单却又极其复杂的技术—— 传输控制协议(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.rhkb.cn/news/425181.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为 HCIP 认证费用和报名资格

在当今竞争激烈的信息技术领域&#xff0c;华为 HCIP认证备受关注。它不仅能提升个人的技术实力与职业竞争力&#xff0c;也为企业选拔优秀人才提供了重要依据。以下将详细介绍华为 HCIP 认证的费用和报名资格。 一、HCIP 认证费用 华为HCIP认证的费用主要由考试费和培训费构成…

电气自动化入门01:电工基础

视频链接&#xff1a;1.1 电工知识&#xff1a;电工基础_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p2&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电能和电力系统 2.电工常用物理量及其应用 2.1电阻&#xff1a; 2.2电流&#xff1a; 2.3电压&…

【C++】入门基础(下)

Hi&#xff01;很高兴见到你~ 目录 7、引用 7.3 引用的使用&#xff08;实例&#xff09; 7.4 const引用 【第一分点】 【第二分点1】 【第二分点2】 7.5 指针和引用的关系&#xff08;面试点&#xff09; 8、inline 9、nullptr Relaxing Time&#xff01; ———…

系统 IO

"裸奔"层次&#xff1a;不带操作系统的编程 APP(应用程序) -------------------------------- Hardware(硬件) 特点&#xff1a;简单&#xff0c;应用程序直接操作硬件(寄存器) 缺点&#xff1a; 1. 搞应用开发的必须要了解硬件的实现细节&#xff0c;能够看懂原理图…

MyBatis 增删改查【后端 17】

MyBatis 增删改查 引言 MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射&#xff0c;将接口和 Java 的 POJOs (…

yolo训练出现Could not load library libcudnn_cnn_train.so.8问题及解决方法

问题场景&#xff1a; 训练yolov5或者yolov8时候会报错&#xff1a; Could not load library libcudnn_cnn_train.so.8. Error: /usr/local/cuda-12.1/lib64/libcudnn_cnn_train.so.8: uined symbol: _ZN5cudnn3cnn34layerNormFwd_execute_internal_implERKNS_7backend11Vari…

java技术栈介绍

Java技术栈是一个庞大而丰富的生态系统&#xff0c;它包含了从基础语言特性到高级框架、库和工具的整个集合。这个技术栈为开发者提供了构建各种类型应用&#xff08;包括企业级应用、Web应用、移动应用、大数据应用等&#xff09;所需的全部组件。以下是对Java技术栈的一个更详…

zip压缩包的格式不标准导致C++开源unzip.cpp解压失败问题的排查

目录 1、问题描述 2、初步排查 3、查看错误码512对应的含义 4、直接将解压zip包的函数拷贝过来,并将无法解压的zip取来,直接编写测试代码去调试解压过程,最终定位问题 4.1、调试开源unzip.cpp源码的准备工作 4.2、刚解压zip包中最顶层的文件夹就失败了 4.3、是不是zi…

深度学习之微积分预备知识点

极限&#xff08;Limit&#xff09; 定义&#xff1a;表示某一点处函数趋近于某一特定值的过程&#xff0c;一般记为 极限是一种变化状态的描述&#xff0c;核心思想是无限靠近而永远不能到达 公式&#xff1a; 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

【CSS】 Grid布局:现代网页设计的基石

引言 最近接到一个网页布局比较复杂的页面&#xff0c;看了半天还是决定用grid布局来写&#xff0c;记录一下 布局是构建用户界面的关键部分。CSS Grid布局提供了一种简单而强大的方式来创建复杂的网格布局&#xff0c;它让设计师和开发者能够更直观、更灵活地控制网页的结构。…

MySQL 子查询全解析:执行、性能影响与优化策略

在 MySQL 数据库的操作中&#xff0c;子查询是一个强大而又复杂的工具。今天&#xff0c;我们就来深入探讨 MySQL 如何执行子查询、其性能影响、优化方法以及哪些情况下应避免使用子查询。 一、MySQL 如何执行子查询 非相关子查询 非相关子查询也被称为独立子查询&#xff0c;…

网络安全学习(三)Hydra破解密码

接下来看一下Hydra工具&#xff0c;这是一个暴力破解密码的工具。 使用命令&#xff08;注意区分大小写&#xff09;。 hydra -L user.txt账号字典 -P pass.txt密码字典 IP地址 smb协议名称 hydra -l administrator指定账号 -P pass.txt密码字典 IP地址 smb协议名称 hydra -…

数据结构(Day13)

一、学习内容 内存空间划分 1、一个进程启动后&#xff0c;计算机会给该进程分配4G的虚拟内存 2、其中0G-3G是用户空间【程序员写代码操作部分】【应用层】 3、3G-4G是内核空间【与底层驱动有关】 4、所有进程共享3G-4G的内核空间&#xff0c;每个进程独立拥有0G-3G的用户空间 …

【Go】Go语言介绍与开发环境搭建

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

OpenHarmony鸿蒙( Beta5.0)智能加湿器开发详解

鸿蒙开发往期必看&#xff1a; 一分钟了解”纯血版&#xff01;鸿蒙HarmonyOS Next应用开发&#xff01; “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…

算法提高模板强连通分量tarjan算法

AC代码&#xff1a; #include<bits/stdc.h>using namespace std;typedef long long ll; const int MOD 998244353; const int N 2e5 10;//强联通分量模板 //tarjan算法 vector<int>e[N]; int n, m, cnt; int dfn[N], low[N], ins[N], idx; int bel[N];//记录每…

【C++】—— 内存管理

【C】—— 内存管理 1 C/C 的内存划分 1.1 C/C 的内存分布1.2 C/C 的内存分布练习 2 C语言 中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3 C 内存管理方式3.1 new / delete 操作内置类型3.2 new 和 delete 操作自定义类型3.2.1 new 和 delete 操作自定义类型基础…

【Java】了解线程 Thread 类的使用,如何创建、终止、等待一个线程以及获取线程的状态

线程是什么 线程是操作系统中调度的基本单位&#xff0c;是比进程更小的执行单元。线程在进程内部运行&#xff0c;共享该进程的资源&#xff0c;如内存和文件句柄&#xff0c;但每个线程都有自己的执行栈和程序计数器。 线程的主要特点包括&#xff1a; 轻量级&#xff1a;…

1.1 计算机网络基本概述

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言一、网络的基本概念二、集线器、交换机和路由器三、互连网与互联网四、网络的类型五、互连网的组成1. 边缘部分2. 核心部分 六、网络协议 前言 计算机网络是现代信息社会…

LVGL学习

注&#xff1a;本文使用的lvgl-release-v8.3版本&#xff0c;其它版本可能稍有不同。 01 快速入门 1.1 LVGL模拟器配置 day01-02_课程介绍_哔哩哔哩_bilibili LVGL开发教程 (yuque.com) 如果按照上述视频和文档中配置不成功的话&#xff0c;直接重装VsCode&#xff0c;我的…