网络传输基本流程(封装,解包)+图解(同层直接通信的证明),报头分离问题,协议定位问题,协议多路复用

目录

网络传输基本流程

引入

封装

过程梳理

图解

报文

解包

过程梳理

图解 -- 同层直接通信的证明

总结

解包时的报头分离问题

举例 -- 倒水

介绍

自底向上传输时的协议定位问题

介绍

解决方法

协议多路复用

介绍

优势 


网络传输基本流程

引入

首先,我们明确一个前提,协议如何被体现,就是通过在数据前添加报头实现的 -- 协议的概念+本质+作用+最终表现形式,网络问题(技术+应用+解决的协议+存在原因),主机的对称性-CSDN博客

所以,每经过一层协议,就会添加一段报头

封装

过程梳理

我们根据信息传输的顺序自顶向下

首先是应用层

  • 因为我们一般都是使用某种软件来进行通信,而软件一般都会进行更新,但版本更新不是强制的,所以会存在新/老版本都要向服务器请求数据的情况
  • 那么为了不乱套(新老版本的提供的功能不同,两者是有差异的),就肯定会为它加上一个版本字段,确保不同版本的软件能够正确地解析和处理收到的数据
  • 而这个字段,正是在应用层的协议
  • 所以数据到了应用层后,会添加应用层协议的报头
  • 该报头内就会有版本信息

然后来到传输层,该层用来保证可靠性

  • 这个可靠性不仅仅保证数据成功运输,也包括信息的发送顺序等等(因为顺序乱了,意思就完全不一样了)
  • 比如:
  • 所以,协议会定义一个序号,用于为信息排序
  • 当数据来到传输层,依然会添加该层协议的报头
  • 报头内包含一系列字段,其中就有序号

同理,当数据来到网络层时(他解决主机定位问题)

  • 数据中依然会继续添加该层协议的报头
  • 报头内包括了自己的身份,目标主机是哪个等信息

链路层也是一样的

图解

  • 每层新添加的报头都在最外侧
  • 到达每层的数据(也叫做报文)都不一样
报文

指在网络中传输的数据单元,报文=报头+有效载荷

  • 注意,这个报头仅仅是当前层协议的报头,剩下的数据就是有效载荷
  • 有效载荷每经历一层,就会增加字段,增加的恰好是上一层添加的报头:

完成了这四层后,也就完成了封装的过程(将数据一层一层用报头包裹在里面)

解包

过程梳理

当我们将报文发送给对方主机后,对方主机就开始自底向上传输

  • 恰好,报头可以被一层一层地解析
  • 从图中可以看到,我们最外层的协议报头,恰好和[在对方主机中遇到的第一层协议]对应上了
  • 又因为,这段报文在链路层就已经是二进制序列了,所以指针可以指向这块内存
  • 不仅如此,我们还可以通过指针的强制类型转换,精准地指向该层的协议报头
  • 剩下的部分,就是有效载荷,而有效载荷的开头,就是上一层的协议报头
  • 之后将有效载荷交给自己的上一层
  • 因为各层协议都是匹配的,重复上述过程,就可以准确地解码出每层对应的报头(之前一层一层包起来,现在再一层一层解开)

图解 -- 同层直接通信的证明

注意看,同层之间,发送的和收到的是同样的报文

这不就相当于同层之间在进行直接通信吗?

所以,也就证明了 --  在逻辑上,每层之间根据约定在进行通信

和封装对应的,以上过程就被叫做解包 

总结

所以,通信的过程就是不断进行封装和解包

 

解包时的报头分离问题

举例 -- 倒水

如果我们要把多次倒入的水,再分离出来,这是很难的事情

但如果我们将每次倒入的水都用容器装起来,再将容器扔进去,再想分离就很简单了

介绍

而在网络通信中的封装和分离过程也是同理

  • 在封装的时候,就应该考虑之后该如何分离

比如:

  • 协议里就规定好报头的大小 / 记录当前报头大小和报文大小

 

自底向上传输时的协议定位问题

介绍

  • 我们经过协议封装后,得到的报头是特定协议的(具体选择哪个协议我们不用管)
  • 但是将报文发送给对方主机后,下一层如何知道交给上一层的哪个协议呢
  • 毕竟每一层的协议有很多,但我们必须交给封装数据的那个协议(必须要一一对应才能进行通信)

解决方法

所以,协议里还需要记录当前协议是谁

  • 也就是在报头里增加一个标识字段,该字段指示上层协议的类型
  • 从上到下传输时,下一层记录是上一层的哪一个协议交给我的
  • 然后从下到上传输时,该层解析自己的报头后,就可以知道自己该交给谁了

而这个协议标识(也就是决定将有效荷载交给上层哪个协议的能力),是实现协议多路复用的关键

协议多路复用

介绍

指在通信过程中,通过使用不同的协议标识来区分和识别多个上层协议的技术

  • 确保了在传输中的数据,能够被正确地解析和交付给相应的协议进行处理

优势 

  • 可以同时支持多种上层协议,使得网络更加灵活和可扩展
  • 不同的应用和服务可以使用不同的协议,而这些协议可以在同一通信通道上共存,通过协议标识字段确保数据被正确地路由和处理

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

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

相关文章

VS查看C++头文件(.h文件)的函数列表

这里使用的是VS2019举例 如下图查看Actor.h文件中的函数列表 设置步骤如下图

