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

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

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

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

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

在这里插入图片描述

引言

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

总结

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

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

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

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

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

在这里插入图片描述

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