【网络篇】UDP协议的封装分用全过程

在这里插入图片描述

大家好呀
我是浪前

今天讲解的是网络篇的第二章:UDP协议的封装分用

我们的协议最开始是OSI七层网络协议

这个OSI 七层网络协议 是计算机的大佬写的,但是这个协议一共有七层,太多了太麻烦了,于是我们就把这个七层网络协议就简化为五层了

UDP协议的封装分用全过程

  • TCP/IP 五层网络协议
    • 网络设备所在分层
    • 封装和分用
    • 封装的全过程:
      • 发送方:
      • 1: 发送方A的应用层(应用程序) QQ:
      • 2: 发送方A的传输层:
      • 3: 发送方A的网络层:
      • 4: 发送方A的数据链路层:
      • 5: 发送方A的物理层:硬件设备:
    • 分用的全过程:
      • 1: 接收方B的物理层:
      • 2: 接收方B的数据链路层:
      • 3: 接收方B的网络层(IP协议)
      • 4:接收方B的 传输层(UDP协议)
      • 5:接收方B的 应用层 QQ应用程序:
      • 交换机A的工作:

TCP/IP 五层网络协议

举一个例子:

我在淘宝店铺买了一个刷子:

商家发货就要去关注我的收件人地址和电话,发件人地址和电话(这个就是传输层要去关注包裹传输的起点和终点)

商家要把这个包裹交给快递公司:

这个TCP/IP协议一共有五层:

应用层传输的数据在应用程序中如何使用

程序在拿到数据之后,要用数据去干什么,解决什么问题(程序员最关注的一层)**
负责我买到这个刷子是用来干什么的?
刷床?刷沙发?打小孩?

传输层关注的是通信的起点和终点

负责关注网络数据包的起点和终点(从哪里来到哪里去),是端到端的传输

负责关注通信的起点和终点,关注网路数据包的起点和终点是端到端的传输

网络层关注的是通信中的路径规划

负责关注起点到终点之间要走哪一条路(路径规划)
确定传输的路线: 上海 - 南京 - 无锡 - 西安
规划出哪一条路径最好?
考虑传输效率?传输成本?传输时间最短?传输过程最方便?

网络层关注的是通信过程中的路径规划,

数据链路层负责两个相邻的节点之间的传输和通信细节,即数据传输情况

上海到南京 是用飞机空运来运输
南京到无锡市用铁路运输
无锡到西安使用大货车进行运输

物理层网络通信过程中的硬件设备,基础设施

通信过程中的物理运输 公路-铁路-航线

为什么要写四层:
因为不算物理层就是四层,为什么?
因为物理层是纯硬件的

说是五层,但是下面这四层都是在操作系统内核,硬件,驱动程序中已经实现好了(计算机内置了)
我们作为程序员在网络编程过程中能够影响到的也就只有应用层了

应用层对应到应用程序,也就是程序员写的代码软件,需要手动实现

传输层和网络层都是操作系统内核,都是在操作系统的内核中实现的,这两层都是现成的,不需要手动实现

数据链路层和物理层是驱动程序+硬件来实现的
硬件厂商提供了硬件,都会配上一个驱动程序
有了这个驱动程序,系统才可以很好地操作这个硬件

网络设备所在分层

对于一台主机,

它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四 层;

对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;路由器工作在网络层

对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;交换机工作在数据链路层

对于集线器,它只实现了物理层

上面是一个经典的笔试题。

上述的路由器和交换机指的是经典的路由器和交换机

封装和分用

封装和分用描述了网络通信过程中基本的数据传输流程

封装和分用是网络传输数据过程中,最核心的流程

封装的全过程:

例子如下所示:

A 通过QQ给B发送了一个hello:

在这里插入图片描述

这个操作会出现什么流程?

发送方:

1: 发送方A的应用层(应用程序) QQ:

QQ从消息输入框中获取到用户A输入的hello,hello是一个字符串
QQ就要把这个字符串构成一个应用层的数据包

QQ这样的程序内部就设置了一个应用层的协议,应用数据包就是按照这个应用层协议约定的格式来构造的

这个格式就是一个字符串的拼接
这个应用层协议往往都是实现这个程序的人自己定义的,其他人都没有权限修改

但是我们是可以自己约定的:
比如:
我们约定的应用层协议的格式如下:

发送方QQ号;接收方QQ号;发送时间;消息正文
12344;34556;2024-1-1 12:00:00;hello

上述就构成了一个简单的应用层数据包

