Предпочтение сетевого интерфейса

8

Как Linux определяет, какой сетевой интерфейс использовать, когда оба подключены к одной сети?

Обратите внимание, что это не вопрос маршрутизации. Я знаком с тем, как это работает. Это, если, скажем, мой ноутбук подключен к моему беспроводному маршрутизатору через мою Ethernet-карту и мою беспроводную карту, или если у меня есть две Ethernet-карты, подключенные к одному маршрутизатору.

По опыту могу сказать, что в моем случае мой ноутбук предпочитает Ethernet-карту (eth0) по беспроводной (eth1 - я знаю, что это не типичное название для беспроводного интерфейса, но это то, что у меня есть), но я был интересно, как это решает это? Если он просто выбирает интерфейс с наименьшим номером, что если два варианта, скажем, eth0 и wlan0?

Редактировать: @Nils указал, что это все еще вопрос маршрутизации, и таблица маршрутизации предоставляет ответ (см. Его ответ). Это все еще оставляет мой первоначальный вопрос, но в другой форме. От чего зависит порядок записей в таблице маршрутизации в Linux? Например, вот моя таблица маршрутизации при подключении к обоим интерфейсам:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.4.1     0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1

Понятно, что eth0 имеет более высокий приоритет в таблице, чем eth1 для мест назначения в локальной сети, но решено ли это в Linux по задержке канала, пропускной способности канала, даже имени интерфейса или как? (Тот же вопрос может возникнуть, почему eth0 является интерфейсом для маршрута по умолчанию.)

Доминик Пасторе
источник

Ответы:

6

Ну, это вопрос маршрутизации.

Ответ прост: первая запись, которая даст лучшую запись маршрутизации, - «победитель». Поэтому посмотрите, netstat -rnкакой интерфейс является первым.

Обновление: настройки network-inferface-routing обычно устанавливаются при запуске системы. Таким образом, порядок запуска сетевых устройств будет соответствовать порядку в этой таблице. На PCI-устройствах они обычно обрабатываются сначала по младшему номеру слота. Внешние устройства (например, USB) обычно появляются позже.

Но точный порядок зависит от сетевого скрипта запуска вашего продукта Linux (в этом они сильно отличаются).

Кстати: если вы хотите использовать ваши две ссылки, вы должны пойти на связь . Там вы можете настроить порядок использования ваших ссылок.

Nils
источник
1
В этом есть смысл. Когда я говорил о маршрутизации, я имел в виду, что дело не в том, чтобы выбрать, какой интерфейс подключен к сети назначения (прямо или косвенно), поскольку оба они. Я должен был быть более осторожным с моей терминологией. Спасибо за полезные советы (особенно о склеивании). Это все еще оставляет мой оригинальный вопрос, хотя, в немного другой форме. Как определяется порядок записей маршрутизации в Linux (я редактировал исходный вопрос)?
Доминик Пасторе
@ Доминик Я обновил свой ответ соответственно. Какой дистрибутив и какую мажор-версию вы используете?
Нильс
Ах. Я не понимал, что это может сильно отличаться между дистрибутивами. Я просмотрел всю информацию об этом, но все, что я нашел, было статьями о том, как установить записи маршрутизации, а не о том, как определяются исходные записи. Я использую Xubuntu 12.04. Это поднимает еще один вопрос (хотя небольшой; я чувствую себя очень просвещенным от вашего ответа :-)). Если я подключен через беспроводное соединение (eth1), а затем подключаюсь через Ethernet (eth0), маршрут по умолчанию и основные записи в таблице маршрутизации возвращаются к eth0. Кажется, это идет вразрез с вашим ответом. Я неправильно понимаю, или это особенность NetworkManager, или что?
Доминик Пасторе
@ Доминик Ubuntu очень особенный. Он делает некоторые магические вещи в фоновом режиме при подключении / отключении сетевых устройств. Я предполагаю, что это перезапускает весь сетевой стек там. (Я обычно использую SLES / RH и не слишком глубоко в Ubuntu)
Nils
-3

Не обидеть вас, но если вы знакомы с частью маршрутизации вашего стека связи TCP / IP на любом компьютере с Linux, вы также должны знать, что результаты подключения двух сетевых интерфейсов к одной и той же сети в лучшем случае непредсказуемы. На вашем месте я бы отключил беспроводную связь на своем ноутбуке или выполнил ifconfig eth0 downкоманду (при условии, что eth0 - это ваше проводное Ethernet-соединение), чтобы отключить его. Linux может обладать некоторым интеллектом, чтобы делать одинаковый выбор для каждого пакета, но в случае сбоя сети в какой-то момент может привести к неожиданным результатам. Мои 2 цента.

MelBurslan
источник
1
Это не непредсказуемо. Первое попадание в таблицу маршрутизации используется как объяснено @Nils.
gertvdijk