Как изменение MAC-адреса сетевого интерфейса с помощью ifconfig влияет на сетевой адаптер, который не находится в случайном режиме?
Как изменение MAC-адреса сетевого интерфейса (ifconfig eth2 hw ether BB: BB: BB: BB: BB: BB) влияет на сетевой адаптер, который не находится в случайном режиме?
Когда я использую ifconfig для изменения MAC- адреса моей сетевой карты, он возвращается к исходному MAC-адресу после перезагрузки. Насколько я понимаю, это означает, что у сетевой карты есть свой оригинальный MAC, сохраненный в его собственной энергонезависимой памяти, и Linux читает этот оригинальный MAC каждый раз, когда он загружается. Это должно означать, что ifconfig не изменяет значение MAC, сохраненное в собственной энергонезависимой памяти NIC. Это значение осталось нетронутым.
Тем не менее, когда я меняю MAC с помощью ifconfig, Linux начинает отправлять кадры Ethernet с этим новым MAC в качестве source-MAC.
Из того, что я узнал, NIC, который не находится в так называемом "неразборчивом режиме", отклоняет все кадры Ethernet, MAC-адреса назначения которых отличаются от MAC-адреса NIC (если это не широковещательная или многоадресная передача). Это означает, что Linux даже не увидит эти кадры. Они будут сброшены до достижения процессора. Я предполагаю, что NIC выполняет эту работу, проверяя MAC-адрес назначения кадра Ethernet по MAC-адресу NIC, сохраненному в собственной энергонезависимой памяти NIC.
Теперь возникает проблема, которую я не понимаю. Так как NIC использует свой собственный исходный MAC-адрес, чтобы решить, следует ли отбрасывать кадр перед передачей его в ЦП, и Linux может использовать совершенно другой MAC-адрес в качестве исходного MAC-адреса для исходящих кадров, то как ответ на такие кадры достигает Linux?
Что я неправильно понимаю в этой теме?
Я приведу пример, чтобы лучше описать, что я имею в виду.
Сетевая карта имеет AA: AA: AA: AA: AA: AA, хранящиеся в собственной внутренней энергонезависимой памяти в качестве исходного MAC. Он не находится в случайном режиме, поэтому он предотвращает попадание всех ЦП, не содержащих AA: AA: AA: AA: AA: AA в качестве MAC-адреса назначения, в ЦП (и 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 первого хоста. Что теперь будет делать NIC? Он будет сравнивать BB: BB: BB: BB: BB: BB с AA: AA:AA:AA:AA:AA:AA (хранится внутри в ПЗУ NIC) и решит не передавать его в ЦП?!? Таким образом, кадр никогда не достигнет Linux?
Где подвох?
1 ответ
MAC-адрес в современных сетевых интерфейсах является изменчивым значением, хранящимся в регистре конфигурации микросхемы. Это единственное значение, которое используется в работе чипа вне инициализации. Это значение инициализируется при запуске из энергонезависимой памяти - либо самим чипом, либо драйвером, в зависимости от конструкции конкретного чипа.
Энергонезависимое значение не используется ни для чего, кроме инициализации. Это, конечно, не используется для фильтрации входящих пакетов - энергонезависимая память слишком медленная для этого. Во время работы сетевого интерфейса энергонезависимая память не используется и не используется.
Разнородность NIC не имеет ничего общего с вашим вопросом. Как только вы назначаете новый MAC, он вступает в силу, независимо от того, каким может быть содержимое энергонезависимой памяти, и не важно, является ли интерфейс разнородным или нет.
Наконец, энергонезависимая память в интерфейсе NIC является необязательной. Во многих мобильных системах (например, ноутбуках) нет энергонезависимой памяти, выделенной для NIC. MAC-адрес сетевой карты хранится в энергонезависимой памяти, в которой хранятся другие энергонезависимые данные конфигурации системы. Это экономит власть и деньги.