SCTP mit Multihoming als Drop-In-Ersatz für TCP

8

SCTP hat eine native Multi-Homing-Unterstützung, die, wenn ich sie richtig verstehe, Ihre Pakete automatisch über eine sekundäre NIC umleitet, wenn die primäre Schnittstelle ausfällt. Ich habe diese Funktionalität mit TCP dupliziert, indem ich ein benutzerdefiniertes Routing-Deamon geschrieben habe, um die Routing-Tabellen zu ändern, wenn meine primäre Netzwerkkarte ausfällt. Ich möchte stattdessen SCTP verwenden.

In Steven's Unix-Netzwerkprogrammierung V1 3. Ausgabe auf Seite 288 heißt es:

  

In diesem Beispiel verwenden wir a   One-to-Many-Stil-Server. Wir machen   diese Wahl aus einem wichtigen Grund.   Die Beispiele in Kapitel 5 können sein   geändert, um über SCTP mit einem zu laufen   geringfügige Änderung: Ändern Sie die socket   Funktionsaufruf zum Angeben    IPPROTO_SCTP anstelle von    IPPROTO_TCP als drittes Argument.   Machen Sie diese Änderung jedoch einfach   würde keinen der Vorteile ausnutzen   zusätzliche Funktionen von SCTP   außer Multi-Homing.

Jetzt habe ich das mit ziemlich schlechten Ergebnissen versucht.

Ich verwende Ubuntu 9.04 mit den installierten Paketen libsctp1, libsctp-dev und lksctp-tools. Ich habe mit lksctp-tools verifiziert, dass SCTP richtig funktioniert.

Ich habe den UNP-Beispielcode genommen und wie oben beschrieben die Programme ~/unpv13e/tcpcliserv/tcpserv04.c und ~/unpv13e/select/tcpcli02.c geändert.

Dies ist ein einfaches Echo-Server / Client-Paar. Der Server läuft scheinbar zuhören, aber der Client beendet, dass die Verbindung abgelehnt wurde. Da netstat SCTP nicht unterstützt, habe ich lsof -n | grep tcpserv benutzt, was mir gezeigt hat:

%Vor%

Das scheint mir nicht viel anderes zu sagen als tcpserv04 hat eine Art Socket offen.

Ich hatte den ursprünglichen TCP-Client in Perl bereits umgeschrieben und getestet, also habe ich ihn auf sctp umgestellt und konnte eine Verbindung herstellen, obwohl das Verlegen einer Datei auf stdin nicht ganz funktionierte (etwa 2/3 des Weges durch den Empfang des Echo ist zurück).

Es scheint, als ob UNP impliziert, dass die Portierung von TCP-Anwendungen auf SCTP, um Multi-Homing zu nutzen, trivial ist, aber auf diesem einfachen Versuch basiert, der nicht wirklich der Fall zu sein scheint.

Kann mir jemand auf ein gutes Tutorial hinweisen oder einen guten Ratschlag geben, wenn es darum geht, TCP-Apps auf One-to-One-SCTP zu portieren, um Multi-Homing zu nutzen?

    
Robert S. Barnes 11.02.2010, 09:22
quelle

1 Antwort

2

tcpcli02 versucht eine Verbindung zu Port 7 herzustellen, während tcpserv04 Port 9877 überwacht (der Standardwert für SERV_PORT ). Nachdem ich diese geändert habe, funktioniert es für mich.

Die Unterstützung für SCTP ist im Allgemeinen sehr schlecht. Wenn Sie nicht die gesamte Netzwerkinfrastruktur zwischen den Hosts steuern, die Sie verbinden möchten, würde ich nicht darauf zählen, dass sie zuverlässig funktionieren. Das Portieren der Anwendungen selbst sollte ziemlich problemlos sein, wie in UNP erwähnt.

    
fnl 12.02.2012 21:37
quelle