Если ваш компьютер (предположим, Windows) подключен через проводную локальную сеть и имеет USB-ключ, который обеспечивает 3G-интернет, как ваш компьютер узнает, какое соединение использовать при просмотре веб-страниц? Линукс следует тем же правилам, что и Windows?
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, но в конечном итоге все работает по одному и тому же базовому механизму маршрутизации.
Windows использует порядок привязки.
Это в основном упорядоченный список подключений, которые нужно попробовать. Windows попытается установить первое соединение, а в случае неудачи перейдет к следующему и т.д. Для интернета почти всегда будет использоваться первый. Второе соединение может использоваться, если вы находитесь в локальной сети и глобальной сети, а второй сетевой адаптер подключается к определенной схеме IP (192.168.4.X например), который не является частью первого NIC.
Я не знаю достаточно о сетевом взаимодействии Linux, чтобы решить эту проблему, но некоторые быстрые поиски показывают, что это может работать аналогично. Я проверю еще немного и вернусь с редактированием, если у меня будет окончательный ответ.
РЕДАКТИРОВАТЬ:
Ответ Баумгарта ниже лучше для Linux ...