澄清路由器何时封装和解封装数据包

网络工程 路由 ip 以太网 第 2 层 第 3 层
2022-02-09 02:35:18

我是一名应用程序开发人员,致力于获取网络工程的工作知识,所以基本上是一个新手。我一直试图弄清楚路由器何时将帧解封装为数据包并将数据包封装为帧。我发现路由器是否发送帧或数据包?,而且我仍然很难弄清楚在将数据包从源发送到目的地的过程中何时封装和解封装。

Ron Maupin 回答了我以这种方式链接的问题:

路由器必须剥离第 2 层帧才能到达第 3 层数据包。然后,路由器根据第 3 层目标地址将数据包路由到通往目标的下一个接口。在下一个接口,它必须为下一个接口上的第 2 层协议的数据包构建一个新帧,这可能是与第一个接口上使用的完全不同的第 2 层协议。

根据这个答案的开头,我看到路由器剥离了第 2 层帧,然后路由数据包。这表明路由器路由数据包而不是帧。但随后答案说“在下一个接口,它必须为数据包构建一个新帧”,我无法将该语句与开始的语句相协调。

据我了解该过程,路由器路由到其他路由器,直到与目标网络节点相关联的路由器获得它并将其发送到该节点。因此,我看到答案中的“下一个接口”是路由上的下一个路由器,直到最后一跳,此时“下一个接口”是目标节点。如果是这样,那么这似乎是说路由器将数据包包装在帧中,然后再将它们发送到到达目的地的下一个路由器。

因此,在阅读罗恩的回答后,我仍然不完全清楚路由器是在互联网上发送帧还是“裸”数据包。在我看来,解封装在互联网上发送的任何帧会更简单,在它们从路由器传递到路由器时将它们保留为“裸”数据包(大概路由器使用 IP 来确定将数据包发送到哪里,因此不需要帧来移动它),然后,当数据包到达连接到目的地的路由器时,该路由器将数据包重新封装在与任何第 2 层协议一致的帧类型中它用。

这是实际发生的情况,还是路由器必须在将数据包转发到其他路由器之前将它们封装成帧,因此必须知道它可以发送到的每个路由器需要哪种类型的帧?(这对我来说似乎不是很有可扩展性。)

编辑:这是让我感到困惑的事情,来自维基百科关于数据链接层的文章

数据链路层关注网络同一级别节点之间的本地帧传递。称为这些协议数据单元的数据链路帧不会跨越局域网的边界。网络间路由和全局寻址是更高层的功能,允许数据链路协议专注于本地传送、寻址和媒体仲裁。

这非常接近断言,没有解释的余地​​,L2 参与仅限于 LAN 边界,而不是在互联网上发送数据包的一部分。

3个回答

基本上,您不能从接口发送原始数据包或裸数据包。

数据单元需要帧传输:标记数据的开始和结束,并通过网络引导该数据块,本质上。

因此,一个数据包需要被一个帧包装或封装以进行 L2 传输。该帧在整个 L2 网络(例如跨交换机)中使用,但需要由 L3 实体(路由器)删除以恢复实际数据包。当数据包被转发出去时,需要再次封装另一个接口,具体取决于L2 网络。

该机制允许您将多种不同且不兼容的 L2 协议(如以太网、Wi-Fi、VDSL、DOCSIS、LTE,甚至串行端口)组合到更大的 L3 网络中。

在数据链路和物理层之间发生了非常相似的事情。在 L2 网络(如以太网)中,它允许您组合一系列不同的媒体和速度。同一个帧可以沿其路径以 10BASE-T、1000BASE-SX、10GBASE-LR 进行编码和解码。

一般的想法是每一层都有一定的功能,但不太了解/关心其他层。L3 进行远距离路由,但实际上不能移动数据(!)。L2 管理本地规模有限的网络中的流并进行实际的打包——但它仍然不能物理地移动数据。L1 对这一切知之甚少,但它是真正移动比特的那个。

下图是封装在以太网帧中的 IPv4 数据包图。以太网(第 2 层)部分为蓝色阴影。IPv4 标头(第 3 层)为红色阴影。有效载荷(第 3 层之上)是白色的。

IP 路由器需要了解其每个接口上使用的第 2 层协议。对于许多路由器来说,这只是以太网;但还有其他第 2 层协议。在 1990 年代,帧中继和 ATM 等第 2 层协议非常流行。

路由器可以在 Internet 上运行,而无需了解那些旧协议,因为数据包的第 2 层部分(蓝色阴影部分)被转发数据包的每个路由器所取代。 蓝色部分甚至可以用完全不同的结构替换,用于不同的第 2 层协议。

以太网封装的 IPv4 数据包

当数据包从其源通过 Internet 转发到其目的地时,红色部分几乎保持不变(有一些警告)。所有 IP 路由器都以相同的方式处理红色部分。这就是使它们彼此兼容以及与我们的 PC 和其他设备兼容的原因;他们都知道如何处理数据包的红色部分,他们甚至不知道数据包可能已经通过了他们不熟悉的第 2 层协议。 这种抽象是经过深思熟虑的,允许在各种底层协议之上构建 IP 网络。

什么时候发生

您最初的问题是关于在路由过程中何时发生这种情况。答案是,第 2 层报头是对到达数据包进行检查的第一件事。通常,对于单播流量,如果以太网帧的目标 MAC 地址不是路由器拥有的 MAC 地址,它可以忽略该数据包,无需进一步处理。

何时构造新的第 2 层标头以将数据包转发到下一个路由器或主机?这发生在做出路由决定之后。该路由过程可能​​很复杂;有关 Linux 的 iptables 系统如何执行此操作的示例,请参见下图。但在最后一步,即组装新数据包所需的所有信息都知道的时候。创建新数据包的过程有时称为L2 重写过程,因为它所做的大部分工作是替换第 2 层标头。

Linux IPTables

路由器将数据从一个网络路由到另一个网络。因此路由器具有到两个或多个网络的物理连接(接口)。如果你只有两个网络,你只需要一个路由器。

因此,在您的示例中,路由器可能在以太网网络上有一个连接,在令牌环网络上有另一个连接。以太网络上的主机 H1 向令牌环网络上的主机 H2 发送一个 IP 数据包。H1 将封装在以太网帧中的 IP 数据包转发到路由器。

路由器剥离以太网帧,并根据目标 IP 地址决定从哪个接口转发数据包(在这种特殊情况下,只有一个其他接口,但路由器可以在不同的网络上有多个接口)。由于数据包必须在令牌环网络上到达 H2,路由器将数据包封装在令牌环帧中并将其发送到 H2。