SCTPがあまり使用されない/知られていない理由


190

私は最近、Richards Stevens 著の本「UNIX Network Programming、Vol。1」を調べたところ、TCPとUDP以外に3番目のトランスポート層標準であるSCTPがあることがわかりました。

概要:SCTPは、UDPのようにメッセージ駆動型ですが、TCPのように信頼できるトランスポートレベルのプロトコルです。以下は、IBM DeveloperWorksからの短い紹介です。

正直なところ、SCTPについて聞いたことがありません。ネットワーキングの本で読んだり、授業で聞いたことを思い出せません。SCTPについて言及している他のスタックオーバーフローの質問を読むと、この知識の欠如に私だけではないことがわかります。

なぜSCTPはそれほど知られていないのですか?なぜあまり使われないのですか?


4
+1聞いたことがない-ありがとう。
Robert Venables

1
誰もがSCTPをZeroMQと比較することに関心があります(1つはプロトコルであり、もう1つはライブラリです-問題を解決するためのツールとしてそれらを見てください)。
Emil Ivanov

私はただ興味があります:2013年1月1日の何が間違っている/異なるのですか?なぜこれほど多くの票が投じられたのですか?
dmeister 2013年

8
@dmeister:私はあなたをRedditに入れたから。ダルムシュタットからのご挨拶。
Janus Troelsen 2013年

32
2013年3月1日は書かないでください。「2013年3月1日」、「2013年3月1日」、「2013年3月1日」のいずれかが好ましい。誤って解釈されるような方法で月と日を記述しないでください。
Zecc、2013年

回答:


94

実際、SCTPは主に通信エリアで使用されています。従来、テレコムスイッチはSS7(Signaling System No. 7)を使用して、テレコムネットワーク内のさまざまなエンティティを相互接続しています。たとえば、通信プロバイダーの加入者データベース(HLR)とスイッチ(MSC)を使用すると、加入者も接続されます(MSC)。

通信エリアはより高速で到達可能な環境に移行しています。これらの変更の1つは、SS7プロトコルをよりエレガントで高速かつ柔軟なIPベースのプロトコルに置き換えることです。

通信エリアは非常に保守的です。ここではSS7ネットワークが何十年も使用されています。非常に信頼性が高く、閉じたネットワークです。つまり、通常のユーザーはそれにアクセスできません。

これとは対照的に、IPネットワークはオープンで信頼性が低く、テレコムは、SS7が処理する負荷を少なくとも処理しない場合、ネットワークに変換しません。これがSCTPが開発された理由です。それは試みます:

  • 何十年にもわたって蓄積されたSS7ネットワークのすべての利点を模倣します。
  • 速度、セキュリティ、冗長性においてTCPより優れた接続指向プロトコルを作成する

Linuxの最新リリースはすでにSCTPをサポートしています。


具体的には、SS7とSCTP間のマッピングを記述したIETFの「SIGTRAN」ワーキンググループからの出力を確認する必要があります。
アルニタク

22
おそらく、パブリックインターネットでSCTPがあまり使用されない主な理由は、複数の同時プライベートエンドポイントと外部ホスト間の多重化アソシエーションをサポートするために、住宅IPv4 / NATゲートウェイがSCTPに対応する必要があるためです。IPv6の移行がさらに活発になり始めたら、SCTPがより有用になることを期待してください。
ジェームズウッディアット、2011年

@jameswoodyattには、SCTP over UDPのライブラリ実装があります。コンシューマグレードのルーターの問題のいくつかを解決します。
user7610 2014

1
これは質問にまったく答えません。ジェームズの応答には、実際の回答よりも多くの情報が含まれています。
ケンシャープ

@jameswoodyatt私がいじってきたコンシューマーグレードのルーターは、かなり古いものでもサポートしています。問題は、それが通常のUIからは公開されないことです。そのため、システムを構成できる場所に入るには、システムに恐ろしいことをいくつか行わなければなりません。私の見解では見落としのようなもの。
パーキンス

70

現在、SCTPをいくつかのアプリケーションに展開しており、さまざまなホームルーターでのSCTPサポートに重大な問題が発生しています。それらは単にSCTPを正しく処理しません。これは主にパフォーマンスの問題だと思います(SCTPプロトコル仕様では、ヘッダーだけでなく、パケット全体を再計算するためのチェックサムが必要です)。

他の多くの有望なプロトコルと同様に、SCTPはD-linkとNetgearが壊れたNATボックスを修正するまで悲しいことに水中で死んでいます。


7
うわー、私はこの参入障壁を知りませんでした。あなたは完全に正しいです-これを回避する ための提案された方法については、tools.ietf.org / html / draft - ietf - behave - sctpnat - 05を参照してください。これは同じトピックに関するインターネットドラフトの3番目のセットです...
Bwooce '25

