【探索Linux】P.39(传输层 —— TCP的三次 “握手” 和四次 “挥手” )

news2024/9/25 1:24:03

在这里插入图片描述

阅读导航

  • 引言
  • 一、TCP的三次握手
    • 1. 简介
    • 2. 图解三次握手
    • 3. 名词解释
      • (1)SYN(同步序列编号)包
      • (2)SYN-ACK(同步确认)包
      • (3)ACK(确认)包
    • 4. 三次握手的步骤总结
    • 5. 为什么要三次握手,两次或者四次可以吗?
      • (1)为什么要三次握手?
        • ⭕防止旧的重复连接请求
        • ⭕确保连接的双向性
        • ⭕确保双方的初始序列号同步
        • ⭕避免不必要的连接建立和SYN洪泛攻击
      • (2)为什么两次握手不适用?
        • 🚩无法确认接收能力
        • 🚩无法防止重复连接
        • 🚩序列号同步问题
        • 🚩无法避免资源浪费
        • 🚩安全性问题
        • 🚩无法确认双方状态
      • (3)为什么四次或多次握手不适用?
        • 🍟效率降低
        • 🍟资源浪费
        • 🍟复杂性增加
        • 🍟无额外好处
  • 二、TCP的四次挥手
    • 1. 简介
    • 2. 图解四次挥手
    • 3. 名词解释
    • 4. 四次挥手的特点
    • 5. 为什么 TCP 关闭连接为什么要四次挥手而不是三次挥手?
  • 温馨提示

引言

在网络通信的世界里,TCP协议以其可靠性和效率而闻名。今天,我们将更进一步,揭开TCP协议中的两个核心过程:三次握手和四次挥手。这两个过程不仅确立了数据传输的开始和结束,而且确保了连接的稳定性和数据的有序交换。让我们开始这段探索之旅,深入了解TCP协议如何通过这三个简单的步骤来建立一个稳固的通信桥梁,以及如何通过四个优雅的步骤来优雅地结束通信会话。

一、TCP的三次握手

1. 简介

为了确保客户端与服务器之间能够建立一个稳定且可靠的连接,TCP协议在连接建立阶段实施了三次握手过程。这个过程至关重要,因为它通过三次交互来验证双方的发送和接收功能是否正常工作。简而言之,三次握手确保了以下两点:

  1. 客户端能够发送数据给服务器,并且服务器能够成功接收这些数据
  2. 服务器能够发送数据给客户端,并且客户端能够成功接收这些数据

通过这种确认机制,TCP协议能够建立一个双向通信的可靠通道,为数据传输的稳定性和效率打下基础。

✅举一个生活中的例子大家会更好理解一点,场景:小杨想要将一批文件递交给经理,于是发生了以下对话:

小杨:“经理,您现在有空吗?我这里有一些文件需要您审阅。”(这相当于TCP的第一次握手,小杨询问经理是否准备好接收文件。)

经理:“有空,我在办公室,你可以直接过来。”(这相当于TCP的第二次握手,经理确认自己已经准备好,并且告知小杨可以开始递交文件。)

小杨:“明白了,我马上过来。”(这相当于TCP的第三次握手,小杨确认了经理的回复,并告知自己即将开始递交文件的动作。)

通过这样的对话,双方确认了彼此都准备好进行文件的递交和接收,确保了信息的顺利传递。这个过程与TCP三次握手的原理相似,都是通过一系列的确认来建立一个可靠的通信过程。

2. 图解三次握手

在这里插入图片描述

3. 名词解释

(1)SYN(同步序列编号)包

⭕客户端选择一个初始序列号(ISN)并发送一个SYN包到服务器。这个包中,SYN标志位被设置为1,表示希望建立连接,同时客户端的ISN被发送给服务器。

(2)SYN-ACK(同步确认)包

⭕服务器接收到客户端的SYN包后,如果同意建立连接,会发送一个SYN-ACK包作为响应。服务器同样选择一个初始序列号,并在包中设置SYN和ACK标志位为1。ACK标志位表示这是一个对客户端SYN包的应答,并且包含了服务器的确认序列号(ACK),通常是客户端ISN加1。

(3)ACK(确认)包

