SCTP с множественной адресацией в качестве замены для TCP - PullRequest
8 голосов
/ 11 февраля 2010

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

В Стивене Сетевое программирование Unix 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 Ответ

2 голосов
/ 13 февраля 2012

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

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

...