あなたはかなり悲観的に聞こえます-少なくともホームルーターにとっては。プロの実稼働環境で使用されているルーターがサポートしていると仮定すると、SCTPは依然として非常に便利に見えます。ネットワークトポロジがデータセンターの構内を離れないユースケースはたくさんあります。その場合、SCTPは完璧でなければなりません。
Eugene Beresovsky 14

4
@EugeneBeresovksy:その回答を投稿してから数年になります。それ以来、SCTPは大きな進歩を遂げていないように思います。制御された環境のいくつかの特殊なアプリケーションでまだ使用されていますが、実際にはほとんど見られません。WindowsとMac OS Xには、そのままではSCTPサポートがまだありません。親しみやすさの欠如と、ほとんどのファイアウォールとNATボックスによって破壊されたプロトコルの脆弱性は、人々がそれを使用することに消極的になります。
pehrs 2014

@pehrsデータセンター内で使用したいので、OSに組み込まれているものを除いて、NATやファイアウォールは必要ありません。Linuxサーバー環境では、うまく機能することを願っています。しかし、Windowsを使用している場合でも、SCTPライブラリがあります。OSをいじくり回す必要がないと思います。
Eugene Beresovsky 14

SCTPは採用されていないため、通常Linuxでは有効化されていませんが、私のUbuntu Precise(旧)システムでも、ロード可能なモジュールとして使用できます。SCTPを使用したいが(たとえば)TCPにフォールバックするアプリケーションを提供することは、デュアルスタッキングに似た問題ですが、より困難です。
ケンシャープ

55

SCTPを最大限に活用するには、アプリケーション内でより多くの設計が必要です。TCPよりも多くのオプションがあり、SocketsのようなAPIは後で登場しました。しかし、時間をかけてそれを理解する(そしてTCPの欠点を知っている)ほとんどの人はそれを高く評価すると思います-これは、TCPとUDPに関する30年以上の知識に基づいて設計されたプロトコルです。

いくつかの考慮が必要な側面の1つは、ストリームの側面です。ストリームは(通常はオフにできると思います)ストリーム内の順序保証を提供します(TCP接続と同様)。ただし、SCTP接続ごとに複数のストリームが存在する可能性があります。アプリケーションのデータが複数のストリームを介して送信できる場合は、1つのパケットが誤って配置されたためにレシーバーが餓死するような行頭ブロッキングを回避できます。実質的には、互いに影響を与えることなく、同じ接続を介して異なる会話を行うことができます。

もう1つの便利な追加は、マルチホーミングサポートの追加です。1つの接続が両端の複数のインターフェースにまたがることができ、障害に対処します。これはTCPでエミュレートできますが、アプリケーション層で実行できます。

非一時的な接続にTCPを使用するアプリケーションが最初に実装する適切なリンクハートビートは無料で利用できます。

SCTPの私の個人的な要約は、それが実質的なアプリケーションサポートで(TCPまたはUDPで)別の方法で行うことができなかったことは何もしないということです。それが提供するものは、そのコードを自分で(ひどく)実装する必要がない能力です。

ちなみに、SCTPはDiameterのサポートとして義務付けられています(RADIUS次世代を参照)。RFC 3588を参照

   DiameterクライアントはTCPまたはSCTPのいずれかをサポートする必要がありますが、エージェントと
   サーバーは両方をサポートする必要があります。この仕様の将来のバージョンは
   クライアントがSCTPをサポートすることを義務付けます。

43

SCTPはあまり知られていないため、あまり使用/展開されていません。理由は次のとおりです。

  • 広範囲:TCP / IPスタックにあまり統合されていません(2013年:最新のMac OSXおよびWindowsにはまだネイティブではありません)
  • ライブラリ:使いやすい言語での高レベルのバインディングはほとんどありません(免責事項:私はpysctpのメンテナー、PythonのSCTP簡単なスタックサポート)
  • NAT:NATをあま​​りうまく通過しません/まったく(1%未満のインターネットホームおよびエンタープライズルーターがSCTPでNATを実行します)。
  • 人気:一般公開アプリでは使用していません
  • プログラミングパラダイム:少し変わった:それはまだソケットですが、多くのホストを多くのホストに接続できます(マルチホーミング)。
  • 複雑さ:SCTPスタックは実装が複雑です(上記のため)
  • 競争:マルチパスTCPが登場し、マルチホーミングのニーズ/機能に対応する必要があるため、MTCPを待って、可能であればSCTPの実装を控えます。
  • ニッチ:SCTPの塗りつぶしは非常に特殊であり(順序付けされた信頼性の高いデータグラム、マルチストリーム)、多くのアプリケーションでは必要ありません。
  • セキュリティ:SCTPはセキュリティ制御を回避します(一部のファイアウォール、ほとんどのIDS、すべてのDLPは、CentOS / Redhat / Fedoraを除いてnetstatに表示されません...)
  • 監査能力:世界中の3社のようなものが日常的にSCTPセキュリティの監査を行っています(免責事項:私はそのうちの1社で働いています)
  • 学習曲線:SCTPで遊べるツールチェーンはそれほど多くありません(netcatと適切に組み合わせる優れたwithsctpを確認するか、socatを使用してください)
  • 裏側:主に通信で使用され、SMSを送信したり、携帯電話でネットサーフィンを開始したり、電話をかけたりするたびに、SCTP(GSM / UMTSを備えたSIGTRAN / SS7、LTE / IMSを備えたDiameter)を介して流れるメッセージをトリガーします/ RCS、S1AP / X2AP with LTE)なので、実際にそれを頻繁に使用しますが、それについては決して知りません;-)

