Понимание базовой IP-маршрутизации в Linux

str="aaabbcaaabbcc"

echo $str | fold -w1 | uniq -c | \
while read count char; do
  if [ $count -gt 1 ]; then
    printf "$char$count"
  else
    printf "$char"
  fi
done

a3b2ca3b2c2

-1
26.05.2020, 12:01
3 ответа

Во-первых, я предлагаю вам прочитать базовый текст о TCP/IP и таблицах маршрутизации.

Let's say that an IP packet arrives at eth1. IP source: 192.168.1.1, IP destination: 199.178.167.431. Since this address is outside of the Genmask for eth1, linux will try to send it through the default gateway.

Пакет отбрасывается, поскольку IP-адрес назначения не соответствует определению интерфейса;

Let's say that an IP packet arrives at eth1. IP source: 192.168.1.1, IP destination: 192.168.1.2. Since this address is on the genmask for eth1, where will linux send this packet to? From which device?

Пакет отбрасывается, поскольку IP-адрес назначения не соответствует определению интерфейса;

Let's say that an IP packet arrives at eth0. There are two eth0 entries, so which one does Linux use to route this packet? Also, I don't have idea of the source and destination that this packet could have. Can anyone give an example?

Существует только одна запись, которая определяет конфигурацию уровня 3 интерфейса (192.168.1.24 0.0.0.0 255.255.255.252 U 0 0 0 eth0), так что двусмысленности не будет. Вы также видите, что шлюз по умолчанию сопоставляется с IP-адресом, который является локальным для интерфейса eth0, но это маршрут, который используется, когда все остальные терпят неудачу, поэтому он не совсем соответствует вашему вопросу.

В процессе маршрутизации ядро ​​всегда сопоставляет определения маршрутов от более к менее конкретным. Таким образом, если пакет должен быть перенаправлен на 10.1.2.3и у вас есть 2 определения маршрута 10.1.0.0/16на eth3и 10.1.2.0/24на eth4, пакет будет отправлен через eth4, потому что это наиболее конкретный маршрут, который соответствует пункту назначения.

1
18.03.2021, 23:32

Это не специфично для Linux, это просто правила IP-маршрутизации

Я начну с eth1 и eth2, самого простого случая.

В таблице маршрутизации ядра, предоставленной для eth1, пункт назначения — 192.168.0.0и маска сети 255.255.255.0. Это означает, что eth1 находится в сети с адресом 192.168.0, каждый компьютер в сети имеет адрес от 1 до 254; 0 и 255 имеют специальное значение :первый адрес сети — сетевой адрес, последний — широковещательный адрес. Таким образом, каждый компьютер имеет полный адрес «сетевой адрес». «Адрес компьютера» :, например, 192.168.0.45 с сетевой маской 255.255.255.0 — это адрес компьютера 45 в сети 192.168.0. Без шлюза на этом интерфейсе единственные IP-пакеты, которые интерфейс будет принимать, имеют эту форму. Поэтому нет маршрутизации пакетов с исходным IP-адресом 192.168.1.1 :Этот адрес не находится в сети 192.168.0.0, и IP-пакет отбрасывается.

То же самое с eth2 с той разницей, что сеть имеет адрес 192.168.25.0

Для eth0 существует 2 маршрута. Первый (пункт назначения 192.168.1.24, маска 255.255.255.252, без шлюза )для локальной сети, второй (пункт назначения 0.0.0.0, маска 0.0.0.0, шлюз 192.168.1.25 )это маршрут "по умолчанию". Этот маршрут означает «если вы не знаете, что делать с определенным пакетом, отправьте его через 192.168.1.25». Эта сеть имеет маску 255.255.255.252. 252 бинарный 11111100 и эта сеть имела 4 адреса :192.168.1.24 (сетевой адрес ), 192.168.1.25 (адрес шлюза, это мы видим в таблице маршрутизации ), 192.168.1.26 (свободный адрес ), 192.168.1.27 (широковещательный адрес ). Нетрудно догадаться, что eth0 имеет IP-адрес 192.168.1.26.

В любом случае маршруты используются внутренне для ответа на вопрос «куда я отправляю этот пакет».Предполагая, что в вашем ядре включена маршрутизация (/proc/sys/net/ipv4/ip_forward, установленная на 1 ), у нас может быть другой случай:

  • пакет с ip-источником 192.168.1.1поступает в сеть eth1 (192.168.0.0 ); пакет отбрасывается
  • пакет с ip-источником 192.168.0.45поступает в сеть eth1 (192.168.0.0 )с ip-адресом назначения 192.168.25.32. Пакет принимается ядром и согласно таблице маршрутизации выводится через eth2
  • пакет с ip-источником 192.168.0.45поступает в сеть eth1 (192.168.0.0 )с ip-адресом назначения 97.67.25.49. Пакет принимается ядром, но ядро ​​не знает эту конкретную сеть и, согласно таблице маршрутизации, отправляет через eth0 на 192.168.1.25 (шлюз )ip-пакет.
  • пакет с ip-источником 192.168.0.45поступает в сеть eth1 (192.168.0.0 )с ip-адресом назначения 192.168.1.1. Пакет принимается ядром, но ядро ​​не знает именно эту сеть (он знает 192.168.1.24/30, которая не содержит 192.168.1.1 )и по таблице маршрутизации отправляет через eth0 для 192.168.1.25 (шлюз )ip пакет.
0
18.03.2021, 23:32

Маршрутизация пакета не зависит от того, через какой интерфейс он пришел (, ну, по крайней мере, не используется обычная «не -расширенная» маршрутизация ). Пакет мог быть сгенерирован процессом на хосте, и в этом случае он вообще не был бы получен из сети. Только хосты, которые действуют как маршрутизаторы, пересылают пакеты, т. е. повторно отправляют входящие пакеты, если они не предназначены для них. На серверах и рабочих станциях обычно отключена переадресация, и в этом случае они отбрасывают входящие пакеты, которые не предназначены для них.

Способ маршрутизации исходящего пакета работает одинаково независимо от того, генерируется пакет локально или пересылается. :сверяется с таблицей маршрутизации и выбирается наилучший маршрут (с «самым длинным совпадением префикса» ). Если узел назначения находится в сети с прямым подключением, пакет отправляется непосредственно на узел назначения, в противном случае пакет отправляется на маршрутизатор в локальной сети. Адрес этого маршрутизатора находится в столбце «Шлюз» в соответствующей строке таблицы маршрутизации.

Let's say that an IP packet arrives at eth1. IP source: 192.168.1.1, IP destination: 199.178.167.431. Since this address is outside of the Genmask for eth1, linux will try to send it through the default gateway.

Ваши примеры немного надуманные; в реальном мире пакет с этим исходным адресом не придет на интерфейс eth1, потому что адрес принадлежит сети, подключенной к интерфейсу eth0. Если это происходит, что-то неправильно настроено. По этой же причине пакет отбрасывается.

Сетевая маска для сети на входящем интерфейсе(eth1в вашем примере )также не влияет на маршрутизацию пакета, роль играет только таблица маршрутизации. В общем, в «классической» маршрутизации выбор следующего перехода всегда основан на прогнозировании, а не на прошлой истории пакета (, например, на какой интерфейс, если таковой имеется, он пришел.)

0
18.03.2021, 23:32

Теги

Похожие вопросы