应用程序就会调用系统提供的API把这个应用层数据包交给传输层

2: 发送方A的传输层:

会把上述的应用层数据包作为一个整体再构造成为一个传输层的数据包
这个传输层涉及到的协议最重要的就是这个TCP和UDP协议

此处我们假定是使用UDP协议来进行通信,此时就会构造一个UDP的数据包
这个UDP数据包一共包含两个部分:

  1. 报头(header)
  2. 载荷(payload)

载荷里面的东西就是应用层数据包
如下图所示:

![[UDP结构01.png]]

形如上述,添加报头的过程就是==封装==
其实就是拼接字符串
只不过拼接的是报头,具有一定的结构

例子:
商家发货一件衣服,不能够直接发,一般都是要先进行包装,使用塑料袋子进行包装

包装的作用是什么?
给快递套上包装,既能够起到保护作用,又能够用来贴标签
标签上就可以写一些用来发送快递的关键信息

上述的封装的过程就是这个衣服被包装的过程

封装的作用是什么?
我们这里的UDP报头虽然不能够起到保护的作用,但是可以起到“贴标签”类似的效果
就能够承载一些关键的用来转发数据的信息

**对于UDP报头来说,UDP报头是一个二进制数据,承载的最重要的信息就是源端口和目的端口,这两个端口就是被记载在UDP报头中

当我们拼接好一个传输层的数据包之后呢,就要把这个数据包进一步交给下层,网络层继续进行封装了

交给下层指的是下层协议提供一组API(函数),上层调用这个API(函数),并且把刚才构造好的数据 通过参数传过去,下层协议就可以来处理这个数据了)

源端口和目的端口是在传输层
源IP和目的IP是在网络层

传输层的数据打包好了之后,数据会继续被交给网络层:

3: 发送方A的网络层:

网络层涉及到的最核心的协议就是IP协议

在网络层包含很多的属性,最重要的属性就是源IP和目的IP

网络层的IP协议把刚才传输层的UDP数据包作为一个整体,把这个整体作为IP协议的载荷,然后拼上IP协议的报头,构造成为一个数据包:
内容如下:

  1. IP协议的报头
  2. IP协议的载荷
    如图所示:

在这里插入图片描述

在这个IP协议报头中:
也会包含一些辅助转发的关键信息,此处最关键的信息就是源IP和目的IP
此时构造完成一个完整的IP数据包之后,IP协议继续调用数据链路层的API,把数据再交给数据链路层这里的协议进行处理

网络层数据打包好了之后,会继续把数据交给数据链路层来进一步打包

4: 发送方A的数据链路层:

数据链路层涉及到的核心协议叫做以太网

此处,我们使用“以太”来作为网络传输的介质

以太网就是日常见到的有线网络

我们日常使用的网线也是“以太网线”,日常使用的网口也是“以太网口”

日常使用的交换机也是“以太交换机”

**以太网数据帧:

以IP数据包作为一个整体,在这个IP数据包的前面加上一个以太网帧头,后面加上一个帧尾
中间是载荷

如下图所示:
在这里插入图片描述

以太网帧头中最重要的信息是源mac地址,目的mac地址

这样的数据封装好了之后还要继续向下走,交给物理层

5: 发送方A的物理层:硬件设备:

**把上述的这样的以太网数据帧这样的二进制结构(一串 0 1 0 1) 这样的数据:
将这样的数据转化为光信号(光纤)/电信号(网线)/电磁波(无限wifi)
然后进行发送

此时经过上面的一系列操作,从上层协议到下层协议,层层给数据包添加报头,终于是把这个hello这个数据给发送出去了,(刚出家门)
以上就是封装的过程

数据发送出去之后,就会经过一些列的交换机和路由器进行转发,A和B一般来说不是直接网线连接的,中间还要经过很多的交换机/路由器设备进行转发
这个中间过程我们先不谈,接下来先说明清楚
当数据到达接收方B之后,接收方B要对数据进行一个“分用”的过程

分用的全过程:

**下面是接收方B发生的事情:
我们先来假定这个数据包已经到达B的网卡了,看这个B会如何处理这个数据包

接收方B的这个处理数据包的过程就是 "分用"的过程

1: 接收方B的物理层:

物理层收到的数据 是光信号/电信号/电磁波,物理层就会把这些物理信号转换为数字信号(二进制的 0 1 0 1 )

在转换之后会得到一个以太网的数据帧,进一步会把这个数据帧交给数据链路层处理

2: 接收方B的数据链路层:

