【网络原理】❤️Tcp 核心机制❤️ 通晓可靠传输的秘密, 保姆式教学, 建议收藏 !!!

news2024/9/20 0:28:13

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

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

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

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

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

在这里插入图片描述

引言

在当今数字化时代,我们几乎无时无刻不在与网络进行交互。无论是在线购物、视频会议还是简单的社交媒体浏览,网络通信的可靠性对我们的日常生活至关重要。

然而,你是否曾经想过,是什么确保了这些数据在跨越千山万水的网络传输中不丢失、不出错?这就是TCP——传输控制协议——的神奇之处。本文将深入探讨TCP如何通过其独特的机制实现数据的可靠传输,确保我们的网络体验既流畅又安全。 💞 💞 💞 💞

目录

  1. Tcp的结构初识及可靠传输

  2. Tcp的确认应答机制

  3. Tcp的超时重传机制

一. Tcp的可靠传输

1. Tcp的结构初识

在这里插入图片描述

看到上面的Tcp报文结构图, 源端口和目的端口在Udp, 以及检验和在Udp的报文结构中已经有讲解过了, 还不理解的小伙伴可以在去回顾一下哦 💞💞💞💞

这次主要是初步了解下,Tcp的报头长度(头长度),== 序号和确认序号(下面细讲)== , 窗口大小(后面细讲)

2.Tcp的报头长度(头长度)

对于Tcp来说, Tcp的头长度 规定为 4个字节 , 注意是 字节不是比特位

但是和 Udp不同 的是 , Udp 八个字节 的长度是 固定的 , Tcp 的 四个字节长度可变的 , 因为在 Tcp的报头中还加了一个 保留位的扩展空间。

如果需要传递的网络数据 很多很大 的话, 就可以利用Tcp保留位中 扩展出来的空间 进行传输, 就可以减少出现 数据溢出 的现象, 达到 扩容 的效果 。

3. 可靠传输

小伙伴应该还不会忘记Tcp 主要有四个特点:

有连接可靠传输面向字节流全双工

其中 有连接面向字节流全双工 这三个特点在 实现Tcp 的回显服务器 的实现中已经体现出其特点了。

而最后一个: 可靠传输 将在本文中, 详细的讲解背后的 机制原理

在 Tcp的可靠传输中, 小编曾经讲过, 可靠传输 , 并不是说 百分百 的传输成功, 而是尽可能的使数据有效的传输。

通过以下两个方式能使数据更 有效准确 的传输:

让发送方确认接收方是否接收 到发送方传输过来的数据 !

如果接收方没有收到, 将 等待一段时间进行重传

而上面的两种方式就对应着 Tcp的两种传输机制

  • 确认应答

  • 超时重传


下面进入详解时刻

二. Tcp的确认应答机制

1. 确认应答的流程

在这里插入图片描述
如上图, 当主机A 给主机 传输 一段数据

首先要明确一点的是, 数据的传输是通过 序号 来确认的

而这里的序号 不是 一个一个的数字, 而是从 1 开始的一段 连续的字节流 的数据。

比如小编需要发送一个数据序号为 1~ 1000 , 那么我作为发送方发送的应该是 1~1000 这样的序号,这里我们称之为 序号

  • 而作为 接收方确认应答数据 , 就需要 返回给发送方 这个序号的 最后一个数字+ 1一个序号 , 就为 1001 。 这1001 我们就称之为 确认序号 。 发送方接收到了这样的序号就说明该数据已经 发送成功 了。
  • 当需要发送第二段数据的时候, 就从返回的数据 1001 开始的连续序号 开始发送 。 以此循环往复,达到 确认应答 的效果。
  • 由于Tcp的 面向字节流 的, 并 不是 按照第一条, 第二条的来编号的, 而是按照 字节流 , 第一个字节, 第 1000 字节来编号的。

每一个字节都有独立的编号, 字节和字节之间, 编号是连续的,递增的。

在这里插入图片描述

  • 按照 字节 这样的编号, 称之为: Tcp序号
  • 应答报文 (下文说明)中, 根据之前 收到的数据 进行 对应编排 的序号, 称之为: Tcp的确认序号

鱼式疯言

特殊情况

对于Tcp的序号/ 确认序号来说 最大是 64KB的空间, 也就是42亿九千万的最大数值。

如果一旦序号/ 确认序号的数值超过了 42亿九千万, 就会从 0 开始连续: 0-> 42亿九千万-> 0

