Назад | Перейти на главную страницу

Понимание «форварда» в Linux

Какая часть linux отвечает за "пересылка«трафик между интерфейсами?

Я знаю о "/ proc / sys / net / ipv4 / ip_forward"но какая часть ОС, ядра или модуля на самом деле проверяет этот параметр и решает, выполнять пересылку или нет?

Ядро сидит там и бездумно пересылает любой полученный пакет, который не адресован этому компьютеру, на другой интерфейс на основе таблицы маршрутизации?

Это очень фундаментальный вопрос, который я всегда хотел глубоко понять.

Какая часть Linux отвечает за «пересылку» трафика между интерфейсами?

Сетевой стек IP. Все IP-протоколы - UDP, TCP и т. Д. - используют одни и те же основные инструменты маршрутизации и поведение. Это также верно и для IPv6, который имеет несколько иную реализацию, но в основном ту же архитектуру.

Сидит ли там ядро ​​и бездумно пересылает любой полученный пакет, который не адресован этой машине, на другой интерфейс на основе таблицы маршрутизации?

Да. За исключением части «бездумно», где вы хотели сказать «как задумано».

Процесс прост: когда машина, которая подтверждает соответствие спецификации IP, получает пакет, она принимает очень простые решения; основной процесс:

  1. Убедитесь, что это нормальный пакет.
  2. Проверьте, предназначен ли он для локального IP-адреса, и доставьте локально, если да.
  3. Найдите следующий переход из таблицы маршрутизации.
  4. Отправьте пакет на этот следующий переход или отправьте сообщение об ошибке «недоставлено».

В ip_forward(...) Метод вызывается как часть общего алгоритма и настолько прост, насколько вы могли подумать. IP - это, по сути, очень простой протокол.