通过以太网协议,针对以太网数据进行解析,会解析出以太网帧头和以太网帧尾,以及中间的载荷

以太网:发送方和接收方得使用一样的协议才行
我们这里进行解析: 把以太网帧头去掉,以太网帧尾去掉

如图所示:
在这里插入图片描述

按照以太网数据帧的格式来解析,取出其中的载荷,之后再交给上层协议:

3: 接收方B的网络层(IP协议)

网络层是按照IP协议的格式来解析,取出其中的载荷,再交给上层协议
此时去掉IP报头之后:

在这里插入图片描述

4:接收方B的 传输层(UDP协议)

按照UDP协议格式来解析,取出其中的载荷,再交给上层协议:
此时就去掉UDP报头,取出剩下的载荷,交给上层协议:
在这里插入图片描述

5:接收方B的 应用层 QQ应用程序:

此时应用层拿到数据之后,在根据端口号来判断把数据交给哪个应用程序

QQ这个程序就要解析这个数据,这个解析过程也是按照前面程序员自定义的应用层协议展开的

此时按照QQ应用程序内部的应用层协议格式来解析数据~
如何解析的?
在这里插入图片描述

就是把上图中的数据按照分号进行切割,就得到了这里的QQ号信息,发送时间,发送消息的正文

此时QQ程序拿到这些数据之后,就会弹出一些提示,并且把消息/消息的发送者/发送时间 都显示到聊天窗口上
以上就是分用的过程

分用的过程就是封装的逆向过程

数据报并不是发送方一发送出去就立马到了接收方那里,而是在网络中间还会经历一个转发的过程
通过路由器/交换机来进行转发,

在真实情况下,并不是一出门就直接到了,而是两个主机一般都不是直接通过网线直连的,而是通过一系列的交换机或者路由器来进行数据转发的

在这里插入图片描述

但是实际上即使是经过交换机或者路由器,上述的封装分用过程,也还是同样适用的
只不过,封装分用的程度不一定是到应用层(不一定是五层都有,可能是只涉及到了几层)

比如:
对于经典交换机来说,就只需要封装分用到数据链路层即可
对于经典的路由器来说,就只是需要封装分用到网络层即可

如果数据报在中间的转发过程中,转发到了路由器上,那么也要经历一个封装分用的过程,只不过是封装分用到网络层:
当路由器拿到数据之后,路由器会将数据解析到网络层,拿到IP地址之后,决定下一步如何传输,
下一步传输的时候,又会重新经过网络层,数据链路层,和物理层的封装才能从路由器中传输出去

*如果数据报被转发到了交换机上,那么就会在交换机上进行一个封装分用到数据链路层的过程,

所以封装分用这个过程在网络通信中是贯穿始终的,数据经历的每一个节点都要进行封装分用的过程


交换机A的工作:

下述是A的光电信号;

在这里插入图片描述

交换机A的物理层就会把从A发出的光电信号转换成以太网数据帧二进制数据交给数据链路层:

而在交换机上面也是实现了数据链路层的:

此时交换机A的数据链路层就会对上述的数据进行解析:
这个解析过程,一方面要去除载荷部分,另一方面要解析到帧头的关键信息

  1. 去除载荷
  2. 解析帧头

根据帧头中的信息,决定下一步把数据往哪里进行发送,根据这个情况再进一步地构造出新的以太网数据帧~

新的数据帧如下图所示:
在这里插入图片描述

把这个新的数据继续通过物理层发送出去

这里的以太网帧头,对于交换机来说,已经够用了,就不需要再进行解析了

刚刚是交换机,现在是路由器:路由器的情况更加复杂一些
要封装分用到网络层

当路由器拿到A的光电信号之后:
A的光电信号如下:
在这里插入图片描述

先是物理层拿到光电信号,转成二进制数据交给数据链路层:

数据链路层对上述的数据进行解析,去掉以太网帧头,拿出载荷,交给IP协议
如下图所示:
在这里插入图片描述

IP协议又会进一步对这个数据进行解析,解析IP报头,再一次取出载荷,
路由器为什么要解析IP报头?
因为路由器需要通过IP报头中的目的IP来知道具体接下来如何转发

在这里插入图片描述

取出的数据 会被IP协议重新进行封装操作:
即刚刚取出的数据会被重新加上(封装上)IP报头

如下图所示:
在这里插入图片描述

数据被重新封装上IP报头之后,会被交给数据链路层,继续加上帧头和帧尾

如下图所示:
在这里插入图片描述

此时我们又构成了一个数据链路帧,此时这个数据再交给物理层,去转成光电信号,继续传输
此时我们的路由器只是封装分用到网络层,说明路由器并不在乎UDP数据和应用层数据

对于一台主机,

它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;

对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
路由器是工作在网络层的

对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层:
交换机是工作在数据链路层的

对于集线器,它只实现了物理层

上述的路由器和交换机指的是经典的路由器和交换机

事实上的路由器和交换机的功能更加复杂强大

很多的交换机也具有一些路由器的功能,也可以工作在网络层

很多的路由器也具有一些交换机的功能,也可以工作在数据链路层

甚至有些交换机路由器还可以工作在应用层

如果交换机要截取/解析你所传输的数据,那么就会封装分用到应用层,把hello拎出来看看

在这里插入图片描述

在上述图片中的每一个节点都会涉及到封装分用的过程

所以网络传输数据不是一个简单的事情,背后有大量的工作 ,只不过这些工作都是硬件&驱动
&操作系统 帮我们完成了

注意:
我们在描述一个网络上传输的数据“单位”可能会用到几个术语:

包(packet): 网络数据包
使用场景: IP数据包


段(segment):网络数据段
使用场景: TCP数据段


报(datagram) : 网络数据段
使用场景: UDP数据段


帧(frame) : 网络数据帧
使用场景: 以太网数据帧


上述的几个术语都是网络传输的基本单位。
我们今天就学习到这里,下次见~
在这里插入图片描述

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

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

相关文章

spring-ai-alibaba使用Agent实现智能机票助手

示例目标是使用 Spring AI Alibaba 框架开发一个智能机票助手,它可以帮助消费者完成机票预定、问题解答、机票改签、取消等动作,具体要求为: 基于 AI 大模型与用户对话,理解用户自然语言表达的需求支持多轮连续对话,能…

嵌入式C语言高级编程:OOP封装、TDD测试与防御性编程实践

一、面向对象编程(OOP) 尽管 C 语言并非面向对象编程语言,但借助一些编程技巧,也能实现面向对象编程(OOP)的核心特性,如封装、继承和多态。 1.1 封装 封装是把数据和操作数据的函数捆绑在一起,对外部隐藏…

蓝桥杯 web 常考到的一些知识点

filter:filter方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。这个 方法不会改变原数组,而是返回一个新的数组。 map:map方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的 返回…

音视频小白系统入门笔记-0

本系列笔记为博主学习李超老师课程的课堂笔记&#xff0c;仅供参阅 音视频小白系统入门课 音视频基础ffmpeg原理 绪论 ffmpeg推流 ffplay/vlc拉流 使用rtmp协议 ffmpeg -i <source_path> -f flv rtmp://<rtmp_server_path> 为什么会推流失败&#xff1f; 默认…

mysql按条件三表并联查询

下面为你呈现一个 MySQL 按条件三表并联查询的示例。假定有三个表&#xff1a;students、courses 和 enrollments&#xff0c;它们的结构和关联如下&#xff1a; students 表&#xff1a;包含学生的基本信息&#xff0c;有 student_id 和 student_name 等字段。courses 表&…

UML之序列图的消息

序列图表现各参与者之间为完成某个行为而发生的交互及其时间顺序&#xff0c;序列图中的交互通过消息实现。消息是从一条生命线到另一条生命线的通信&#xff0c;它们通常是水平或倾斜向下的箭头&#xff0c;从发送方生命线离开&#xff0c;到达接收方生命线。如果需要&#xf…

UniAD:自动驾驶的统一架构 - 创新与挑战并存

引言 自动驾驶技术正经历一场架构革命。传统上&#xff0c;自动驾驶系统采用模块化设计&#xff0c;将感知、预测和规划分离为独立组件。而上海人工智能实验室的OpenDriveLab团队提出的UniAD&#xff08;Unified Autonomous Driving&#xff09;则尝试将这些任务整合到一个统一…

如何写好合同管理系统需求分析

引言 在当今企业数字化转型的浪潮中&#xff0c;合同管理系统作为企业法律合规和商业运营的重要支撑工具&#xff0c;其需求分析的准确性和完整性直接关系到系统建设的成败。本文基于Volere需求过程方法论&#xff0c;结合江铃汽车集团合同管理系统需求规格说明书实践案例&…

libevent服务器附带qt界面开发(附带源码)

