2

Если ваш компьютер (предположим, Windows) подключен через проводную локальную сеть и имеет USB-ключ, который обеспечивает 3G-интернет, как ваш компьютер узнает, какое соединение использовать при просмотре веб-страниц? Линукс следует тем же правилам, что и Windows?

2 ответа2

2

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

Я собираюсь объяснить таблицу маршрутизации на примере Linux, но Windows практически такая же. Основное отличие состоит в том, как он маркирует интерфейсы.

Допустим, у вас есть 3 сетевых подключения, каждое из которых подключено к разным сетям, например:

eth0 -> 10.0.0.0/24
eth1 -> 172.16.0.0/24
eth2 -> 192.168.0.0/24

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

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.0.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth0

Итак, если вы хотите подключиться к одной из этих сетей, ваша система Linux решит, какое соединение использовать, основываясь на сети назначения. Если вы хотите подключиться к серверу с IP 10.0.0.233, он будет использовать eth0. Если вы хотите подключиться к 192.168.0.4, он будет использовать eth2.

Итак, что насчет сетей, которые конкретно не указаны в таблице маршрутизации? Ну, вот где приходит маршрут по умолчанию. Обратите внимание на последнюю строку в этой таблице маршрутизации:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
...
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth0

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

Более длинная версия заключается в том, что решения о маршрутизации основаны на длине префикса сети. Данный пакет будет следовать по маршруту с наиболее конкретным подходящим пунктом назначения. Вот примерный список сетей в нотации CIDR, которые варьируются от наиболее до наименее специфичных:

10.100.4.0/24  <-- Most specific
10.100.0.0/16
10.0.0.0/8
0.0.0.0/0      <-- Least specific

Таким образом, с учетом целевого IP-адреса 10.100.6.231 наиболее конкретным диапазоном сопоставления в приведенном выше списке является 10.100.0.0/16, поэтому будет следовать маршрут для этой сети. Если пунктом назначения является 144.92.12.24, наиболее конкретный диапазон соответствия - 0.0.0.0/0 (который является маршрутом по умолчанию). После принятия решения о маршрутизации система отправит трафик по соответствующему сетевому соединению.

Это стало немного скучным, но я надеюсь, что это все объясняет. Обычно маршрут по умолчанию определяет, через какой интернет-трафик будет проходить соединение. Маршрут по умолчанию настраивается по-разному в Windows и Linux, но в конечном итоге все работает по одному и тому же базовому механизму маршрутизации.

1

Windows использует порядок привязки.

Это в основном упорядоченный список подключений, которые нужно попробовать. Windows попытается установить первое соединение, а в случае неудачи перейдет к следующему и т.д. Для интернета почти всегда будет использоваться первый. Второе соединение может использоваться, если вы находитесь в локальной сети и глобальной сети, а второй сетевой адаптер подключается к определенной схеме IP (192.168.4.X например), который не является частью первого NIC.

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

РЕДАКТИРОВАТЬ:

Ответ Баумгарта ниже лучше для Linux ...

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