将以太网帧发送到本地网络中的另一台机器的正确方法是什么?


1

我最近开始学习OSI模型,网络和东西。
因为我喜欢在C中编码,所以我想发送自己的以太网帧。

我现在开始工作了;但是,我仍然不确定一件事:
从机器发送以太网帧时 一个 加工 (假设两台机器在同一网络中),我必须指定哪个MAC地址 目的地 帧的MAC地址?
我尝试了路由器的MAC地址和机器的MAC地址 ,两种方式都有效。获取机器的MAC地址 ,我只是提出了一个ARP请求。

但是,正确的方法是什么?

我在机器上用Wireshark监控流量 一个 tcpdump的 在机器上 。这是机器上的输出 e0:d5:5e:c6:52:9a 是机器的MAC地址 ):

指定机器时 的MAC地址作为目的地址( a0:ce:c8:10:75:8c 是机器的NIC MAC 一个 ):

18:42:46.152800 a0:ce:c8:10:75:8c > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 64: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5

将路由器的MAC地址指定为目标地址时( c8:0e:14:fd:f3:23 是路由器的NIC MAC):

18:45:04.735375 c8:0e:14:fd:f3:23 > e0:d5:5e:c6:52:9a, ethertype IPv4 (0x0800), length 60: 192.168.178.21.23455 > 192.168.178.27.23456: UDP, length 5

这个结果表明路由器重写了 资源 MAC地址并可能使用其缓存来确定目标IP的正确目标MAC地址。

路由器如何处理机器MAC地址的帧 指定?

两种方式之间有区别吗?

有一种首选/正确的方法吗?

Answers:


2

如果您知道目标计算机位于本地子网上,则通常正确的方法是直接使用目标计算机的MAC地址(必要时进行ARP查找)。这会奏效 而不管 框架的ethertype或内容,通常会绕过路由器(它将通过以太网交换机短路)。

如果 如果帧包含IPv4或IPv6,您可以将其发送到子网的路由器,该路由器将执行ARP查找并将帧的有效负载转发到目标IP地址所属的任何主机。 (毕竟,这就是路由器 做: 它们转发IP数据包 - 即使它只是意味着将它们反射回同一个接口。)

但是,通过路由器发送本地数据包效率很低,在大多数情况下完全没有必要。对于更便宜的路由器,它可能意味着由非常慢的CPU处理数据包(与以太网交换机的全线速度相比)。

那说,第二种方法 偶尔在实践中使用,以及交换机和接入点上的“客户端隔离”(也称为“私有VLAN”)功能。


2

请记住,以太网没有路由器。路由器是第3层(网络层,例如IP生存)概念,它是以太网之上的层,以太网本身应该不知道。

放入以太网报头的目标字段的正确地址是目标主机的以太网MAC地址。

在您的问题中,您还提到向主机发送以太网帧,并且事实证明,以太网帧包含与您发送给它的以太网目标不同的IP主机的IP数据报。因此,IP主机恰好充当路由器,并通过将其发送回相同的以太网LAN来为您路由您的IP数据报,但这次使用与IP主机地址对应的正确以太网目标地址,IP数据报是地址至。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.