⭕客户端接收到服务器的SYN-ACK包后,会发送一个ACK包来完成握手过程。这个包中,ACK标志位被设置为1,并且包含服务器ISN加1的确认序列号,表明客户端已经接收到并确认了服务器的SYN-ACK包。

4. 三次握手的步骤总结

  • 客户端 发送一个SYN包,告诉服务器:“我准备好了,你可以给我发送数据了。”
  • 服务器 收到SYN包后,回复一个SYN-ACK包,表示:“我准备好了,你可以给我发送数据了,这是我的初始序列号。”
  • 客户端 收到SYN-ACK包后,发送一个ACK包,表示:“我收到了你的初始序列号,现在我们可以开始通信了。”

5. 为什么要三次握手,两次或者四次可以吗?

(1)为什么要三次握手?

⭕防止旧的重复连接请求

如果网络延迟导致旧的连接请求在新的连接请求之后到达,三次握手可以确保旧的连接请求由于序列号不匹配而被忽略,从而避免建立不必要的连接。

⭕确保连接的双向性

三次握手确保了连接是双向的,即客户端可以向服务器发送数据,服务器也可以向客户端发送数据。

⭕确保双方的初始序列号同步

TCP通信依赖于数据包的序列号来保证数据的顺序和完整性。三次握手过程中,客户端和服务器交换初始序列号,确保双方对数据传输的起始点达成共识:

  • 序列号同步:通过三次握手,双方可以确认对方的序列号,保证数据传输的正确性和顺序性。
⭕避免不必要的连接建立和SYN洪泛攻击

TCP的三次握手还有助于避免不必要的连接建立,节约资源,并防止SYN洪泛攻击:

  • 资源节约:三次握手确保只有在双方都准备好时才建立连接,避免了因误判而创建的不必要连接。
  • 防止SYN洪泛攻击:通过确保连接请求的有效性,三次握手机制减少了服务器资源的不必要消耗,提高了安全性。

(2)为什么两次握手不适用?

两次握手不足以建立一个稳定和可靠的TCP连接,因为它不能确保双方的接收和发送能力,也不能有效防止重复连接和资源浪费,同时还增加了受到网络攻击的风险。

🚩无法确认接收能力
  • 在两次握手中,客户端发送SYN包以发起连接请求,服务器响应SYN-ACK包以确认接收到请求并准备好发送数据。然而,这个过程并没有给服务器一个机会来确认客户端是否已经准备好接收数据。
🚩无法防止重复连接
  • 如果客户端的连接请求因为网络延迟而没有及时到达服务器,客户端可能会重新发送一个SYN包。如果两次握手,服务器可能会对每个SYN包都建立一个连接,导致多个不必要的连接建立。
🚩序列号同步问题
  • TCP使用序列号来确保数据包的顺序和完整性。三次握手允许客户端和服务器交换各自的初始序列号,而两次握手则无法完成这一同步过程。
🚩无法避免资源浪费
  • 如果服务器在两次握手后开始发送数据,但客户端由于某些原因(如网络问题或客户端故障)未能接收到这些数据,服务器可能会浪费资源在无效的连接上。
🚩安全性问题
  • 两次握手可能使服务器更容易受到SYN洪泛攻击,攻击者可以发送大量的SYN包,使服务器创建大量半开放连接,消耗服务器资源。
🚩无法确认双方状态
  • 两次握手无法确保双方都处于活跃状态并准备好进行通信。三次握手提供了双方确认对方状态的机会。

(3)为什么四次或多次握手不适用?

🍟效率降低
  • 增加握手次数会延长连接建立的时间,导致通信效率降低。TCP协议追求的是快速建立连接并开始数据传输。
🍟资源浪费
  • 每次握手都需要消耗网络资源和处理能力。额外的握手会增加服务器和客户端的负载,尤其是在高并发场景下,这可能导致资源的不必要浪费。
🍟复杂性增加
  • 增加握手次数会使得协议更加复杂,这不仅增加了实现的难度,也增加了出错的可能性。
🍟无额外好处
  • 三次握手已经能够确保双方的接收和发送能力,以及序列号的同步,额外的握手步骤并不会带来额外的好处。

综上所述,TCP的三次握手是一个经过精心设计和优化的过程,它平衡了效率、可靠性和安全性,而四次或多次握手则会带来不必要的复杂性和资源消耗,没有明显的益处。

