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

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:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值