2. 确认应答的标志位

在这里插入图片描述
以上是Tcp的不同的 标志位, 也是决定着Tcp 的 不同机制

而对于 确认应答 这个机制来说:

标志位就是上述的 Ack, 用来区分 普通报文应答报文

如果Ack 标记为 1 , 该报文为 应答报文 , 说明既含有 普通序号 , 同时也含有 确认序号

如果Ack 标记为 0 , 该报文为 普通报文 , 只含有 普通序号 ,而不含有 确认序号

鱼式疯言

细节补充

  1. 对于 应答报文 来说, 是 不携带载荷 的, 只含有报头的一种 特殊的报文

3. 后发先至

下面小编想谈谈一种特殊的情况, 后发先至

什么是后发先至呢?

<1>. 后发先至的初识

举个栗子

假如小编想请我的女神吃麻辣烫, 就会给女神发:

女神女神,我请你吃麻辣烫好不好?

女神就会回: 好啊好啊!

如果我再问一句: 女神女神, 做我女票好不好?

女神就会回: 滚!

正常情况:

在这里插入图片描述

第一句回复对应第一个问题, 第二句回复对应第二个问题。

特殊情况

在这里插入图片描述

但在网络传输中也有可能会出现, 先发的后到达, 后发的先达到。

就会造成 误解 , 引起歧义。

<2>. 后发先至的解决方案

对于这种 后发先至 的特殊情况。

Tcp早已根据确认应答机制做出了调整。

假如小编发过来的是 : 1~10001001~20002001~3000

那么女神可能收到先收到: 1001~2000, 再收到 2001~3000 , 最后收到 1~1000

假如没有收到 1~1000 的数据, 就会先进行等待, 等待的 1~1000 到达, 然后再是1001~2000 , 最后是 2001~ 3000 的顺序来 排好序, 使 接收方和发送方 所发的数据是 顺序一致

在这里插入图片描述

如上图, 系统内核中有 一段内存空间 ,作为 “接收缓冲区” , 收到的数据会在缓存区中进行 排队等待 , 只有开头的数据 到了, 应用程序才会真正 读取 里面的数据。

鱼式疯言

补充总结

Tcp会针对 接收方 收到的数据进行 重新排序 , 确保应用程序, 接收方收到数据顺序和发送方发送的数据顺序是 一样的

三. Tcp 的超时重传

1. 丢包的原因

为啥会丢包。

这里的丢包, 指的的是 数据包

在网络传输过程中, 会出现很多 不确定的情况 发生,就很有可能产生 “丢包问题”

<1>. 情况一

在网络传输过程中, 很有可能会出现受 电磁波的影响 , 当传输的数据遇到一段变化的磁场, 就会受磁场的影响,发生 bit翻转 , 也就是数据 0-> 1, 1->0

在这里插入图片描述

这样就会使最终接收的 校验和 和发送的 校验和 对应不上, 就会发送 丢包问题

<2>. 情况二

在这里插入图片描述

在数据非常多的高峰时期, 由于网络传输中的某个交换机的节点 一时间无法转接那么多的数据能处理的空间小于实际所发送过来的数据。 就会导致一部分数据不能及时处理, 路由器就会把这些 数据给丢弃, 从而出现 丢包问题

2. 丢包的种类以及处理方案

丢包的种类分为两种:

  1. 发送方发送 数据丢包

  2. 返回确认序号 Ack丢包

<1>.数据丢包

在这里插入图片描述

发送会设定一个 超时时间 .

如果在规定时间内没有收到 Ack的反馈, 就说明 数据丢包了~

一旦发送方感受到了 数据丢包了 , 就会 数据重传

<2>. Ack 丢包

在这里插入图片描述

对于发送方来说, 是 无法辨别 是哪种情况的 丢包 , 所以当在超过了 超时时间 , 没有收到 Ack的反馈 时, 还是会 进行重传 的。

但是在 操作系统内核, 存在一个内存空间为 “缓存区” ,当发送方发送一段数据, 会先进入到 缓存区 中, 接收方就会在 缓存区中查找是否有重复发送过的数据 , 然后进行 去重操作 ,也就是把 重复的数据 直接 丢弃掉

从而确保 应用程序 ,read读出来的数据是 唯一的不重复的

3. 超时时间的设定

超时时间的设定, 这里的超时时间不是固定的, 而是动态变化的。

发送方第一次重传 ,时间为 t1 , 如果在t1 时间内没有收到 Ack , 就会继续第二次重传, 时间为 t2