二、TCP的四次挥手

1. 简介

🚨建立TCP连接需要三次握手,终止TCP连接需要四次挥手,连接的终止通常需要四次握手,这个过程被称为TCP的"四次挥手"。

  1. 第一次挥手:主动关闭方(可以是客户端或服务器)发送一个FIN(结束)标志位被设置为1的TCP段,用来关闭主动方到被动方的数据传输。这表示主动方已经没有数据要发送了,但仍然可以接受数据。

  2. 第二次挥手:被动关闭方接收到FIN后,发送一个ACK(确认)标志位被设置为1的TCP段,作为对FIN的确认。这表示被动方已经知道主动方没有数据要发送了。

  3. 第三次挥手:被动关闭方发送一个FIN标志位被设置为1的TCP段,请求关闭其到主动方的数据传输。

  4. 第四次挥手:主动关闭方接收到这个FIN后,发送一个ACK标志位被设置为1的TCP段作为对被动方FIN的确认。至此,TCP连接被完全关闭。

在整个过程中,每个FIN和ACK都需要被对方确认,确保双方都清楚连接即将关闭。这个过程确保了TCP连接的可靠性和数据传输的完整性。四次挥手是TCP协议的一个重要特性,它允许双方在关闭连接时都能清楚地知道对方的意图,从而避免数据丢失或错误。

✅举一个生活中的例子大家会更好理解一点,场景:小杨已经将一批文件递交给经理准备辞职离开公司的时候,发生了以下对话:
小杨的辞职意向(第一次挥手):
小杨对经理说:“经理,这些文件的内容您也已经看完了,我决定离开公司。” 这相当于TCP连接中的主动方发送一个FIN(结束)标志位,表示小杨已经完成了他的工作,并且希望结束与公司的联系。

经理的初步回应(第二次挥手):
经理回答:“好的,我知道了,你离开吧。” 这相当于TCP连接中的被动方发送一个ACK(确认)标志位,表示经理已经收到了小杨的辞职意向,并同意结束当前的工作关系。

经理的再次考虑请求(第三次挥手):
经理随后说:“你不再考虑一下吗?” 这相当于TCP连接中的被动方发送另一个FIN标志位,表示经理希望重新评估当前的情况,可能是出于对小杨离职可能带来的影响的考虑。

小杨的最终决定(第四次挥手):
小杨坚定地回答:“我已经考虑好了。” 这相当于TCP连接中的主动方发送最后一个ACK标志位,表示小杨已经坚定了自己的决定,双方都同意结束工作关系,可以正式关闭连接。

2. 图解四次挥手

在这里插入图片描述
四次挥手的目的是确保双方都能完全接收到对方的数据,并且在双方都准备好关闭连接时,才正式关闭TCP连接。这个过程中,每个FIN都需要一个ACK作为确认,确保了连接的可靠关闭。

3. 名词解释

  1. 第一次挥手(FIN)

    • 客户端完成数据发送后,决定关闭连接,并向服务器发送一个FIN(结束)标志位被设置为1的TCP段。这表示客户端已经完成发送数据,请求关闭连接。
  2. 第二次挥手(ACK)

    • 服务器接收到客户端的FIN后,发送一个ACK(确认)标志位被设置为1的TCP段作为响应。这个ACK是对客户端FIN的确认,表示服务器已经知道客户端准备关闭连接。
  3. 第三次挥手(FIN)

    • 服务器在发送完剩余数据后,也决定关闭连接,向客户端发送一个自己的FIN标志位被设置为1的TCP段。这表示服务器也完成了数据发送,请求关闭连接。
  4. 第四次挥手(ACK)

    • 客户端接收到服务器的FIN后,发送最后一个ACK标志位被设置为1的TCP段作为响应。这个ACK是对服务器FIN的确认,表示客户端已经知道服务器准备关闭连接,并且双方都同意关闭连接。

4. 四次挥手的特点

  • 不同步关闭:客户端和服务器可以几乎同时开始关闭连接,但这不是必须的。一方可能在另一方发送FIN之前就已经准备好发送自己的FIN。

  • TIME_WAIT状态:在客户端发送最后一个ACK之后,它会进入TIME_WAIT状态,等待足够的时间以确保服务器接收到最终的ACK。这是为了防止服务器由于网络延迟而未能接收到最终的ACK,导致它重新发送FIN。

  • 半关闭状态:在服务器接收到客户端的FIN但还没有准备好发送自己的FIN时,连接会进入半关闭状态。在这种状态下,客户端已经不能发送数据,但服务器仍然可以发送数据。

