3

Представьте, что у нас есть IP-пакет, и нам нужно выяснить, через какой интерфейс он должен быть отправлен. Есть eth0 (например), соответствующий нашему адресу назначения пакета.

Но что, если существует более одного протокола канального уровня поверх eth0?

Например, Ethernet и PPPoE . Как мы выясним, какой протокол должен использовать пакет?

2 ответа2

4

Я не думаю, что вы можете иметь более одного уровня связи на одном интерфейсе.

В случае PPPoE установление соединения PPP создает другой интерфейс, обычно называемый ppp0 . Ваша запись в таблице маршрутизации будет указывать на ppp0 , а не на eth0 . Когда пакет направляется в ppp0 , он фактически передается локальному программному обеспечению PPPoE, никуда не передается. Но затем программное обеспечение PPPoE создает новый пакет, который он передает через eth0 .

Кстати, это похоже на работу некоторых VPN. Например, OpenVPN создает новый интерфейс под названием tun0 или tap0 , чей "канальный уровень" является демоном OpenVPN. Отправьте пакет одному из них, и демон зашифрует его и поместит зашифрованный текст в новый пакет, обычно простой UDP, адресованный удаленному серверу OpenVPN. Этот пакет проходит процесс маршрутизации и находит свой путь к реальному интерфейсу, подобному eth0 .

(В отличие от примера VPN, когда PPPoE отправляет пакет через eth0 , он не полагается на таблицу маршрутизации для маршрутизации пакета туда, потому что eth0 не настроен с IP-адресом и пакеты не могут быть направлены на него. Вместо этого я думаю, что он использует необработанный сокет для отправки пользовательского кадра Ethernet, адресованного MAC-адресу однорангового узла PPPoE, который содержит полезную нагрузку PPP, а не полезную нагрузку IP. RFC 2516 содержит подробности протокола.)

0

Никогда не бывает более одного протокола уровня данных, работающего через интерфейс (если вы не делаете что-то очень-очень странное). Где бы это ни казалось, почти всегда происходит какая-то форма туннелирования или инкапсуляции - обычно есть какой-то другой виртуальный интерфейс, "движущийся поверх него".

"PPPoE" означает PPP через Ethernet. Физический интерфейс eth0 использует Ethernet в качестве протокола уровня 2. PPP - это слой поверх него, управляемый демоном PPPoE. Таким образом, пакеты PPP "канального уровня" в конечном итоге инкапсулируются в кадры Ethernet.

В основном PPPoE работает как программное обеспечение для туннелирования /VPN, как говорит @Wyzard. Туннели имеют виртуальный интерфейс с одной стороны, программное обеспечение для деинкапсуляции в середине, а затем реальный интерфейс с другой стороны.

Таким образом, у вас будет интерфейс, такой как ppp0 или любой другой, который подключен к демону PPPoE, а затем демон PPPoE инкапсулирует то, что входит в ppp0, и выталкивает из eth0. И наоборот.

Следует иметь в виду, что поскольку значение MTU для Ethernet равно 1500, для заголовка PPPoE необходимо выделить 8 байт, поэтому значение MTU для интерфейса PPPoE становится равным 1492.

Вам не нужно напрямую касаться eth0, так как все, что вы хотите получить из eth0 - это пакеты PPPoE для вашего поставщика DSL. Это та же общая концепция для VPN или туннелей IPv6-over-IPv4.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .