网络原理(2)——封装和分用

news2024/9/25 7:13:49

1. 数据在网络通信中的整体流程:封装和分用

例子:通过 QQ 发送一个 hello 给另一个人

a) 发送方视角

1. 用户在输入框中输入 “hello” 字符串,点击发送按钮

QQ 这样的程序就会把 hello 这个内容从输入框读取到,并构造成一个“应用层数据包”

应用层数据包:应用层的网络协议就描述了这个数据包的构造,此处的应用层协议,往往是开发 QQ 程序员自行定义的

假设是下列方式定义的应用层数据包的结构:(定义方式不唯一)

数据包格式:发送者的QQ号;接收者的QQ号;发送时间;消息的正文\n

数据包样例:123456789;987654321;2024-08-06 12:00:00;hello\n

tip:进行网络传输数据,通常需要把一个“结构化”的数据,转化成一个“二进制字符串”

把结构化数据 => 二进制字符串 这个过程称为 序列化

把二进制字符串 => 结构化数据 这个过程称为 反序列化

2. QQ 这样的应用程序,会调用操作系统提供的 API(传输层给应用层提供的 API)

操作系统就会提供一个类似于“发送数据”这样的 API,然后应用程序就会把上述组织好的应用层数据包,作为参数进来,于是应用层数据包就到了系统内核里,就进入到传输层的代码部分了

此时传输层就会把上述的应用层数据再进一步封装成一个传输层数据包(计算机网络中的封装其实就是字符串拼接

由于传输层有多种协议(其中最主要的是两个:TCP 和 UDP,这两个协议给应用层提供的是两组不同的 API ),假设此处使用的是 UDP 协议

其中的 UDP 报头中就包含了一些 UDP 相关的信息,比如包含发送者的端口号和接收者的端口号

3. 传输层构造好数据之后,就会继续调用网络层提供给传输层的 API 把数据进一步交给网络层

由于传输层和网络层都是系统内核里面实现好的,上述的调用过程就无需关心了,我们也感知不到

网络层有多种协议,其中最主要的就是 IPv4 协议(简称为 IP 协议)

IP 协议就会把上述拿到的传输层数据包构造成网络层数据包(再次进行字符串拼接,拼上 IP 报头)

其中 IP 报头包含很多信息,最主要的:发送方 IP 地址,接收方 IP 地址

4. 网络层继续调用数据链路层的 API ,把数据交给数据链路层处理

数据链路层的常见协议:以太网(平时插网线进行上网的这种方式)

在 IP 数据包的基础上再进一步封装

5. 上述得到的数据进一步交给物理层(硬件设备)

网卡就会针对上述的二进制数据进行真正的传输操作,就需要把上述 0101 这样的序列转为 光信号/电信号/电磁波...

tip:网络传输数据的基本单位:

1. 数据包(packet):传输层

2. 数据报(Datagram):网络层

3. 数据段(segment):传输层

4. 数据帧(frame):数据链路层

这几个术语严格来说是有去别的,但是平时不会刻意区分

b) 接受方视角

1. 接收方物理层收到光电信号,把信号还原成 010101 这样的二进制字符串

2. 物理层转换回来的数据交给数据链路层,以太网拿到这个数据包就会对这个数据包进行解析

拿出数据包中的报头和载荷,根据报头信息决定这个数据包是丢弃还是转发,还是自己保留(向上进行解析)

此处接收方的工作就是发送方工作的“逆向工作”,发送方的封装认为是“打包快递”,接收方的分用,认为是“拆快递”

3. 网络层拿到了上述解析好的数据

IP 协议也要对这个数据包进行解析,取出 IP 报头和载荷

也需要根据报头中的信息确认,丢弃、转发、保留(给上层协议)

4. 传输层这边 UDP 协议,也要对数据进行解析,取出 UDP 报头和载荷

此处也需要把载荷的内容进一步交给应用层协议(应用程序)

依赖 UDP 报头中的“端口号”,端口号就是用来区分不同的进程的

5. 数据就到了 QQ 这样的应用程序里了

QQ就要针对上述数据进行“反序列化”,针对这里的数据进行进一步的逻辑:

1) 把收到的信息显示到界面上

2) 播放“嘀嘀嘀”的声音,提示收到消息

3) 显示弹窗提示收到消息

4) 更新未读消息的列表(红色圆圈写个数字)

......

tip:

中间过程的交换机和路由器也会涉及到封装和分用,但是他们没有上述过程那么复杂

交换机封装分用到数据链路层就可以决定数据是丢弃,还是转发,就不再继续分用了(这是经典的教科书上的交换机,如今的交换机又集成了很多其他功能),又称其为 二层转发

路由器封装分用到网络层就可以决定数据是丢弃,还是转发了,就不再继续分用了,又称其为 三成转发

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

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

相关文章

关于dubbo3.x端口绑定22222报错问题