5. 为什么 TCP 关闭连接为什么要四次挥手而不是三次挥手?

当TCP服务器接收到来自客户端的FIN(结束)报文段时,它可能还有剩余的数据需要发送给客户端。因此,服务器不能立即关闭连接。作为对客户端FIN报文的响应,服务器首先会发送一个ACK(确认)报文段,表示它已经接收到了客户端的关闭请求。

尽管已经开始关闭过程,服务器仍然可以继续向客户端发送任何剩余的数据。在所有待发送的数据都成功传输之后,服务器会向客户端发送自己的FIN报文段,这表明服务器已经完成数据传输,并准备关闭它的发送通道。

客户端接收到服务器的FIN报文后,会发送一个ACK报文作为应答,确认它已经接收到服务器的关闭请求。这个过程确保了客户端有机会接收和确认服务器发送的所有数据。

总结来说,TCP连接的关闭需要四次挥手,以确保数据的完整传输和确认,以及连接的有序关闭。这个过程允许服务器在关闭连接之前完成数据的发送,同时允许客户端确认接收到所有数据,并最终同意关闭连接。

温馨提示

感谢您对博主文章的关注与支持!如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C++编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新,不要错过任何精彩内容!

再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索Linux、C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!

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

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

相关文章

【CTF-Crypto】数论基础-02

【CTF-Crypto】数论基础-02 文章目录 【CTF-Crypto】数论基础-021-16 二次剩余1-20 模p下-1的平方根*1-21 Legendre符号*1-22 Jacobi符号*2-1 群*2-2 群的性质2-3 阿贝尔群*2-4 子群2-11 群同态2-18 原根2-21 什么是环2-23 什么是域2-25 子环2-26 理想2-32 多项式环 1-16 二次剩…

C语言的神髓

从应用的角度出发,聊一聊C语言最精妙的部分。 ​​​​​​​ ​​​​​​​

unity 2020版本packManager没有AssetBundles

1.Packages->manifest.json打开manifest.json文件 2.添加"com.unity.assetbundlebrowser": "1.7.0", 保存即可

Readiris PDF Corporate / Business v23 解锁版安装教程 (PDF管理软件)

前言 Readiris PDF Corporate / Business 是一款高性能的 OCR(光学字符识别)软件,能够帮助用户将纸质文档、PDF 文件或图像文件转换为可编辑和可搜索的电子文本。该软件提供专业级的功能和特性,非常适合企业和商业使用。使用 Rea…

win10 docker-compose搭建ELK日志收集

elk的威名大家都知道,以前前司有专门的人维护,现在换了环境,实在不想上服务器看,所以就摸索下自己搭建,由于现场服务器是需要类似向日葵那样连接,我还是把日志弄回来,自己本地filebeat上传到es中…

【软件测试】LoadRunner | 基本概念 | VUG录制脚本 | 脚本加强 | Controller设计测试场景 | Analysis产生测试报告

文章目录 LoadRunner一、LoadRunner的基本概念功能:原理:组成: 二、开发测试脚本1.VUG录制脚本1.WebTours系统WebTours的配置:成功访问后进行注册 2.脚本录制3.运行(回放) 2.脚本加强1.插入事务插入函数:注意事项 2.插…

如何计算摄像头一个像素对应的实际面积(热成像仪选型1)

1. 前言 热成像仪广泛应用于缺陷检测,那么如何选择热成像仪,以满足缺陷检测需求?关键问题是:如何知道热成像仪能不能拍摄清楚我的缺陷呢?,要回答这个问题,就需要计算出热成像仪在最佳拍摄距离下…

2.5 OJ 网站的使用与作业全解

目录 1 OJ 网站如何使用 1.1 注册账户 1.2 登录账户 1.3 做题步骤 2 本节课的 OJ 作业说明 3 章节综合判断题 4 课时2作业1 5 课时2作业2 6 课时2作业3 1 OJ 网站如何使用 〇J 是英文 Online Judge 的缩写,中文翻译过来是在线判题。当用户将自己编写的代码…

