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

目录

网络传输基本流程

引入

封装

过程梳理

图解

报文

解包

过程梳理

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

总结

解包时的报头分离问题

举例 -- 倒水

介绍

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

介绍

解决方法

协议多路复用

介绍

优势 


网络传输基本流程

引入

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

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

封装

过程梳理

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

首先是应用层

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

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

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

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

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

链路层也是一样的

图解

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

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

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

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

解包

过程梳理

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

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

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

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

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

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

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

总结

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

 

解包时的报头分离问题

举例 -- 倒水

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

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

介绍

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

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

比如:

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

 

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

介绍

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

解决方法

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

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

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

协议多路复用

介绍

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

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

优势 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

热榜排行爬虫详解

作为一个爬虫必须摸不一样的鱼,平时大家怎么看热榜,今天爬一个热榜数据,咱就在ied中读热榜。还是一个乌龙事件听我细细道来。 1,话不多说,今天图也不看了直接进入主题,打开网站首页抓个包 2,可…

MWC 2024丨美格智能发布全新5G-A模组及FWA解决方案,将5.5G带入现实

2月26日,在MWC 2024世界移动通信大会上,美格智能正式宣布推出5G-A模组SRM817WE以及全新的5G-A FWA解决方案,包含5G-A CPE解决方案SRT858M、5G-A MiFi解决方案SRT878H和5G-A ODU解决方案SRT853MX,旨在进一步提升网络性能&#xff0…

Mamba与MoE架构强强联合,Mamba-MoE高效提升LLM计算效率和可扩展性

论文题目: MoE-Mamba: Efficient Selective State Space Models with Mixture of Experts 论文链接: https://arxiv.org/abs/2401.04081 代码仓库: GitHub - llm-random/llm-random 作为大型语言模型(LLM)基础架构的后…

Docker+Kafka+Kafka-ui安装与配置

前言 Docker、Kafka都是开发中常用到的组件。在自己的第三台电脑上去安装这些…所以写个博客记录一下安装过程。本文主要内容:Docker安装、kafka安装、kafka可视化配置。这次的电脑环境是Windows11,Intel处理器。 Docker安装 https://www.docker.com/p…

Nginx 解析漏洞复现

环境搭建 下载之后上传到虚拟机并解压 进入这个路径 (root?kali)-[~/vulhub-master/nginx/nginx_parsing_vulnerability]就能看到有docker-compose.yml 启动环境 正常显示 增加/.php后缀,被解析成PHP文件: 漏洞原因:开启了cgi.fix_pathin…

【Mysql】Navicat数据库勿删了mysql.infoschema@localhost,导致打不开数据库,如何修改

运行报错如下: 1449 . The user specified as a definer (mysql.infoschemaocalhost) does not exist该方法不需要重启mysql,或者重装;仅需要恢复删除的mysql.infoschemalocalhost用户 一、登录建立用户 mysql -uroot -pxxxxxx密码二、建立…

有哪些手机与电脑可以同步的简单好用笔记软件?

在我的日常工作、学习和生活中,笔记软件是我不可或缺的助手。无论是会议要点的记录、学习笔记的整理、还是日常生活的备忘录,一款好用笔记软件都能让这些信息井然有序,随时可查。特别是在忙碌的工作日,能够在电脑上整理工作笔记&a…

WordPress分类目录ID怎么看?如何查找WordPress标签ID?

在WordPress网站中,我们需要判断某篇文章是否属于某个分类目录,或者是否拥有某个标签,那么就需要用到分类目录ID和标签ID,那么WordPress分类目录ID怎么看?如何查找WordPress标签ID?下面boke112百科就跟大家…

Linux(CentOS)学习

一、认识Linux 1、如何修改Linux时区 2、配置固定IP 3、重启网络服务 3、小技巧快捷键 4、环境变量设置 5、Linux文件的上传和下载 6、压缩和解压 二、基础命令 1、目录命令 (1、)查看目录内容(ls) 1、ls //查看当前目录内容 2、- a //显示隐藏内容 3…

亿道信息新三防平板EM-I10J,性能和价格成最大亮点

亿道信息近期推出了一款新三防平板电脑名为EM-I10J,这款设备上市的初衷是为了在满足客户作业需求的同时为其提供更合适的价格选择,但这并不意味着EM-I10J的实力可以被小觑。 外观上I10J与之前的I10U并无不同之处,同样是10.1英寸高清电容式触…

【go从入门到精通】什么是go?为什么要选择go?

go的出生: go语言(或Golang)是Google开发的开源编程语言,诞生于2006年1月2日下午15点4分5秒,于2009年11月开源,2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持…

基于springboot+vue的医院资源管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Win32汇编ListView控件学习

此控件比较复杂;和基础win32控件不同;需要先初始化Windows公共控件库, invoke InitCommonControls 之后才可使用; lvdemo.asm, .386.model flat, stdcalloption casemap :none ; case sensitiveinclude window…

33-k8s项目实战-02-k8s的ca证书有效期更新

一、概述 我们知道,k8s各项组件之间的通信,都是使用https协议进行的,也就是ca证书,那么我们也知道ca证书都是有“有限期的”,一旦过期,系统就无法进行通信了; 这也是k8s在企业当中经常遇到的证书…

波奇学Linux:共享内存

进程通信的前提:不同的进程看到同一份的资源 直接原理:同一块物理内存映射到不同进程的共享区 共享内存拆解: 1.申请内存,通过页表映射到进程地址空间 2.返回首地址,便于进程利用 3.释放共享内存,去关联 4.内存的申请…

手机AI摄影时代开启,传音引领行业标准化建设

今年春节,AI摄影可谓大出风头。人们在社交平台晒出自己在龙年的AI写真,极大地增添了节日的氛围感,也让我们看到了“AI摄影”的价值。新年伊始,手机巨头们纷纷布局该赛道,基于AI大模型实现的影像功能成为业界关注焦点。…

c语言 广度优先搜索(Breadth-First Search,BFS)

广度优先搜索(Breadth-First Search,BFS)是一种图遍历算法,通常用于搜索或遍历树和图等数据结构。其基本思想是先访问起始顶点,然后逐层遍历其相邻的顶点,直到找到目标顶点或遍历完所有顶点。 BFS通常使用…

c++面试三 -- 智能指针--7000字

一、智能指针 C 中的智能指针是一种用于管理动态分配的内存的对象,它们可以自动进行内存管理,避免内存泄漏和悬挂指针等问题。 1. 悬挂指针 悬挂指针(dangling pointer)是指在程序中仍然存在但已经不再指向有效内存地址的指针。悬…

深入理解nginx的https sni机制

目录 1. 概述2. 初识sni3. nginx的ssl证书配置指令3.1 ssl_certificate3.2 ssl_certificate_key3.3 ssl_password_file4. nginx源码分析4.1 给ssl上下文的初始化4.2 连接初始化4.3 处理sni回调4.2 动态证书的加载5. 总结阅读姊妹篇: 深入理解nginx的https alpn机制 1. 概述 SN…

FreeRTOS 其它知识点

目录 一、低功耗Tickless模式 1、低功耗Tickless模式的引入 2、Tickless 具体实现 二、空闲任务 1、空闲任务相关知识点 2、钩子函数 3、空闲任务钩子函数 三、使用RTOS的好处 一、低功耗Tickless模式 1、低功耗Tickless模式的引入 FreeRTOS 的系统时钟是由滴答定时器中…