| プロトコルスタック | |
| 略語 | SCTP |
|---|---|
| 導入 | 2000 |
| OSI層 | トランスポート層(4) |
| RFC(複数) | RFC9260の翻訳 |
ストリーム制御伝送プロトコル( SCTP )は、インターネット プロトコル スイートのトランスポート層にあるコンピュータ ネットワーク 通信プロトコルです。このプロトコルは、もともと電気通信におけるSignaling System 7 (SS7) メッセージ転送を目的としており、 User Datagram Protocol (UDP) のメッセージ指向機能を提供するとともに、 Transmission Control Protocol (TCP) のような輻輳制御を使用して、メッセージの信頼性の高い順序どおりの転送を保証します。UDP や TCP とは異なり、このプロトコルはマルチホーミングと冗長パスをサポートし、復元力と信頼性を高めます。
SCTP は、 Internet Engineering Task Force (IETF)によってRFC 9260で標準化されています。SCTP リファレンス実装はFreeBSDバージョン 7 の一部としてリリースされ、その後他のプラットフォームに広く移植されています。
正式な監督
IETFシグナリングトランスポート(SIGTRAN )ワーキンググループは、2000年10月にプロトコル(番号132 [1] )を定義し、 [2] IETFトランスポートエリア(TSVWG)ワーキンググループがそれを管理しています。RFC 9260は プロトコルを定義しています。RFC 3286は 概要を提供します。
メッセージベースのマルチストリーミング
SCTP アプリケーションは、送信するデータをメッセージ (バイトのグループ) として SCTP トランスポート層に送信します。SCTP は、メッセージと制御情報を別々のチャンク(データ チャンクと制御チャンク)に配置します。各チャンクはチャンク ヘッダーで識別されます。このプロトコルは、メッセージを複数のデータ チャンクに分割できますが、各データ チャンクには 1 つのユーザー メッセージのデータのみが含まれます。SCTP は、チャンクを SCTP パケットにまとめます。インターネット プロトコルに送信される SCTP パケットは、パケット ヘッダー、SCTP 制御チャンク (必要な場合)、および SCTP データ チャンク (使用可能な場合) で構成されます。
SCTP はメッセージ指向と特徴付けられます。つまり、TCP のように途切れることのないバイト ストリームを転送するのではなく、一連のメッセージ (それぞれがバイトのグループ) を転送します。UDP と同様に、SCTP では送信者が 1 つの操作でメッセージを送信し、そのメッセージが 1 つの操作で受信側アプリケーション プロセスに渡されます。対照的に、TCP はストリーム指向のプロトコルであり、バイトのストリームを確実に順序どおりに転送します。ただし、TCP では、送信側アプリケーションが TCP トランスポートを呼び出して、送信するバイトのグループを渡した回数を受信側が知ることはできません。送信側では、TCP は、ネットワーク経由で送信されるのを待機しているバイトのキューにバイトを追加するだけで、個別の送信メッセージのキューを保持する必要はありません。キューは保持する必要があります。
マルチストリーミングという用語は、SCTP が複数の独立したチャンクのストリームを並行して送信する機能を指します。たとえば、Web ページの画像を Web ページのテキストと同時に送信します。本質的には、複数の接続を 1 つの SCTP アソシエーションにまとめ、バイトではなくメッセージ (またはチャンク) に対して操作を行います。
TCP は、各セグメントにバイトシーケンス番号を含めることで、ストリーム内のバイト順序を維持します。一方、SCTP は、ストリームで送信される各メッセージにシーケンス番号またはメッセージ ID [注 1]を割り当てます。これにより、異なるストリーム内のメッセージの順序を独立して設定できます。ただし、SCTP ではメッセージの順序はオプションです。受信側アプリケーションは、送信順ではなく受信順にメッセージを処理することを選択できます。
特徴
SCTP の機能は次のとおりです。
- 順序付きおよび順序なしのデータストリームの両方の信頼性の高い伝送
- マルチホーミングのサポートにより、接続の一方または両方のエンドポイントが複数の IP アドレスで構成できるようになり、冗長ネットワーク パス間の透過的なフェイルオーバーが可能になります。
- 独立したストリーム内でのチャンクの配信により、TCP バイト ストリーム配信とは異なり、不要なヘッドオブライン ブロッキングが排除されます。
- 明示的な部分信頼性
- パス選択と監視により、主要なデータ伝送パスを選択し、伝送パスの接続性をテストします。
- 検証および確認メカニズムは、フラッディング攻撃から保護し、重複または欠落したデータ チャンクを通知します。
- イーサネットジャンボフレームに適したエラー検出の改善
SCTPの設計者は、もともとインターネットプロトコル上で電話(つまり、Signaling System 7)を転送することを意図しており、IPでSS7シグナリングネットワークの信頼性属性の一部を複製することを目標としていました。このIETFの取り組みはSIGTRANとして知られています。その間、 Diameterプロトコル[3]やReliable Server Pooling(RSerPool)[4]など、他の用途も提案されています。
動機と採用
TCP は、インターネット上でデータを確実に転送するための主要な手段を提供してきました。しかし、TCP はいくつかのアプリケーションに制限を課しています。RFC 4960 より:
- TCP は、信頼性の高いデータ転送と、データの転送順序を厳格に守った配信の両方を実現します。アプリケーションによっては、順序を維持せずに信頼性の高い転送を必要とするものもあれば、データの部分的な順序付けで満足できるものもあります。どちらの場合も、TCP のヘッドオブライン ブロッキング プロパティによって不要な遅延が発生します。
- 個別のレコードまたはメッセージを交換するアプリケーションの場合、TCP のストリーム指向の性質により、個々のレコードを区別するために明示的なマーカーまたはその他のエンコーディングを追加する必要があります。
- 1 つの大きなパケットで十分な場合に多数の小さな IP パケットを送信することを避けるために、TCP 実装は、アプリケーションによってキューに入れられる可能性のあるより多くのデータを待つ間、データの送信を遅らせることがあります ( Nagle のアルゴリズム)。このような小さな遅延が望ましくない場合、アプリケーションはプッシュ機能を使用して (つまり、TCP パケット ヘッダーに PSH フラグを設定することによって)、ケースバイケースで遅延のない送信を明示的に要求する必要があります。一方、SCTP では、遅延のない送信をアソシエーションのデフォルトとして設定できるため、望ましくない遅延がなくなりますが、転送オーバーヘッドが高くなります。[5]
- TCP ソケットの限られた範囲[曖昧]により、マルチホーム ホストを使用して可用性の高いデータ転送機能を提供するタスクが複雑になります。
- TCP は、 SYN 攻撃などのサービス拒否攻撃に対して比較的脆弱です。
認知度の低さ、実装の不足(特にMicrosoft Windows)、アプリケーションサポートの不足、ネットワークサポートの不足により、導入が遅れています。[6]
SCTPは、携帯電話分野ではいくつかのコアネットワークインターフェースのトランスポートプロトコルとして採用されています。[7]
マルチホーミング
SCTP は信頼性を高めるために冗長パスを提供します。
各 SCTP エンドポイントは、ハートビートを使用して、リモート エンドポイントのプライマリ アドレスと冗長アドレスの到達可能性を確認する必要があります。各 SCTP エンドポイントは、リモート エンドポイントから受信したハートビートを確認する必要があります。
SCTP がリモート アドレスにメッセージを送信する場合、送信元インターフェイスはホストのルーティング テーブルによってのみ決定されます (SCTP によって決定されるわけではありません)。
非対称マルチホーミングでは、2 つのエンドポイントのうちの 1 つがマルチホーミングをサポートしていません。
ローカル マルチホーミングおよびリモート シングルホーミングでは、リモート プライマリ アドレスに到達できない場合、代替パスが可能であっても SCTP アソシエーションは失敗します。
パケット構造
SCTP パケットは 2 つの基本セクションで構成されます。
- 共通ヘッダーは最初の 12 バイトを占め、青色で強調表示されます。
- パケットの残りの部分を占めるデータチャンク。最初のチャンクは緑色で強調表示され、N 個のチャンクの最後のもの (チャンク N) は赤色で強調表示されます。
各チャンクは 1 バイトのタイプ識別子で始まり、RFC 9260 で 15 種類のチャンク タイプが定義され、追加の RFC で少なくとも 5 種類が定義されています。[注 2] 8 ビットのフラグ、2 バイトの長さフィールド、およびデータがチャンクの残りを構成します。チャンクが 4 バイトの倍数にならない場合 (つまり、長さが 4 の倍数にならない場合)、チャンクの長さには含まれないゼロが埋め込まれます。2 バイトの長さフィールドにより、各チャンクの長さは 65,535 バイトに制限されます (タイプ、フラグ、および長さフィールドを含む)。
安全
暗号化は元の SCTP 設計の一部ではありませんでしたが、SCTP は、SYN フラッディング攻撃から保護するための 4 ウェイハンドシェイク( TCP の 3 ウェイ ハンドシェイクと比較)や、関連付けの検証と信頼性のための大きな「クッキー」など、セキュリティを強化する機能を備えて設計されました。
信頼性も SCTP のセキュリティ設計の重要な部分でした。マルチホーミングにより、一部のルートやインターフェイスがダウンした場合でも、接続を開いたままにすることができます。これは、SCTP を使用して IP ネットワーク上でSS7 を伝送し、ネットワーク異常が発生しても通信サービスを維持するためにリンク停止中に強力な回復力を必要とする SIGTRAN にとって特に重要です。
SCTP は、フィンガープリンティングの候補として適している場合があります。一部のオペレーティング システムでは SCTP サポートが有効になっていますが、TCP や UDP ほどよく知られていないため、ファイアウォールや侵入検知の設定で見落とされ、プローブ トラフィックが許可されてしまうことがよくあります。
実装
SCTPリファレンス実装はFreeBSD、Mac OS X、Microsoft Windows、Linux上で動作します。[8]
次のオペレーティング システムはSCTP を実装しています。
- AIXバージョン 5 以降
- NetBSD [9] 8.0以降[10]
- Cisco IOS 12以上
- DragonFly BSDバージョン1.4以降ではサポートされていますが、バージョン4.2ではサポートが廃止されています[11]
- FreeBSDバージョン7以降には、リファレンスSCTP実装が含まれています[12]
- HP-UX、11i v2以上[13]
- イルモス
- Linuxカーネル2.4以上
- QNX Neutrino Realtime OS、[14] 6.3.0から6.3.2、6.4.0以降は非推奨[15]
- Compaq SCTP アドオン パッケージを搭載したTru64
- Sun Solaris 10以上[16]
- VxWorksバージョン 6.2.x から 6.4.x、および 6.7 以降
サードパーティドライバー:
- マイクロソフトウィンドウズ:
- SctpDrvカーネルドライバはBSD SCTPスタックをWindowsに移植したものである(2012年以降は廃止)[17]
- MacOSの場合:
- Mac OS X用SCTPネットワークカーネル拡張[18]
ユーザー空間ライブラリ:
- ポータブルSCTPユーザーランドスタック[19]
- SCTPライブラリ[20]
- Windows XPへの移植[21]
- Oracle Java SE 7
- アーラン/OTP
次のアプリケーションは 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 によって廃止されました)
参照
- トランスポート層 § トランスポート層プロトコルの比較
- セッション開始プロトコル(SIP) – SCTP、TCP、またはUDPを介して複数のストリームを開始できます。
- マルチパスTCP – TCP接続で複数のパスを使用してリソースの使用率を最大化し、冗長性を高めることができます。
- ハッピーアイボール– 元々は接続にIPv4またはIPv6を効率的に選択するために設計されたものです。[24] TCPやSCTPなどの異なるトランスポートプロトコルから選択するように適応させることもできます。[25]
注記
- ^ DATAチャンクは順序付けられたメッセージにシーケンス番号を使用し、I-DATAチャンクは元のDATAチャンクのいくつかの問題を解決し、すべてのメッセージにメッセージIDを使用します。
- ^ 詳細については、SCTP パケット構造を参照してください。
参考文献
- ^ 「プロトコル番号」。iana.org。IANA。2014年9月9日閲覧。
- ^ ストリーム制御伝送プロトコル。IETF 。 2000年10月。doi : 10.17487/ RFC2960。RFC 2960 。
- ^ 「トランスポート」。Diameter ベース プロトコル。IETF。sec . 2.1。doi : 10.17487/RFC3588。RFC 3588。2012年5 月 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 と 4G パケット ネットワーク: モバイル ブロードバンド革命の推進(第 2 版). アムステルダム ボストン: Elsevier/AP, Academic Press は 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 Removes SCTP」Lists.dragonflybsd.org 2015年1月7日。 2016年4月28日閲覧。
- ^ 「FreeBSD の技術的進歩について」。FreeBSD プロジェクト。2008 年 3 月 9 日。2008年 9 月 13 日閲覧。SCTP
: FreeBSD 7.0 は、マルチパス配信、フェイルオーバー、マルチストリーミングなどの機能を通じて、VoIP、電気通信、およびその他のアプリケーションを高い信頼性とさまざまな品質の伝送でサポートすることを目的とした、新しい IETF ストリーム制御伝送プロトコル (SCTP) プロトコルのリファレンス実装です。
- ^ 「Stream Control Transmission Protocol (SCTP)」。Hewlett-Packard Development Company。2013 年 1 月 3 日時点のオリジナルよりアーカイブ。
- ^ 「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 日に閲覧。
- ^ 「Mac OS X用SCTPネットワークカーネル拡張機能」。GitHub 。 2021年9月23日。
- ^ “sctplab/usrsctp”. Github . 2021年9月21日閲覧。
- ^ 「SCTP ダウンロード ページ」 2006 年 5 月 29 日. 2011 年 2 月 4 日閲覧。
- ^ 「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). 「透過的な TCP から SCTP への変換シム レイヤー」(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 ワークグループ
- 「Michael Tüxen の SCTP ページ」。
- 「Lode Coene の SCTP ページ」。
- 「Thomas Dreibholz の SCTP プロジェクト ページ」。
