OSI层的封装和解封装基础

网络工程 层2 奥西 第3层 第一层 第4层
2021-07-30 08:48:58

我已经读过封装发生在层下,而解封装发生在层上。本质上,封装从应用层开始一直到物理层。假设我们有一个发送者 A 和接收者 B.Sender A 想要 http 到服务器 B。所以为了封装 A 端的层,我们会有,

应用程序(http)-演示文稿-会话-传输(TCP 端口 80)-网络(A 的 IP 地址)-数据链路(Mac)-物理(位 0 和 1)。

从上面,我们可以说上层(比如网络层)的PDU(协议数据单元)变成了下层(比如数据链路层)的数据。

本质上,网络层的(数据+控制信息)=数据链路层的(数据)

现在来到接收端 B(解封装过程) 步骤 1:剥离物理层头

第二步:剥去数据链路层头

Step 3:剥去网络层头等

Q1:以上理解正确吗?

问题 2:我对为什么首先剥离数据链路层信息感到困惑?我的意思是,当我们做 ARP 时,我们首先查看 IP 地址(第 3 层)并请求 mac 地址(第 2 层信息)。

我知道有一个叫做 Ethertype 的值,它说明正在使用什么上层协议(例如 mpls 或 IPv4 或 IPv6)?

2个回答

你似乎有大致的想法。

首先,真的没有物理层报头。物理层简单地采用数据链路层提供的信息,并对接口的数据链路帧(编码)进行编码,并将其放置在“线路”(信令)上,或者在接收数据时执行相反的操作。

当第 3 层向第 2 层发送数据包时,第 2 层需要用第 2 层头封装它。第 2 层报头的一部分可能包括用于使用 MAC 地址的第 2 层协议的 MAC 地址(并​​非所有协议都这样做,在使用 MAC 地址的协议中,有些使用 48 位 MAC 地址,有些使用 64 位 MAC 地址)。

为了将目的 MAC 地址放入第 2 层帧,目的第 3 层地址必须解析为第 2 层地址。第 2 层需要目标第 2 层 MAC 地址以构建第 2 层帧来封装第 3 层数据包。这就是 ARP(地址解析协议)的用武之地。

ARP 与离开主机的数据有关,而不是进入主机的头被剥离的主机。根据网络堆栈实现,当第 2 层帧进入主机时,当帧从数据包中剥离时,MAC 地址可能会保存在主机的 ARP 缓存中。第 2 层将检查第 2 层帧以确定应将帧有效负载(第 3 层数据包)发送到网络堆栈中的哪个第 3 层协议。

Ethertype 字段是以太网帧头中的一个字段。其他第 2 层协议有其他方法可以做到这一点。请记住,以太网可能是最常用的第 2 层协议,但它不是唯一的第 2 层协议,并且每个协议都有自己的帧头。第 3 层协议可以具有相同类型的事物。例如,IPv4有Protocol字段,IPv6有Next Header字段,用来告诉第3层第3层数据包的有效载荷应该发送到哪个第4层协议。

虽然您对封装的理解是正确的,但实际上并没有按照您在某些图中描述或看到的方式逐步“剥离”封装。

当网卡接收到数据包时,它会将其存储在计算机内存中某处的缓冲区中。从这一点开始,出于效率和方便的原因,大多数系统将尝试最小化任何数据复制。

大多数应用程序*将数据包较低层的所有处理留给操作系统,因此大部分处理将由直接在该缓冲区上工作的例程完成,访问所有数据,忽略不需要的部分. 因此,正在检查(例如,数据包的目标 IP 地址)的例程将可以访问链接级标头,但只是忽略它们。在某些情况下,特定例程可能会查看多个层来提取它们需要的信息,例如,确定应将 TCP 或 UDP 数据发送到哪个应用程序的例程将不得不查看 IP 层以获取目标 IP 地址和目标端口的 TCP/UDP 层,因为 IP 地址和端口共同构成了将识别侦听应用程序的完整地址。

一旦操作系统对数据包进行了足够的处理以知道它是什么类型以及数据的去向,它通常会将数据的相关部分复制到另一个缓冲区以传递给应用程序。

_ _
* 诸如此类的程序tcpdump是一个显着的例外。