2010-02-11 31 views
8

SCTP a un support natif multi-homing qui, si je comprends bien va automatiquement rediriger vos paquets sur une carte réseau secondaire si l'interface principale descend. J'ai dupliqué cette fonctionnalité avec TCP en écrivant un deamon de routage personnalisé pour modifier les tables de routage si mon NIC principal tombe en panne. Je voudrais essayer d'utiliser SCTP à la place.SCTP avec Multihoming comme Drop In remplacement pour TCP

Dans Steven de Unix Network Programming V1 3rd Edition à la page 288, il est dit:

Pour cet exemple, nous utilisons un one-to-many style serveur. Nous faisons ce choix pour une raison importante. Les exemples dans le chapitre 5 peuvent être modifié pour fonctionner sur SCTP avec une modification mineure : modifier l'appel de fonction pour spécifier socket IPPROTO_SCTP au lieu de IPPROTO_TCP comme troisième argument. Simplement faire cette modification, cependant, ne tirerait parti de l'une des fonctionnalités supplémentaires fournies par SCTP sauf multi-homing.

Maintenant, j'ai essayé cela avec des résultats assez médiocres.

Je suis en cours d'exécution sur Ubuntu 9.04 avec le libsctp1, libsctp-dev, et les paquets lksctp-outils installés. J'ai vérifié avec lksctp-tools que SCTP fonctionne correctement. J'ai pris le UNP example code et modifié comme indiqué ci-dessus les programmes ~/unpv13e/tcpcliserv/tcpserv04.c et ~/unpv13e/select/tcpcli02.c.

Ceci est une paire simple serveur d'écho/client. Le serveur s'exécute apparemment en écoute, mais le client quitte en disant que la connexion a été refusée. Étant donné que netstat ne supporte pas SCTP je lsof -n | grep tcpserv qui m'a montré:

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

Cela ne semble pas me dire que beaucoup d'autres tcpserv04 a une sorte de prise ouverte. J'ai déjà réécrit et testé le client TCP d'origine en perl, donc je l'ai changé en sctp et j'ai pu me connecter bien que piping un fichier sur stdin ne fonctionnait pas complètement (pendu environ 2/3 de la réception l'écho est de retour). Il semble que UNP implique que le portage d'applications TCP vers SCTP pour profiter du multi-homing est trivial, mais basé sur cette simple tentative qui ne semble pas vraiment être le cas. Est-ce que quelqu'un peut me diriger vers un bon tutoriel ou donner de bons conseils sur les pièges à surveiller lors du portage d'applications TCP vers un SCTP de type one-to-one pour tirer profit du multi-homing?

+0

TCP peut également implémenter cette forme de redondance ---- routes multiples de a à b dans la table de routage - pourquoi s'embêter? –

+0

@Hassan Syed: Parce que je suis curieux. –

+0

avez-vous essayé de capturer wireshark. Si tout est configuré correctement, un appel de connexion sur le client doit déclencher l'établissement d'une liaison à quatre voies vers le serveur. En outre, je n'ai pas pu trouver le fichier client (~/unpv13e/select/tcpcli02.c) à partir du lien que vous avez fourni. –

Répondre

2

tcpcli02 essaie de se connecter au port 7, tandis que tcpserv04 écoute sur le port 9877 (la valeur par défaut pour SERV_PORT). Après avoir changé ceux qui correspondent, ça marche pour moi.

soutien à SCTP est généralement très mauvais. À moins que vous ne contrôliez toute l'infrastructure réseau entre les hôtes que vous essayez de connecter, je ne compte pas sur elle pour fonctionner de manière fiable. les applications se Portage devrait être assez sans tracas, comme mentionné dans UNP.

+0

Je pense que je n'aurais besoin que de contrôler les deux points de contact qui se parlent. Pourquoi aurais-je besoin de contrôler l'ensemble de l'infrastructure réseau? Ahh, je suppose que tous les routeurs du réseau devraient avoir un support explicite pour SCTP et la plupart ne le font pas actuellement? –

+1

En effet. En théorie, les routeurs ne devraient pas poser de problème, car ils n'inspectent pas dans la couche 4. Les routeurs dans le noyau d'Internet ne le feront probablement pas. Cependant, plus vous vous rapprochez du bord, plus il est probable. Une fois que vous arrivez à des boîtes NAPT (qui repose sur le mappage des paquets aux points de terminaison en utilisant les en-têtes de couche 4), vous n'avez probablement pas de chance car ils ne traiteront que du TCP et de l'UDP. – fnl