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 «один-к-одному», чтобы воспользоваться преимуществами множественной адресации?