【d35】【Java】【力扣】28. 找出字符串中第一个匹配项的下标

题目 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystac…

【大数据】通过 docker-compose 快速部署 MinIO 保姆级教程

文章目录 一、概述二、MinIO 与 Ceph 对比1)架构设计对比2)数据一致性对比3)部署和管理对比4)生态系统和兼容性对比 三、前期准备1)部署 docker2)部署 docker-compose 四、创建网络五、MinIO 编排部署1&…

【SQL】608. 树节点(流控制语句 CASE + IF语句)

前述 知识点推荐学习: sql中的 IF 条件语句的用法 MySQL:if语句、if…else语句、case语句,使用方法解析 题目描述 leetcode 题目:608. 树节点 思路 关键点:如何确定有没有子节点 根节点:父节点为空内节…

基于Redo log Undo log的MySQL的崩溃恢复

基于Redo log & Undo log的MySQL的崩溃恢复 Redo log Undo log Redo log 重做日志,记录,修改过的数据 Undo log 回滚日志,记录修改之前的数据 两个我不做详细的介绍了,redo log就是记录哪些地方被修改了 undo log是记录修改之前我们的数据长什么样 更新流程 我们来捋一…

python封装,继承,复写详解

目录 1.封装 2.继承 复写和使用父类成员 1.封装 class phone:__voltage 0.5def __keepsinglecore(self):print("单核运行")def callby5g(self):if self.__voltage > 1:print("5g通话开启")else:self.__keepsinglecore()print("不能开启5g通…

Redis集群(主从)

1.主从集群 集群结构: 一.单机安装redis 1.上传压缩包并解压,编译 tar -xzf redis-6.2.4.tar.gz cd redis-6.2.4 make && make install 2.修改redis.config的配置并启动redis # 绑定地址,默认是127.0.0.1,会导致只能在本地访问。…

Tomcat布署及优化-----JDK和Tomcat

1.Tomcat简介 Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说&…

C++ //练习 10.2 重做上一题,但读取string序列存入list中。

C Primer(第5版) 练习 10.2 练习 10.2 重做上一题,但读取string序列存入list中。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /******************************************************…

【前端面试题5】利用 border 属性画一个三角形

举例1:利用 border 属性画一个三角形(小技巧) 完整代码如下: div{width: 0;height: 0;border: 50px solid transparent;border-top-color: red;border-bottom: none; }步骤如下: (1)当我们设…

【QT+QGIS跨平台编译】之五十六:【QGIS_CORE跨平台编译】—【qgsmeshcalclexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

Android 拍照本地图片选择框架适配

前言 通常技术方案的选择、会带来后续一些不可控的东西,这也是没法避免的,程序开发者中同时面对、测试、领导、产品各种要求。同时在网络上查找的资料也只是很旧的,不一定适合新设备,需要推倒重新弄 1、解决方案通过意图选择器做…

day6 数组 嵌套循环

1&#xff1a;打印杨辉三角 91 int arr[6][6];92 int i,j0;93 for(i0;i<6;i)94 {95 for(j0;j<i;j) 96 {97 if(j0||ij)98 {99 arr[i][j]1; …

推特API(Twitter API)对接说明,用户code To Token换取

前期准备 提前准备、说明&#xff1a;目前对接推特api开发门户分为3个版本&#xff0c;分别是免费的&#xff0c;100美金一个月的基础版以及5000美金一个月的企业版&#xff0c;免费的目前就两个接口可以调用&#xff0c;所以想要对接和使用推特最基本的也需要付100美元一个月…

百度百科人物创建要求是什么?

百度百科作为我国最大的中文百科全书&#xff0c;其收录的人物词条要求严谨、客观、有权威性。那么&#xff0c;如何撰写一篇高质量的人物词条呢&#xff1f;本文伯乐网络传媒将从内容要求、注意事项以及创建流程与步骤三个方面进行详细介绍。 一、内容要求 1. 基本信息&#…

Studio One 6永久激活版 附完整图文安装破解教程

Studio One 6是一款功能强大的音乐制作和录音软件&#xff0c;专为Mac操作系统设计。它提供了多轨录音和混音、MIDI音乐制作、实时效果和处理、VST插件支持以及高级编辑和编排等丰富的功能。无论是专业音乐制作人还是音乐爱好者&#xff0c;都可以使用Studio One 6来创建和编辑…

基础真空技术外国文献Fundamentals of Vacuum Technology

基础真空技术外国文献Fundamentals of Vacuum Technology

道路积水监测站——确保道路畅通和行车安全

TH-JS1道路积水监测站是一种专门用于监测城市道路积水情况的设备&#xff0c;旨在保障城市道路安全和防止水患对交通造成的不利影响。这些监测站通过实时检测和记录道路积水数据&#xff0c;为城市管理部门提供重要信息&#xff0c;以便及时采取应对措施&#xff0c;确保道路畅…

MATLAB环境下基于离散小波变换的心电信号伪影去除及PQRST波检测

可穿戴个人健康监护系统被广泛认为是下一代健康监护技术的核心解决方案。监护设备不断地感知、获取、分析和存储大量人体在日常活动中的生理数据&#xff0c;为人体的健康状况提供必要的、准确的、集成的和长期的评估和反馈。在心电监测领域&#xff0c;可穿戴传感器具有以下应…

LeetCode刷题-206.反转链表【递归实现】

206.反转链表 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 示例1 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例2 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例3 输入&#xff1a;hea…