浪潮天启防火墙TQ2000远程配置方法SSL-V偏、L2xx 配置方法

前言 本次设置只针对配置V偏,其他防火墙配置不涉及。建议把防火墙内外网都调通后再进行V偏配置。 其他配置可参考:浪潮天启防火墙配置手册 配置SSLVxx 在外网端口开启SSLVxx信息 开启SSLVxx功能 1、勾选 “启用SSL-Vxx” 2、设置登录端口号&#xff0…

ROS1 DWB 与 ROS2 DWA 比较

“DWA算法(dynamic window approach)是移动机器人在运动模型下推算(v,w)对应的轨迹,确定速度采样空间或者说是动态窗口(三种限制);在速度空间(v,w)中采样多组速度,并模拟这些速度在一定时间内的运动轨迹,通过一个评价函数对这些轨迹打分,选取最优的轨迹来驱动机器人运动”。ROS…

如何利用桌面工作计划软件制定自己的to do清单?

在我们的日常生活和工作中,经常会遇到各种各样的任务需要完成。如果没有一个明确的计划和安排,我们可能会感到混乱和压力,而桌面工作计划软件可以帮助我们更好地管理和规划我们的时间和任务。今天,我们就来聊聊如何利用这些工具&a…

职升网:二级建造师考试科目分析!

二级建造师考试包含三个主要科目,它们分别是《建设工程施工管理》、《建设工程法规及相关知识》以及《专业工程管理与实务》。以下是这三个科目的详细考试内容: 建设工程施工管理: 此科目作为建造师考试的基础科目,其核心内容是…

走进linux

1、为什么要使用linux 稳定性和可靠性: Linux内核以其稳定性而闻名,能够持续运行数月甚至数年而不需要重新启动。这对于服务器来说至关重要,因为它们需要保持长时间的稳定运行,以提供持续的服务 安全性: Linux系统…

酷克数据亮相第13届PostgreSQL中国技术大会,获数据库杰出贡献奖

7 月 12 日,第 13 届 PostgreSQL 中国技术大会在杭州盛大开幕。本次大会以“聚焦云端创新,汇聚智慧共享”为主题,邀请了国内外 PG 领域众多行业大咖、学术精英及技术专家,共同探讨数据库领域的发展趋势、技术创新和实践经验。酷克…

本地部署,使用ColorizeArtistic_gen.pth大模型进行图像上色

目录 引言 技术背景 模型架构 本地部署 运行结果 实验结果与分析 应用实例 结论 参考文献 引言 图像上色(Image Colorization)是指将黑白图像转换为彩色图像的技术。在数字化时代,这种技术可以用于修复旧照片、增强艺术作品以及在各…

FDL与Kettle功能对比分析之定时任务DDL

开发者在进行数据处理任务时, 一旦源数据库的表结构发生变化,而目标数据库没有及时进行同步,就会导致任务执行失败。DDL同步就是用来解决这一问题,它会自动识别源表结构变化,并及时更新到目标数据库中,保障…

1. 变量、运算符、表达式、输入与输出习题

第一节题单 1. A B import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a,b;a sc.nextInt();b sc.nextInt();System.out.println(ab);} }608.差 604. 圆的面积 注意不能用float,float的精度不够…

智能硬件——0-1开发流程

文章目录 流程图1. 市场分析具体分析 2. 团队组建2. 团队组建早期团队配置建议配置一:基础型团队 (4人)配置二:扩展型团队 (6人)配置三:全面型团队 (7人) 3. 产品需求分析4. ID设计(Industrial Design, 工业设计)5. 结…

展望未来:在【PyCharm】中结合【机器学习】实现高效的图形化处理

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言一、PyCharm简介与配置1.1 PyCharm基础1.2 图形化库配置 二、机器学习项目中的数据可视化2.1 数据加载与预处理2.2 数据探索性可视化2.3 模型训练与结果可视化 三、PyCharm中的图形化调试四、高级…

如何追踪ping连接中的所有路由器的数量和IP

如何快速判断ping连接经过的路由器个数和IP? 方法一: ping命令会返回一个TTL,TTL(Time To Live)存活时间,一般初始值为64,每经过一个路由器就减一,当TTL为0时丢弃网络包&#xff0…