Где код маршрутизатора ядра Linux заменяет MAC-адрес - PullRequest
0 голосов
/ 12 декабря 2010

Маршрутизатор заменит исходный MAC-адрес пакета, который он получил, адресом предыдущего прыжка, а конечный MAC-адрес - адресом следующего прыжка.маршрутизатор.Мой вопрос заключается в том, как код ядра реализует функцию обновления MAC-адреса в процессе пересылки пакета?И где эта часть кода

Я пытаюсь найти коды в / net / ipv4, но ничего не могу найти ...

1 Ответ

2 голосов
/ 13 декабря 2010

Это не то, что на самом деле происходит.

IP не зависит от Ethernet, поэтому то, что происходит, зависит от базового протокола нижнего уровня.

То же самое происходит, если этолокально созданный IP-пакет или пакет, маршрутизируемый для другого хоста.

Стек Linux для IPv4 никак не зависит от Ethernet, фактически многие другие протоколы канального уровня поддерживаютсяядро.IP-протокол WAN, вы можете маршрутизировать между различными базовыми протоколами.Вот некоторые примеры:

  • ppp, slip (последовательные линии)
  • PPTP, GRE (для туннелей, в основном VPN)
  • IP через ATM
  • Token Ring (в основном устаревший, я думаю)
  • Loopback и dummy (только для локальной связи)
  • Wifi (хотя на самом деле это в основном идентично Ethernet)

Так что на самом деле происходит при маршрутизации IP-фреймов от одного интерфейса Ethernet к другому, что канальный уровень полностью удаляется, а после маршрутизации формируется новый канальный уровень.Если бы протокол не был Ethernet, вместо него был бы использован соответствующий пакет канального уровня для этого протокола.

Таким образом, никто не «меняет MAC-адрес», а пакет канального уровня просто полностью перестраивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...