目录 1.报错信息如下 2.由于每个dubbo应用注册的时候都当做一个qos-server ,有一个固定的端口号,默认是22222, 不同应用需要设置不同的端口号 3.在application.yml,或者在application.properties指定就好了(修改qos…

PUMA论文阅读

PUMA: Efficient Continual Graph Learning with Graph Condensation PUMA:通过图压缩进行高效的连续图学习 ABSTRACT 在处理流图时,现有的图表示学习模型会遇到灾难性的遗忘问题,当使用新传入的图进行学习时,先前学习的这些模…

Redis6-秒杀

目录 全局唯一ID 实现优惠券秒杀下单 超卖问题 一人一单 全局唯一ID 全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性: 为了增强ID的安全性,不直接使用Redis自增的数值,而是拼接一…

告别数据丢失烦恼,转转数据恢复和另外三款工具助你一臂之力!

不知道大伙儿有没有和我一样,到哪都喜欢拍照片和视频,加上办公上也是七七八八的各种格式的文件实在是多,所以电脑和手机等等设备上经常内存爆满需要清理,难免会出现不小心误删或者格式化、清空等等的情况,用过几款和转…

微服务实现-sleuth+zipkin分布式链路追踪和nacos配置中心

1. sleuthzipkin分布式链路追踪 在大型系统的微服务化构建中,一个系统被拆分成了许多微服务。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。 这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软…

嵌入式day22

getpwuid 通过uid 获取用户名 uid 用户uid 返回值: 成功 返回用户名 失败 NULL getgrgid 通过gid 获取组名 gid 组名gid 返回值: 成功 返回组名 失败 NULL 1、获取秒数 2、转换为需要的格式 time 获得1970年到现在的秒数(系统时间…

IEC103设备数据 转 CCLink IE Field Basic项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关采集103设备数是 2 5 使用CCLINK协议转发数据 4 6 三菱PLC连接网关的CCLINK的设置 5 7 IEC103协议说明 9 8 案例总结 10 1 案例说明 设置网关采集IEC103设备数据把采集的数据转成CCLink IE Field Basic…

UDP服务器实现

目录 一、服务端创建 1.1、创建套接字 1.2、端口绑定 1.3、sockaddr_in结构体 1.4、字符串IP和整数IP说明 1.5、绑定好端口号的服务端代码 1.6、服务端代码 二、客户端创建 2.1、关于客户端的绑定问题 2.2、客户端代码 一、服务端创建 首先明确,这个简单…

ThinkPad T14p Gen1(21J7,21N3)原厂Windows11系统镜像下载

LENOVO联想ThinkPad 系列笔记本电脑原装出厂Win11系统安装包,恢复出厂开箱状态预装OEM系统 适用型号:T14p Gen1【21J7,21N3】 链接:https://pan.baidu.com/s/1bLHdQoQ9zsAeZgd4c0ie4A?pwdxps2 提取码:xps2 联想原装WIN系统自…

QT 布局管理器之QHBoxLayout

文章目录 概述.ui来看看Cmain.cpp运行 小结 概述 QHBoxLayout,在QT中是一个布局文件,而且相对来说还是比较简单的。接下来看下。 .ui 先看下在qt design中是如何用的,如下图: 就是这个布局文件,是一个xml的文件&am…

Redis之golang编程实战

Redis 介绍 官网:Redis - The Real-time Data Platform Redis 可作为数据库、缓存、流引擎和消息代理的开源内存数据存储。被用在不计其数的应用中。Redis 连续 5 年被评为最受欢迎的数据库,是开发人员、架构师和开源贡献者参与社区的中心。 Redis 是…

苹果计划推出付费版Apple Intelligence AI服务,费用高达20美元

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 苹果计划推出付费版Apple Intelligence AI服务 苹果公司正在计划推出一项新的高级人工智能服务,名为Apple Intelligence&#xff0…

关于嵌套循环之深入理解

关于嵌套循环之深入理解 # 外层循环遍历第一维(深度) for depth in range(len(cube)):# 中层循环遍历第二维(行)for row in range(len(cube[depth])):# 内层循环遍历第三维(列)for col in range(len(cube[d…

秒懂C++之进程状态及优先级

目录 一.进程状态 1.1 进程排队 1.2 进程状态 运行状态 阻塞状态 挂起状态 二.Linux环境下的进程状态 R运行状态 S睡眠状态 D磁盘休眠状态 T停止状态 X死亡状态 Z僵尸进程状态 三.进程优先级 基本概念 查看系统进程 用top命令更改已存在进程的nice 一.进程状态…

【数据结构】十大排序全面分析讲解及其对比分析(排序看懂就这篇!)

【数据结构】十大排序全面分析讲解及其对比分析 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】十大排序全面分析讲解及其对比分析前言一.排序的概念及其运用1.1排序的概念1.2排序的应用 二.插入排序2.1 插入…

Gather:开启绝密社交和收益双重惊喜之旅

在数字时代,我们的隐私信息面临着严重的泄露风险,保护个人隐私变得尤为重要。基于区块链加专利硬件技术,Gather成为全球唯一实现真正绝密社交的DePIN社交产品,带来了划时代的社交体验。而其硬件产品G-BOX,不仅是你的隐…

Vercel Error: (Azure) OpenAI API key not found

题意:Vercel 错误:(Azure) OpenAI API 密钥未找到 问题背景: I implemented openAI API in my Next.js app with the help of langchain library and it works superb on localhost, but in Vercel (ProVersion) it throws an error: 我使用…

服务器磁盘扩容

一、扫描新硬件 如果通过命令: lsblk 没有看到新增的盘,使用如下命令,扫描新硬件 echo "- - -" > /sys/class/scsi_host/host0/scan二、查看磁盘和物理卷 查看新添加的硬盘设备名和物理卷的属性 fdisk -l pvdisplay下面的sdc是…

第四天博客顶顶顶

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…

论软件设计方法及其应写作框架软考高级论文系统架构设计师论文

论文真题 软件设计(Software Design,SD)根据软件需求规格说明书设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及程序流程等,形成软件的具体设计方案。软件设计把许多事物和问题按不同的层次和角度进行抽象,将…