LINUX.ORG.RU

Использование MPTCP в сети

 ,


0

1

Предположим у меня есть клиентский узел сети под управлением Linux, на нем поднят протокол Multipath TCP и заведено несколько интерфейсов, далее - есть еще один узел, который для надежности подключен к первому несколькими подключениями (по числу subflows), на нем тоже доступен Multipath TCP. На этом узле работает некое ПО. Скажите пожалуйста, как с программной точки зрения для этой программы будут выглядеть эти линки? Сколько сокетов будет им соответствовать и как к ним обращаться?

Всем спасибо.

★★★★★

Последнее исправление: LongLiveUbuntu (всего исправлений: 1)
Ответ на: комментарий от MirandaUser2

То есть получается так, что subflows с разными ip собираются ядром вместе как один сокет? А как к нему подключаться: по любому из имеющихся айпишников клиента можно или типа в пуле держать: один отвалился, попробуй следующий?

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Сокеты должны быть с типом протокола IPPROTO_MPTCP вместо IPPROTO_TCP. И на стороне клиента, и на стороне сервера. Если клиент/сервер используют IPPROTO_TCP сокеты, можно попробовать запустить их с помощью утилиты mptcpize (она подменяет libc-шные вызовы с помощью LD_PRELOAD).

connect() устанавливает только первый subflow, поэтому перебор адресов сервера надо запрограммировать в клиенте самому. Как и для обычного TCP: резолвишь DNS-имя сервера в список IP адресов, пытаешься соединиться с каждый адресом по списку. После установки первого subflow от клиента к серверу они сами договариваются о дополнительных subflow.

https://www.mptcp.dev/

iliyap ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

То есть получается так, что subflows с разными ip собираются ядром вместе как один сокет?

примерно так, только код приложения всё же придётся поменять: указать опцию IPPROTO_MPTCP вместо IPPROTO_TCP

А как к нему подключаться: по любому из имеющихся айпишников клиента можно или типа в пуле держать: один отвалился, попробуй следующий?

Этим занимается Path-Manager, а не приложение. Т.е. биндинг к определенному локальному IP не нужен. Но если биндинг всё же сделан, то MPTCP обязан его учитывать (также как для обычного TCP соединения). См. 4.2.1. Specification of Addresses by Applications.
Здесь надо напомнить, что для обычного TCP явный биндинг к локальному адресу в общем случае не определяет маршрут - маршрут определяется таблицей роутинга. Но это поведение также зависит от ОС и её настроек (strong/weak host model), т.е. лучше проводить натурный эксперимент.

MirandaUser2
()
Ответ на: комментарий от iliyap

То есть по идее может быть такое, что всё же несколько разных айпи? А я так понял, что сокет с подключением один, а внутри него - все сетевые потоки от клиента.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от MirandaUser2

указать опцию IPPROTO_MPTCP вместо IPPROTO_TCP

Это сделано. Если всё низовое на системе, то вообще хорошо, можно как с простым TCP работать + настройки протокола на клиенте и сервере сделать нужные.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Адресов несколько, сокет один. Просто если ты будешь коннектиться к одному адресу, а именно он в момент коннекта не доступен, то соединения не будет. Надо пытаться коннектиться к списку адресов.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Тогда получается клиент с сервера будет виден по нескольким адресам, перебираем их пока не получится законнектиться хоть к одному. Ясненько.

Сейчас накидаю код, попробую как оно будет смотреться.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Тогда получается клиент с сервера будет виден по нескольким адресам, перебираем их пока не получится законнектиться хоть к одному.

Не, он про адреса сервера (перечитай сообщение 26.08.25 13:41:06 MSK). Т.е. про сценарий, когда сервер имеет несколько сетевых интерфейсов (IP адресов), по которым к нему может подключится клиент.

MirandaUser2
()