8

SCTPはネイティブ マルチホーミング サポートを備えており、正しく理解すれば、プライマリ インターフェイスがダウンした場合にセカンダリ NIC 経由でパケットを自動的に再ルーティングします。この機能を TCP で複製して、プライマリ NIC がダウンした場合にルーティング テーブルを変更するカスタム ルーティング デーモンを作成しました。SCTP代わりに使用してみたいと思います。

Steven のUnix Network Programming V1 3rd Edition on page 288 には、次のように書かれています。

この例では、1 対多スタイルのサーバーを使用します。この選択には、1 つの重要な理由があります。第 5 章の例は、SCTPマイナーな変更を 1 つ追加することで実行できるように変更できます。socket 関数呼び出しを 変更して、3 番目の引数のIPPROTO_SCTP代わりに 指定します。 ただし、この変更を行うだけでは、マルチホーミング以外でIPPROTO_TCP提供される追加機能を利用することはできません。SCTP

今、私はかなり悪い結果でこれを試しました。

libsctp1、libsctp-dev、および lksctp-tools パッケージがインストールされた Ubuntu 9.04 で実行しています。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 である種のソケットが開いていること以外はあまりわかりません。

私はすでに perl で元の TCP クライアントを書き直してテストしていたので、sctp に切り替えて接続できましたが、stdin でのファイルのパイピングは完全には機能しませんでした (エコーのバックを受信するまでの約 2/3 の方法でハングしました)。 .

UNP は、マルチホーミングを利用するために TCP アプリケーションを SCTP に移植することは些細なことだとほのめかしているようですが、実際にはそうではないように思われるこの単純な試みに基づいています。

マルチホーミングを利用するために TCP アプリを 1 対 1 形式の SCTP に移植する際に気をつけなければならないことについて、誰かが良いチュートリアルを教えてくれたり、良いアドバイスをくれたりできますか?

4

1 に答える 1

2

tcpcli02はポート 7 への接続を試みtcpserv04ますが、ポート 9877 ( のデフォルト値SERV_PORT) でリッスンします。それらを一致するように変更した後、それは私にとってはうまくいきます。

SCTP のサポートは一般的に非常に悪いです。接続しようとしているホスト間のネットワーク インフラストラクチャ全体を制御しない限り、確実に動作することは期待できません。UNP で述べられているように、アプリケーション自体の移植はかなり手間がかからないはずです。

于 2012-02-12T21:37:24.353 に答える