本章是入门章节&#xff0c;讲解如何实现一个附带界面的服务器&#xff0c;后续会完善与优化 使用qt编译libevent源码演示视频qt的一些知识 1.主要功能有登录界面 2.基于libevent实现的服务器的业务功能 使用qt编译libevent 下载这个&#xff0c;其他版本也可以 主要是github上…

八、自动化函数

1.元素的定位 web自动化测试的操作核心是能够找到页面对应的元素&#xff0c;然后才能对元素进行具体的操作。 常见的元素定位方式非常多&#xff0c;如id,classname,tagname,xpath,cssSelector 常用的主要由cssSelector和xpath 1.1 cssSelector选择器 选择器的功能&#x…

Web三漏洞学习(其二:sql注入)

靶场&#xff1a;NSSCTF 、云曦历年考核题 二、sql注入 NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过&#xff0c;但为了学习sql&#xff0c;整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判…

单片机非耦合业务逻辑框架

在小型单片机项目开发初期&#xff0c;由于业务逻辑相对简单&#xff0c;我们往往较少关注程序架构层面的设计。 然而随着项目经验的积累&#xff0c;开发者会逐渐意识到模块间的耦合问题&#xff1a;当功能迭代时&#xff0c;一处修改可能引发连锁反应。 此时&#xff0c;构…

Zookeeper三台服务器三节点集群部署(docker-compose方式)

1. 准备工作 - 服务器:3 台服务器,IP 地址分别为 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安装 Docker:确保每台服务器已安装 Docker 和 Docker Compose。 - 网络通信:确保三台服务器之间可以通过 IP 地址互相访问,并开放以下端口: - `2181`:Zookeeper 客户…

Mac关闭sip方法

Mac关闭sip方法 导航 文章目录 Mac关闭sip方法导航完整操作流程图详细步骤 完整操作流程图 这东西是我在网上搬运下来的&#xff0c;但是我在为业务实操过程中&#xff0c;根据实操情况还是有新的注意点的 详细步骤 1.在「关于本机」-「系统报告」-「软件」;查看SIP是否开启…

C++| 深入剖析std::list底层实现:链表结构与内存管理机制

引言 std::list的底层实现基于双向链表&#xff0c;其设计哲学与std::vector截然不同。本文将深入探讨其节点结构、内存分配策略及迭代器实现原理&#xff0c;揭示链表的性能优势和潜在代价。 1. 底层数据结构&#xff1a;双向链表 每个std::list节点包含&#xff1a; 数据域…

汉诺塔问题——用贪心算法解决

目录 一&#xff1a;起源 二&#xff1a;问题描述 三&#xff1a;规律 三&#xff1a;解决方案 递归算法 四&#xff1a;代码实现 复杂度分析 一&#xff1a;起源 汉诺塔&#xff08;Tower of Hanoi&#xff09;问题起源于一个印度的古老传说。在世界中心贝拿勒斯&#…

【Python】Python 100题 分类入门练习题 - 新手友好

Python 100题 分类入门练习题 - 新手友好篇 - 整合篇 一、数学问题题目1&#xff1a;组合数字题目2&#xff1a;利润计算题目3&#xff1a;完全平方数题目4&#xff1a;日期天数计算题目11&#xff1a;兔子繁殖问题题目18&#xff1a;数列求和题目19&#xff1a;完数判断题目21…

【linux】--- 进程概念

进程概念 1.认识冯诺依曼结构2. 操作系统&#xff08;Operator system)2.1 概念2.2 设计OS的目的2.3 理解操作系统2.4 如何理解管理2.5 理解系统调用和库函数 3. 进程3.1 基本概念和基本操作3.1.1 描述进程 - PCB3.1.2 task_struct3.1.3 查看进程 3.2 进程状态3.2.1 运行&&…

算法堆排序记录

【算法】排序算法之堆排序 - 知乎 应用场景&#xff1a;获取第n个大或者小的数 操作步骤&#xff1a; 1、将数组构造成堆 2、调整根节点为最大堆 ->倒序对每个根节点执行最大化 ->根节点最大化过程中如果发生交换&#xff0c;需要保证子节点也为最大堆&#xff08;执行…

STM32 模块化开发实战指南:系列介绍

本文是《STM32 模块化开发实战指南》系列的导读篇,旨在介绍整个系列的写作目的、适用读者、技术路径和每一篇的主题规划。适合从事 STM32、裸机或 RTOS 嵌入式开发的个人开发者、初创工程师或企业项目团队。 为什么要写这个系列? 在嵌入式开发中,很多人刚开始都是从点亮一个…