其中 t2 > t1 ,随着重传的 次数越来越多 , 发送成功的 概率就越大

但是 重传的频次越来越低, 时间会 越来越长

反之, 如果重传了很多次, 说明网络的丢包率已经很高了==>网络发生严重故障,大概率没法继续使用了。

鱼式疯言

重传也 不是无休止 的进行, 当重传达到 一定的次数 后, Tcp就会尝试 重新连接 , 就会发送一个特殊的报文 “复位报文” , 如果网络重新连接了, 通信就会继续进行, 如果 复位报文 没有得到及时回应, 此时 Tcp 就会 单方面的放弃连接 ~~。

总结

  • Tcp的结构初识及可靠传输: Tcp的四大特性: 有连接, 可靠传输,面向字节流, 全双工。 其中提及支持可靠传输的背后的两种机制: 确认应答和超时重传 , 以及 Tcp 报头结构和长度

  • Tcp的确认应答机制: Tcp的确认应答: 以字节流的形式 Tcp序号和以及对应的Tcp确认序号标志位的Ack , 和一种特殊情况: 后发先至

  • Tcp的超时重传机制: 主要两种丢包的原因:比特翻转, 数据过多。 和两种丢包类型: 数据丢包Ack丢包。 最后 超时时间的不是固定的,而是动态变化的

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

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

在这里插入图片描述

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

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

相关文章

QT QxOrm CRUD增删改查mysql数据库操作

QT QxOrm CRUD增删改查mysql数据库操作 QxOrm 是一个 C 库&#xff0c;旨在为 C 用户提供对象关系映射 (ORM) 功能。 基于每个类的简单 C 设置函数&#xff08;如 Java 中的 Hibernate XML 映射文件&#xff09;&#xff0c;QxOrm 库提供以下功能&#xff1a; 持久性&#xff1…

安宝特案例 | AR如何大幅提升IC封装厂检测效率?

前言&#xff1a;如何提升IC封装厂检测效率&#xff1f; 在现代电子产品的制造过程中&#xff0c;IC封装作为核心环节&#xff0c;涉及到复杂处理流程和严格质量检测。这是一家专注于IC封装的厂商&#xff0c;负责将来自IC制造商的晶圆进行保护、散热和导通处理。整个制程繁琐…

C语言俄罗斯方块(VS2022版)

C语言俄罗斯方块 演示视频一、前置知识1.Win32 API 的使用2.宽字符的使用 二、封装核心数据与框架介绍三、核心操作介绍旋转操作检测操作水平检测竖直检测代码化简 四、源码展示在 tetris.h 中&#xff1a;在 tetris.c 中&#xff1a;在 test.c 中&#xff1a; 以下代码环境为 …

小阿轩yx-Zabbix企业级分布式监控环境部署

小阿轩yx-Zabbix企业级分布式监控环境部署 前言 “运筹帷幄之中&#xff0c;决胜千里之外”监控在 IT 运维中占据着重要地位&#xff0c;按比例说占 30% 也不为过在监控系统开源软件中有很多可选择的工具&#xff0c;但是真正符合要求的、能够真正解决业务问题的监控系统软件…

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时&#xff0c;首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值&#xff0c;还要能够激起人们的分享欲望。对于许多企业和个人来说&#xff0c;尤其是那些缺乏创意和写作能力的人来说&#xff0c;…

OpenHarmony鸿蒙开发( Beta5.0)智能甲醛检测系统实践

样例简介 本项目是基于BearPi套件开发的智能甲醛检测系统Demo&#xff0c;该设备硬件部分主要由小熊派单板套件和和甲醛检测传感器组成。智能甲醛检测系统可以通过云和手机建立连接&#xff0c;可以在手机上设置甲醛浓度阈值&#xff0c;传感器感知到的甲醛浓度超过阈值之后&a…

QQ邮箱“已发送”邮件竟然无法一键清空?看我操作,怎么删除12万+已发送邮件

最近遇到了一个问题&#xff0c;QQ邮箱提示我空间已满&#xff0c;所以我就专门去看看有哪些邮件可以删除&#xff0c;释放点空间。 我直接暴力删除了很多文件夹的邮件&#xff0c;在文件夹管理界面 有“清空”按钮&#xff0c;点一个即可清空。 但是。。。不出意外的话要出意…

南卡、韶音、墨觉:精选三款旗舰骨传导耳机全面对比评测!

