为什么通过PPP连接的两个路由器不使用ARP而以太网使用ARP?

网络工程 路由器 协议理论 层2 arp 第3层
2021-07-09 09:27:31

我从@Ron Maupin 对这个问题的回答中 读到,您的两个路由器通过 PPP 连接(这种情况并不少见),不会使用 ARP,但如果两个路由器通过以太网连接,则将使用 ARP。我的问题是——

(A)两个路由器通过PPP(point to protocol)连接是什么意思?据我了解,两台路由器是直连的。

(B)为什么如果两个路由器通过 PPP 连接,则不需要 ARP?

(C)两台路由器通过以太网连接是什么意思?根据我的理解,在两个路由器之间存在任何第 2 层设备,如交换机或网桥。

(D)为什么如果两个路由器通过以太网连接,那么需要 ARP?

(E)如果两个路由器直接相连,那么它们可以通过 IP 地址或 Mac 地址或两者进行通信?

2个回答

(A) 两个路由器通过PPP(point to protocol)连接是什么意思?据我了解,两台路由器是直连的。

路由器(或任何节点)可以使用 PPP 连接。PPP 使用像 RS-232 这样的底层简单串行接口,并提供 IP(数据成帧)所需的数据链路层功能。

(B) 为什么如果两个路由器通过 PPP 连接,则不需要 ARP?

这些接口是点对点的,不使用寻址,因此没有使用 ARP。

为完整起见:PPP 成帧规范 ( RFC 1662 )确实包含一个 8 位地址字段,但由于未使用 L2 寻址(该成帧是从 HDLC 中借用的),该地址字段被指定为常量 0xff:

3.1. 帧格式

...

地址字段

地址字段是单个八位字节,其中包含二进制序列 11111111(十六进制 0xff),即全站地址。不分配单个站地址。必须始终识别和接收全站地址。

因此,具有任何其他地址的 PPP 帧都是无效的。

(C) 两台路由器通过以太网连接是什么意思?

路由器可以通过以太网与点对点链路(简单电缆)或使用交换机连接。在任何情况下,以太网都是点对多点网络,需要正确的 MAC 地址。

(D) 为什么如果两个路由器通过以太网连接,那么需要 ARP?

ARP 仅用于基于 MAC 的网络上的 IPv4,最突出的是以太网/IEEE 802.3 或 IEEE 802.11。

基于 MAC 的网络需要顶部的协议为其有效负载指定所需的目标 MAC 地址。IPv4 使用带有广播地址的 ARP 来了解目标 MAC。然后它使用底层网络作为 L2 来传递它的数据包。

您不能在这样的点对多点网络上运行 PPP,但可能有特殊的变体,如 PPPoE。

PPPoE 在以太网的 L2 之上创建了另一个 L2,但 PPPoE 和 IP 之间仍然没有寻址(PPPoE 使用以太网向下的 MAC 地址,即以太网的 MAC 地址由 PPPoE 控制,而不是 IP)。

(E) 如果两个路由器直接相连,那么它们可以通过 IP 地址或 Mac 地址或两者进行通信?

任何使用 IP 的节点都使用底层数据链路层 (L2) 协议进行本地通信。L2 协议可以沿 IP 路径变化。以太网包括所需的 L2 协议,串行链路需要 PPP、(过时的)SLIP 或类似的东西。

基本上,路由器使用 IP 地址在网络层 (L3) 进行通信。如上所述,他们还需要在某些网络上使用适当的 L2 寻址,因此需要 ARP(或 ipV6 的 NDP)作为“胶水”。

这个问题有点不好回答。不同的协议使用不同的方式传输其数据。

OSPF使用IP,RIP使用IP/UDP,IS-IS直接使用第2层。此外,支持多播的链路上的地址也不同。

(A)和(B)已经回答了。

(C) 两个路由器通过以太网连接是什么意思?根据我的理解,在两个路由器之间存在任何第 2 层设备,如交换机或网桥。

我认为这意味着接口是以太网。开关可能存在也可能不存在。基于 PPP 的以太网的重要性在于可能有多个设备连接(例如,使用交换机),并且可以使用以太网的广播/多播功能访问它们。

(D) 为什么如果两个路由器通过以太网连接然后需要 ARP?

如果数据包通过 IP 发送并被发送到作为目的地的单播 IP(即另一个接口的 IP),则应该发生通过以太网发送具有 ARP 的数据包的“正常”过程。

请注意,对于路由协议数据包,这是一个非常大的“IF”。大多数数据包将被发送到广播或多播地址。

对于正常转发的数据包(带有有效载荷),这成立。

(E) 如果两个路由器直接相连,那么它们可以通过 IP 地址或 Mac 地址或两者进行通信?

两个(直接连接的)路由器最终总是通过其链路的第 2 层协议进行通信。也就是说,每个接口上都应该存在第 2 层处理。每个路由协议决定在第 2 层之上堆叠哪些其他协议。但是请注意,在谈论路由协议数据包时,在大多数情况下* IP 是一种“虚拟”。它有地址,但路由器还不能根据这些地址进行路由。它只能将数据包转发到下一个直接跳。

[*] 这并不完全正确,一些协议允许将 IP 地址用于非直接邻居(例如 OSPF 中的虚拟链接),但它们描述了如何使用已计算的路由来实现这一点的过程。