К моему изумлению, я только что обнаружил, что моя система Ubuntu 13.04, похоже, поддерживает что-то вроде автоматического объединения сетевых интерфейсов.

Если я установить соединение TCP через WiFi (например , с помощью Netcat на клиенте и сервере), а затем переключиться на проводной интерфейс, все дальнейшее движение по этой связи , кажется прозрачно проходить через проводной интерфейс. Я проверил это с помощью Wireshark, и я могу также определить изменение пропускной способности при копировании файлов.

Это работает, однако, только до тех пор, пока я поддерживаю соединение WiFi. Если отключить WiFi, TCP-соединение также разрывается.

Машина, на которой я тестирую, имеет разные MAC и разные IP-адреса для WiFi и проводного интерфейса. Они подключены к одной сети, хотя.

У меня не установлен пакет ifenslave, и я не настроил ни мост, ни что-то подобное. Я использую NetworkManager.

Мой вопрос: как это работает? Какой уровень отвечает за перенаправление пакетов и как он узнает, куда их отправлять? И почему это перестает работать, если соединение WiFi отключено?

1 ответ1

0

Хорошо, неутешительное объяснение. Это просто старый добрый маршрут по умолчанию на работе. NetworkManager добавляет новый маршрут в ту же сеть для каждого интерфейса. Интерфейс, который появляется последним, затем получает весь исходящий трафик.

Интересно то, что это также работает для входящего трафика. Как только удаленный хост начинает получать свои ACK с другого MAC-адреса, на который он первоначально отправил данные, он обновляет свою таблицу ARP, чтобы указывать на новый MAC-адрес, чтобы с этого момента вся связь проходила через этот интерфейс.

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

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