在科技日新月异的今天&#xff0c;耳机作为我们日常生活中不可或缺的音频伴侣&#xff0c;正经历着前所未有的变革。特别是骨传导耳机&#xff0c;凭借其独特的声音传导方式和出色的佩戴体验&#xff0c;逐渐成为了运动爱好者和户外探索者的首选。在众多品牌中&#xff0c;南卡…

Pycharm的安装与Conda环境的配置

目录 第一步&#xff1a;下载并安装 PyCharm 社区版 第二步&#xff1a;创建新项目并配置 Python 解释器 第三步&#xff1a;配置 Conda 环境 第四步&#xff1a;验证环境 第五步&#xff1a;测试 PyTorch 第六步&#xff1a;测试基本 PyTorch 代码 第一步&#xff1a;下…

替代区块链

随着比特币的成功&#xff0c;人们逐渐意识到区块链技术的潜力&#xff0c;并随之出现了迅速的发展&#xff0c;各种区块链协议、应用程序和平台相应产生。 需要指出的是&#xff0c;在这种多元的局面下&#xff0c;很多项目迅速失去了它们的吸引力。事实上&#xff0c;有不少项…

深圳MES系统在制造业的应用与发展

深圳MES在制造业的应用与发展呈现以下几个特点&#xff1a; 应用范围广泛&#xff1a;深圳制造业涵盖了电子、通信、汽车、机械等多个领域&#xff0c;MES系统在这些领域的应用非常广泛。不同行业的企业可以根据自身的需求和特点&#xff0c;定制化地应用MES系统来实现生产管理…

测试即服务(TaaS):概念、优势及应用场景!

引言 随着数字化转型的深入发展&#xff0c;软件质量和用户体验变得愈发重要。传统的软件测试方法已经难以满足现代企业对于快速迭代和高质量交付的需求。在此背景下&#xff0c;“测试即服务”(Testing as a Service, TaaS) 模式应运而生&#xff0c;为软件测试带来了新的解决…

基于SpringBoot+Vue+MySQL的足球俱乐部管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统足球俱乐部管理…

Gtest(Google Test)使用

下面Gtest是在arm-linux下运行的 https://download.csdn.net/download/qq_31868891/89729426 一、下载编译 1.下载gtest代码 https://github.com/google/googletest 2.配置编译 vscode安装CMake Tools 将上面下载的gtest代码文件夹拖到vscode里&#xff0c;然后选择对应的…

SAP 凭证的替代传输GGB1

SAP 凭证的替代传输GGB1 之前没有留意过&#xff0c;前人一直是直接改的&#xff0c;搜索了一下是可以这样弄得 1.一般通过OBBH&#xff0c;配置的凭证替代&#xff0c;产生的请求号&#xff0c;从开发机传输不到生产机。只能通过GGB1来传输。在GGB1里面选择要传输的替代 选中…

BookStack在线文档管理系统本地Docker部署与远程访问详细教程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

LEAN类型系统属性之规范性(Regularity)注解

在 《小结》 中&#xff0c;列出LEAN类型系统所定义的全部规律&#xff0c;下面 关于 LEAN 属性 的一些推论&#xff08;Lemma&#xff09;进行注解。主要是其规范性&#xff08;Regularity&#xff09;&#xff0c;以说明LEAN类型系统是完备构建的&#xff08;well founded&am…

Java+selenium+chrome+linux/windows实现数据获取

背景&#xff1a;在进行业务数据获取或者自动化测试时&#xff0c;通常会使用模拟chrome方式启动页面&#xff0c;然后获取页面的数据。在本地可以使用windows的chromedriver.exe进行打开chrome页面、点击等操作。在linux 下通常使用无界面无弹窗的方式进行操作。接下来是实现方…

【AI绘画】Midjourney之Lighting详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;为什么要学习光影控制光影控制的作用 &#x1f4af;强化主题hard lighting&#xff08;硬光 &#xff09;soft lighting&#xff08;软光/柔光&#xff09;测试 &…

宠物浮毛怎么办,用专业工具——希喂、小米、美的宠物空气净化器

前段时间被医生科普&#xff0c;原来猫咪的毛发也分好几种的&#xff0c;我不是最后一个知道的吧...事情的起因是这样的&#xff0c;上次我去朋友家和她的猫咪玩&#xff0c;实在太可爱了所以自己也养了一只猫。一人一猫的幸福生活没过多久&#xff0c;我就发现自己的鼻炎好像复…