SCTP с множественной адресацией в качестве замены для TCP

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

В Стивене в Unix Network Programming V1 3-е издание на стр. 288 говорится:

Для этого примера мы используем сервер типа "один ко многим". Мы делаем этот выбор по одной важной причине. Примеры в Главе 5 могут быть изменены для запуска SCTP с одним незначительным изменением: изменить socket вызов функции для указания IPPROTO_SCTP вместо IPPROTO_TCP в качестве третьего аргумента. Однако простое внесение этого изменения не позволит использовать какие-либо дополнительные функции, предоставляемые SCTP кроме мульти-самонаведения.

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

Я работаю на Ubuntu 9.04 с установленными пакетами libsctp1, libsctp-dev и lksctp-tools. Я проверял с помощью lksctp-tools, что SCTP работает правильно.

Я взял пример кода UNP и изменил, как указано выше ~/unpv13e/tcpcliserv/tcpserv04.c а также ~/unpv13e/select/tcpcli02.c программы.

Это простая пара эхо-сервер / клиент. Сервер работает, по-видимому, прослушивая, но клиент завершает работу, говоря, что в соединении отказано. Поскольку netstat не поддерживает SCTP я использовал lsof -n | grep tcpserv который показал мне:

tcpserv04 6208      alice    3u     sock        0,4            33889 can't identify protocol

Это, кажется, не говорит мне о многом, кроме того, что tcpserv04 имеет какой-то открытый сокет.

Я уже переписал и протестировал исходный TCP-клиент в perl, поэтому я переключил его на sctp и смог подключиться, хотя передача файла на stdin не работала полностью (зависло примерно на 2/3 пути получения ответа эха),

Похоже, что UNP подразумевает, что портирование приложений TCP на SCTP для использования преимуществ множественной адресации тривиально, но основано на этой простой попытке, которая на самом деле не выглядит так.

Может кто-нибудь указать мне хороший учебник или дать хороший совет по поводу любых проблем, на которые следует обращать внимание при портировании приложений TCP на SCTP "один-к-одному", чтобы воспользоваться преимуществами множественной адресации?

1 ответ

tcpcli02 пытается подключиться к порту 7, пока tcpserv04 прослушивает порт 9877 (значение по умолчанию для SERV_PORT). После изменения, чтобы соответствовать, это работает для меня.

Поддержка SCTP вообще очень плохая. Если вы не контролируете всю сетевую инфраструктуру между хостами, которые вы пытаетесь подключить, я бы не рассчитывал на ее надежную работу. Портирование приложений само по себе должно быть достаточно простым, как упоминалось в UNP.

Другие вопросы по тегам