【发布时间】:2014-08-01 20:03:56
【问题描述】:
更改网络接口的 MAC 地址(ifconfig eth2 hw ether BB:BB:BB:BB:BB:BB)如何影响未处于混杂模式的 NIC?
当我使用 ifconfig 更改我的网卡的 MAC 时,它会在重新启动后恢复为原始 MAC。 据我了解,这意味着网卡将其原始MAC保存在自己的非易失性存储器中,Linux每次启动时都会读取这个原始MAC。 这一定意味着 ifconfig 不会更改保存在 NIC 自己的非易失性内存中的 MAC 值。此值保持不变。
尽管如此,当我使用 ifconfig 更改 MAC 时,Linux 开始使用这个新 MAC 作为源 MAC 发送以太网帧。
据我所知,未处于所谓“混杂模式”的 NIC 会拒绝其目标 MAC 地址与 NIC 的 MAC 地址不同的所有以太网帧(除非它是广播或多播)。 这意味着 Linux 甚至不会看到这些帧。它们将在到达 CPU 之前被丢弃。 我想 NIC 通过检查以太网帧的目标 MAC 地址与保存在 NIC 自己的非易失性存储器中的 NIC 的 MAC 地址来完成这项工作。
现在出现了一个我不明白的问题。 由于 NIC 使用其内部保存的原始 MAC 来决定是否在将帧传递给 CPU 之前将其丢弃,而 Linux 可能使用完全不同的 MAC 作为传出帧的源 MAC,那么对这些帧的响应如何到达 Linux 呢?
我对这个话题有什么误解?
我将举一个例子来更好地描述我的意思。
NIC 将 AA:AA:AA:AA:AA:AA 作为其原始 MAC 存储在其自己的内部非易失性存储器中。 它不处于混杂模式,因此它可以防止所有不包含 AA:AA:AA:AA:AA:AA 作为目标 MAC 的帧到达 CPU(和 Linux)。 现在有人输入:ifconfig eth2 hw ether BB:BB:BB:BB:BB:BB。 从现在开始,Linux 从此接口发送的传出帧将以 BB:BB:BB:BB:BB:BB 作为源 MAC。 最终,另一台主机将通过发送一个带有 BB:BB:BB:BB:BB:BB 作为目标 MAC 的帧来回复该帧。 这样的帧将到达第一台主机的 NIC。网卡现在会做什么?它将 BB:BB:BB:BB:BB:BB 与 AA:AA:AA:AA:AA:AA (内部存储在 NIC 的 ROM 中)进行比较,并决定不将其传递给 CPU?!?那么框架永远不会到达Linux?
问题在哪里?
【问题讨论】:
-
这个问题是题外话,因为它与编程无关。
-
它是关于编程的,因为我试图了解如何以编程方式强制 NIC 接受具有目标 MAC 而非 NIC 原始内置 MAC 的以太网帧,而无需将 NIC 放入混杂模式,并且知道它的内置 MAC 是不可更改的。
-
这不是关于编程的,请阅读 SO FAQ
-
我读过它,但我不同意。但我不会争论。
-
@PiotrS 这个问题属于 superuser.com。