メッセージベースのマルチストリーミング SCTPアプリケーションは、送信するデータをメッセージ(バイトのグループ)としてSCTPトランスポート層に送信します。SCTPは、メッセージと制御情報を別々のチャンク (データチャンクと制御チャンク)に配置し、それぞれをチャンクヘッダー で識別します。プロトコルはメッセージを複数のデータチャンクに分割できますが、各データチャンクには1つのユーザーメッセージのデータのみが含まれます。SCTPはこれらのチャンクをSCTPパケットにバンドルします。インターネットプロトコル に送信されるSCTPパケットは、パケットヘッダー、SCTP制御チャンク(必要な場合)、およびSCTPデータチャンク(利用可能な場合)で構成されます。
SCTPはメッセージ指向プロトコルであり、TCPのように途切れることのないバイトストリームを転送するのではなく、一連のメッセージ(それぞれがバイトのグループ)を転送します。UDPと同様に、SCTPでは送信側が1回の操作でメッセージを送信し、そのメッセージが受信側のアプリケーションプロセスに1回の操作で渡されます。これに対し、TCPはストリーム指向プロトコルであり、バイトストリームを 確実に順番に転送します。ただし、TCPでは、送信側アプリケーションがTCPトランスポートを何回呼び出してバイトグループを送信したかを受信側が知ることはできません。送信側では、TCPはネットワーク経由で送信されるのを待っているバイトのキューにバイトを追加するだけで、個々の送信メッセージのキューを保持してそれをそのまま維持する必要はありません。
マルチストリーミング とは、SCTPが複数の独立したチャンクストリームを並列に送信する機能を指します。例えば、ウェブページの 画像とテキストを同時に送信する場合などです。本質的には、複数の接続を単一のSCTPアソシエーションにまとめ、バイト単位ではなくメッセージ(またはチャンク)単位で処理を行うことを意味します。
TCPは、各セグメント にバイトシーケンス番号を含めることで、ストリーム内のバイト順序を保持します。一方、SCTPは、ストリームで送信される各メッセージにシーケンス番号またはメッセージID [ 注1 ] を割り当てます。これにより、異なるストリーム内のメッセージの順序を個別に制御できます。ただし、SCTPではメッセージの順序は任意であり、受信アプリケーションは送信順ではなく受信順にメッセージを処理することを選択することもできます。
特徴 SCTPの主な特徴は以下のとおりです。
順序付きデータストリームと順序なしデータストリームの両方を確実に伝送する マルチホーミング機能により、接続のエンドポイントの一方または両方が複数のIPアドレスを持つことが可能になり、冗長なネットワークパス間での透過的なフェイルオーバーが実現します。 TCPバイトストリーム配信とは異なり、独立したストリーム内でチャンクを配信することで、不要な先頭ブロックが解消されます。 明示的な部分的信頼性 経路選択と監視により、主要なデータ伝送経路を選択し、伝送経路の接続性をテストする。 検証および確認メカニズムは、フラッディング攻撃 から保護し、重複または欠落したデータチャンクを通知します。 イーサネットジャンボフレーム に適したエラー検出機能の向上SCTP の設計者は当初、インターネット プロトコル上で電話 (すなわちシグナリング システム 7) を伝送することを目的としており、SS7 シグナリング ネットワークの信頼性属性の一部を IP で再現することを目標としていました。この IETF の取り組みはSIGTRAN として知られています。その間、Diameter プロトコル[ 3 ] や Reliable Server Pooling (RSerPool) [ 4 ]など、他の用途も提案されています。
動機付けと採用 TCPは、インターネット上でデータを確実に転送するための主要な手段を提供してきました。しかし、TCPはいくつかのアプリケーションに制限を課しています。RFC 4960 より:
TCPは、信頼性の高いデータ転送と厳密な送信順序によるデータ配信の両方を提供します。一部のアプリケーションは、順序維持なしで信頼性の高い転送を必要としますが、他のアプリケーションは、データの部分的な順序付けで満足します。どちらの場合も、TCPのヘッドオブラインブロッキング特性は不要な遅延を引き起こします。 個別のレコードやメッセージを交換するアプリケーションの場合、TCPのストリーム指向の性質上、個々のレコードを区別するために明示的なマーカーやその他のエンコーディングを追加する必要がある。 1つの大きなパケットで十分な場合に多数の小さなIPパケットを送信することを避けるため、TCPの実装では、アプリケーションによってキューに追加される可能性のあるデータを待機する間、データの送信を遅延させる場合があります(Nagleのアルゴリズム )。多くのTCP実装ではNagleのアルゴリズムを無効にすることができますが、これは仕様で必須ではありません。一方、SCTPでは、遅延なしの送信をアソシエーションのデフォルトとして構成できるため、不要な遅延はなくなりますが、転送オーバーヘッドが高くなります。[ 5 ] TCPソケットの適用範囲が限られているため、マルチホームホストを使用して高可用性のデータ転送機能を提供することは困難です。 TCPは、 SYN攻撃 などのサービス拒否攻撃に対して比較的脆弱である。SCTP の普及は、認知度の低さ、実装の不足 (特に Microsoft Windows において)、アプリケーション サポートの不足、ネットワーク サポートの不足によって遅れている。[ 6 ]
SCTPは、モバイル通信分野でいくつかの コアネットワークインターフェース のトランスポートプロトコルとして採用されている。[ 7 ]
マルチホーミング 非対称マルチホーミング:ローカルマルチホーミングからリモートシングルホーミングへ
非対称マルチホーミング:ローカルシングルホーミングからリモートマルチホーミングへ
SCTPは信頼性を高めるために冗長な経路を提供する。
各SCTPエンドポイントは、ハートビート を使用してリモートエンドポイントのプライマリアドレスと冗長アドレスへの到達可能性を確認する必要があります。また、各SCTPエンドポイントは、リモートエンドポイントから受信したハートビートを承認する必要があります。
SCTPがリモートアドレスにメッセージを送信する場合、送信元インターフェースはホストのルーティングテーブルによってのみ決定され、SCTPによって決定されるわけではありません。
非対称マルチホーミングでは、2つのエンドポイントのうち1つはマルチホーミングをサポートしていません。
ローカルマルチホーミングおよびリモートシングルホーミングにおいて、リモートプライマリアドレスに到達できない場合、代替パスが利用可能であってもSCTPアソシエーションは失敗します。
パケット構造 SCTPパケットは、基本的に2つのセクションから構成されます。
共通ヘッダー は最初の12バイトを占め、青色で強調表示されています。 データチャンク は、パケットの残りの部分を占めます。最初のチャンクは緑色で強調表示され、N個 のチャンクのうち最後のチャンク(チャンクN)は赤色で強調表示されています。 各チャンクは 1 バイトのタイプ識別子で始まり、RFC 9260で 15 種類のチャンクタイプが定義され、さらに少なくとも 5 種類が追加の RFC で定義されています。[ 注 2 ] 8 ビットのフラグ、2 バイトの長さフィールド、およびデータがチャンクの残りの部分を構成します。チャンクが 4バイトの倍数でない場合 (つまり、長さが 4 の倍数でない場合)、チャンクの長さには含まれないゼロで埋められます。2 バイトの長さフィールドにより、各チャンクの長さは 65,535 バイトに制限されます (タイプ、フラグ、および長さフィールドを含む)。
安全 暗号化は当初のSCTP設計には含まれていませんでしたが、SCTPはセキュリティを向上させるための機能を備えて設計されました。例えば、SYNフラッド 攻撃を防ぐための4ウェイハンドシェイク (TCPの3ウェイハンドシェイク と比較して)や、関連付けの検証と認証のための大きな「クッキー」などです。
信頼性もSCTPのセキュリティ設計における重要な要素でした。マルチホーミングにより、一部のルートやインターフェースがダウンした場合でも、接続を維持できます。これは、 SCTPを使用してIPネットワーク上でSS7を 伝送するSIGTRAN にとって特に重要であり、ネットワーク異常が発生した場合でも通信サービスを維持するために、リンク障害時にも高い耐障害性が求められます。
実装 SCTPのリファレンス実装は、FreeBSD、Mac OS X、Microsoft Windows、およびLinux上で動作します。[ 8 ]
以下のオペレーティングシステムは SCTPを実装しています。
サードパーティ製ドライバー:
ユーザー空間 ライブラリ:
以下のアプリケーションはSCTPを実装しています。
UDP を介したトンネリング オペレーティングシステムにネイティブのSCTPサポートがない場合でも、UDP上でSCTPをトンネル化することが可能であり [ 22 ] 、またTCP API呼び出しをSCTP呼び出しにマッピングすることで、既存のアプリケーションが変更なしでSCTPを使用できるようにすることも可能である[ 23 ] 。
RFC RFC 9260ストリーム制御伝送プロトコル RFC 8540ストリーム制御伝送プロトコル:RFC 4960 の正誤表と問題点(RFC 9260 により廃止) RFC 7829 SCTP-PF: ストリーム制御伝送プロトコルのための高速フェイルオーバーアルゴリズム RFC 7765 TCPおよびストリーム制御伝送プロトコル(SCTP)RTO再起動 RFC 7496部分信頼性ストリーム制御伝送プロトコル拡張のための追加ポリシー RFC 7053ストリーム制御伝送プロトコルのSACK-IMMEDIATELY拡張機能(RFC 9260により廃止) RFC 6951エンドホスト間通信のためのストリーム制御伝送プロトコル(SCTP)パケットのUDPカプセル化 RFC 6525ストリーム制御伝送プロトコル(SCTP)ストリーム再構成 RFC 6458ストリーム制御伝送プロトコル(SCTP)用ソケットAPI拡張機能 RFC 6096ストリーム制御伝送プロトコル(SCTP)チャンクフラグ登録(RFC 9260により廃止) RFC 5062ストリーム制御伝送プロトコル(SCTP)に対するセキュリティ攻撃とその現在の対策 RFC 5061ストリーム制御伝送プロトコル (SCTP) 動的アドレス再構成 RFC 5043ストリーム制御伝送プロトコル (SCTP) 直接データ配置 (DDP) 適応 RFC 4960ストリーム制御伝送プロトコル(RFC 9260により廃止) RFC 4895ストリーム制御伝送プロトコル(SCTP)用の認証済みチャンク RFC 4820ストリーム制御伝送プロトコル(SCTP)のパディングチャンクとパラメータ RFC 4460ストリーム制御伝送プロトコル(SCTP)仕様の正誤表および問題点(RFC 9260により廃止) RFC 3873ストリーム制御伝送プロトコル(SCTP)管理情報ベース (MIB) RFC 3758ストリーム制御伝送プロトコル(SCTP)部分信頼性拡張 RFC 3554 IPsec におけるストリーム制御伝送プロトコル(SCTP)の使用について RFC 3436ストリーム制御伝送プロトコルにおけるトランスポート層セキュリティ RFC 3309ストリーム制御伝送プロトコル(SCTP)チェックサム変更(RFC 4960により廃止) RFC 3286ストリーム制御伝送プロトコルの概要 RFC 3257ストリーム制御伝送プロトコル適用性に関する声明 RFC 2960ストリーム制御伝送プロトコル(RFC 3309 で更新され、RFC 4960 で廃止)
参考文献 ↑ 「プロトコル番号」 .iana.org.IANA . 2014年9月 9 日 取得 。 ↑ ストリーム 制御 伝送プロトコル 。IETF。2000 年 10 月。doi : 10.17487 / RFC2960。RFC 2960 。 ↑ "トランスポート" . Diameter Base Protocol . IETF . sec. 2.1. doi : 10.17487/RFC3588 . RFC 3588 . 2012-05-18 取得 . ↑ 「RSerPoolセッションサービスを 使用した例のシナリオ」 。 信頼性の高いサーバープーリングプロトコルの概要 。IETF。p . 10. sec . 4.2. doi : 10.17487/ RFC5351。RFC 5351 。 ↑ RFC 9260、セクション 1.5.5 ↑ Hogg, Scott. 「ストリーム制御伝送プロトコル(SCTP)についてはどうでしょうか?」 . Network World . 2014年8月30日の オリジナルからアーカイブ済み。 2017年10月4日 取得 。 ↑ Olsson, Magnus; Mulligan, Catherine; Sultana, Shabnam; Rommer, Stefan; Frid, Lars (2013). EPC and 4G packet networks: driving the mobile broadband revolution (2nd ed.). Amsterdam Boston: Elsevier/AP, Academic Press is an imprint of Elsevier. p. 491. ISBN 978-0-12-394595-2 。↑ "SCTP のリファレンス実装 - RFC4960" . GitHub . 2013-10-14 取得 . これは SCTP のリファレンス実装です。移植性があり、FreeBSD/MAC-OS/Windows およびユーザー空間 (Linux を含む) で動作します。 ↑ "sys/netinet/sctp.h" . BSD クロスリファレンス . NetBSD . 2017-06-27 . 2019-01-21 に取得. ↑ "man4/sctp.4" . BSD クロスリファレンス . NetBSD . 2018-07-31 . 2019-01-21 に取得 . ↑ 「DragonFlyがSCTPを削除」 .Lists.dragonflybsd.org .2015年1月7日. 2016年4月28 日 取得 . ↑ 「FreeBSD の技術的進歩について」 。FreeBSD プロジェクト。2008 年 3 月 9 日。2008 年 9 月 13 日 に取得 。SCTP : FreeBSD 7.0 は、新しい IETF ストリーム制御伝送プロトコル (SCTP) プロトコルのリファレンス実装であり、マルチパス配信、フェイルオーバー、マルチストリーミングなどの機能を通じて、高い信頼性と可変品質の伝送で VoIP、電気通信、その他のアプリケーションをサポートすることを目的としています。 ↑ 「ストリーム制御伝送プロトコル(SCTP)」 。ヒューレット・パッカード・デベロップメント・カンパニー。 {{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)↑ 「TCP/IP ネットワーク」 。QNX 開発者サポート 。QNX ソフトウェア システム 。2008 年 9 月 13 日 に取得。 「このリファレンスの新機能」。QNXライブラリリファレンス 。QNXソフトウェアシステム。 2012年12月18日 取得 。 ↑ 「QNXソフトウェア開発プラットフォーム6.4.0」 。 ↑ 「Solaris 10 オペレーティングシステムのネットワーク - 極限のネットワークパフォーマンス」 。Sun Microsystems 。 2008年9月13日 取得 。 ↑ 「SctpDrv: Microsoft Windows 用 SCTP ドライバー」 。2017年 10 月 8 日に オリジナル からアーカイブされました 。2022 年 1 月 4 日 に取得。 ↑ "SCTP Network Kernel Extension for Mac OS X" . GitHub . 2021年9月23日。 ↑ "sctplab/usrsctp" . Github . 2021年 9月21日 取得 . ↑ "sctplib と socketapi: ユーザー空間 SCTP ライブラリ (sctplib) とソケット API ライブラリ (socketapi)" . 2025-07-09 . 2025-07-09 に取得. ↑ 「Windows SCTPライブラリインストーラー」 。 2011年2月4日 取得 。 ↑ Tuexen, Michael; Stewart, Randall R. (2013 年 5 月). エンドホスト間通信のためのストリーム制御伝送プロトコル (SCTP) パケットの UDP カプセル化 . IETF . doi : 10.17487/RFC6951 . RFC 6951 . ↑ Bickhart, Ryan; Paul D. Amer; Randall R. Stewart (2007). "Transparent TCP-to-SCTP Translation Shim Layer" (PDF) . 2008年9月13日 取得 。 ↑ D. Wing; A. Yourtchenko (2012 年 4 月) 「Happy Eyeballs: デュアルスタック ホストの成功」 . tools.ietf.org . IETF . ↑ Khademi, Naeem; Brunstrom, Anna; Hurtig, Per; Grinnemo, Karl-Johan (2016年7月21日). "Happy Eyeballs for Transport Selection" . tools.ietf.org . IETF . 2017年1月9日 取得 .
外部リンク sigtran(アーカイブ済み) 「シグナリングトランスポート(sigtran)ワーキンググループ」 「交通エリア作業部会(tsvwg)」 「OpenSS7プロジェクト」 Linux向けSCTPワーキンググループ 「マイケル・テュクセンのSCTPページ」 「ロデ・コーエンのSCTPページ」 「トーマス・ドライホルツのSCTPプロジェクトページ」