14
Re:「ニッチ/多くのアプリケーションでは不要」。Webブラウザーは、その恩恵を受けます。HTTP2と、TCPに加えてSCTPが無料で提供するもののいくつかを実装しようとするその試みを参照してください。ほとんどのHTTP最適化手法(スプリッティング、シャーディング、インライン化、連結)は、SCTPによって冗長化されます(ほぼ完全に-HTTP1の無駄なヘッダーは未解決のままです)。DBまたは他のサービスへの同時アクセスを可能にする接続プールを持つアプリケーションについても同様です。言い換えると、SCTPの機能のいくつかは、多くのアプリから大きなニーズがあります。
Eugene Beresovsky 2014年

4
「一般のパブリックアプリでは使用しません」:SCRTはWebRTCで使用されるため、もう当てはまりません。「セキュリティ:SCTPはセキュリティ制御を回避します」-これは「セキュリティ」制御の問題の詳細です。これらのチェックを回避できれば、マルウェアがレーダーの下に留まることは素晴らしいプロトコルになります。
Maciej Piechotka

14

p1。IPv4を介して直接マッピングされたSCTPは、NATゲートウェイでのサポートを必要とします。これはどこにも広く配備されたことはなく、これがないと、一般的なNATゲートウェイは、パブリックアドレスごとに一度に1つのプライベートホストのみがSCTPを使用できるようにします。

p2。UDP / IPv4を介してマッピングされたSCTPでは、パブリックアドレスあたりのプライベートホストの数が増えますが、IPv4 / NATゲートウェイでのUDPマッピングは、NATが追跡する明示的な状態のないコネクションレストランスポートであるため、確立して維持するのが難しいことで有名です。

p3。IPv6で直接マッピングされたSCTPには、... IPv6が必要です。IPv6を導入しようとしましたか?その場合、IPv6ファイアウォールを購入しようとしましたか?SCTPをサポートしていますか?ロードバランサーはどうですか?SSLアクセラレータ?

p4。最後に、インターネットの多くは、TCPポート80およびポート443に適合できるものにかなり制限されているため、あらゆる種類のSCTPはそこで失われる傾向があります。したがって、IETFのMPTCPワーキンググループのような取り組みが見られます。


「あなたはIPv6ファイアウォールを購入しようとしましたか?それはSCTPをサポートしていますか?」-通常自由に配布されたものiptables はそれらをうまくサポートします。私はネットワークの男ではないので、残りのことは言えません。
Hi-Angel

12

SCRTはUDPの上にTCPのような信頼性の高いレイヤーを作成するためにWebRTCデータチャネルによって使用されるため、私たちの多くは間もなくSCTPを使用します-UDP上のSCTP over DTLS:https : //tools.ietf.org/html/draft-ietf -rtcweb-data-channel-13#section-6


WebRTCの主な焦点はビデオとオーディオのストリーミングの組み合わせであることを言及するのを忘れていました。メッセージリレーとして使用するためのものではありません。turn / ice / stunサービスは、WebRTCが実行するテクノロジーのもう1つの部分です。しかし、これらはWebRTCが使用するテクノロジーです。これらのテクノロジーはWebRTCではありません。
TamusJRoyce

6

SCTPウィキペディアのページを読む主な理由は、SCTPが非常に新しいプロトコル(2000年に提案)であり、現在主流のOS(WindowsOS XLinux)でサポートされていないことです。

「非常に若い」があなたにとって不適切であると思われる場合は、IPV6について考えてください。


3
リンクしたウィキペディアの記事によると、SCTPはLinux、Solaris、FreeBSD、HP-UXなどで実装されています。
drrlvn

リンクされた記事では、OS XとWindowsで実行されることも示されています。
dmeister


2

よく知られていないかもしれませんが、未使用ではありません。ごく最近、IETFで公開された、SCTPをHTTPのトランスポート層プロトコルとして使用することに関するドラフトがありました。


2
「未使用ではない」と言ったとき、プロトコルの実際の使用法について考えました。ただし、ドラフトドキュメントの例を示しただけで、将来的に実際に使用される可能性があります。
キサキ


-1

Sctpの誕生は遅すぎ、多くの状況ではTCPで十分です。

また、私が知っているように、その使用法のほとんどは通信エリアで使用されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.