Почему я могу общаться с машинами в локальной подсети без записи в таблице маршрутизации для локальной подсети?

239
KittenOverflow

Работает Ubuntu Linux 16.04, подключенный по Ethernet как 192.168.11.22 с маской подсети / 24. Маршрутизатор находится на 192.168.11.1.

Я ожидал, что таблица маршрутов будет выглядеть так:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.11.1 0.0.0.0 UG 100 0 0 enx50 192.168.11.0 0.0.0.0 255.255.255.0 U 1000 0 0 enx50 

Но он пропускает маршрут для локальной подсети и выглядит так:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.11.1 0.0.0.0 UG 100 0 0 enx50 

Но я все еще могу общаться с хостами в подсети. Как это возможно?

Я думал, что без маршрута для локальной подсети я даже не смог бы связаться со шлюзом (192.168.11.1).

1
Какую команду вы используете, чтобы получить эту таблицу маршрутизации? И вы уверены, что не находитесь внутри какого-то контейнера, такого как OpenVZ? David Schwartz 6 лет назад 0
Это похоже на вывод `route -n`. Что дает `ip route`? VL-80 6 лет назад 0
Да, вывод был из `route -n`. Вывод `ip route` показывает то же самое в своем собственном формате. Определенно не внутри контейнера - это было непосредственно на моей физической машине с Ubuntu. KittenOverflow 6 лет назад 0

1 ответ на вопрос

0
Twisty Impersonator

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

Пакеты, которые не покидают локальную подсеть, уже находятся в сети назначения, что делает ненужной маршрутизацию.

Вот что происходит, когда один компьютер хочет начать разговор с другим узлом в той же локальной сети:

  1. Узел A с IP 10.0.0.1 хочет отправить файл на узел B в 10.0.0.2.
  2. Узел A просматривает свой собственный IP-адрес и маску подсети (255.255.255.0) и понимает, что IP-адрес 10.0.0.2 находится в локальной подсети IP . Поэтому необходимо отправить данные непосредственно на это устройство вместо шлюза по умолчанию.
  3. Узел A использует протокол ARP для получения MAC-адреса компьютера в локальной сети с IP-адресом 10.0.0.2 и отправляет данные на этот узел.

Сравните это с тем, когда компьютеру необходимо взаимодействовать с узлом в другой подсети IP:

  1. Узел A с IP 10.0.0.1 хочет отправить файл узлу B на 172.25.0.2.
  2. Узел A просматривает свой собственный IP-адрес и маску подсети (255.255.255.0) и понимает, что IP-адрес 172.25.0.2 не находится в локальной подсети IP. Поэтому он должен отправить пакет на свой шлюз по умолчанию (10.0.0.254).
  3. Узел A использует протокол ARP для получения MAC-адреса устройства в локальной сети с IP-адресом 10.0.0.254 (шлюз по умолчанию) и отправляет данные этому устройству.
  4. Шлюз по умолчанию (т. Е. Маршрутизатор) использует свою таблицу маршрутизации, чтобы решить, куда отправить данные дальше. Этот процесс повторяется до тех пор, пока данные не достигнут сети назначения. В этот момент описанный выше процесс заканчивается, так как два устройства будут находиться в одной подсети IP.

Дополнительная информация