EN JA
SCTP(4)
SCTP(4) FreeBSD Kernel Interfaces Manual SCTP(4)

名称

sctpインターネットストリーム制御転送プロトコル

書式

#include < sys/types.h>
#include < sys/socket.h>
#include < netinet/sctp.h>

int
socket( AF_INET, SOCK_STREAM, IPPROTO_SCTP);

int
socket( AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

解説

SCTP プロトコルは、データの信頼性、フロー制御、双方向の転送を提供します。それは、メッセージ指向のプロトコルであり、 SOCK_STREAMSOCK_SEQPACKET 抽象化をサポートすることができます。 SCTP は、標準のインターネットアドレス形式を使用して、さらに、“ポートアドレス”のホスト毎のコレクション (収集) を提供します。したがって、各アドレスは、ホスト識別ピア (相手側) 実態上の特定の SCTP ポートで、ホストとネットワークを指定するインターネットアドレスで構成されます。

SCTP のプログラミングに関して 2 つのモデルがあります。最初は、 SOCK_STREAM 抽象化を使用します。この抽象化で、 SCTP プロトコルを利用するソケットは、“アクティブ” (active) または“パッシブ” (passive) です。アクティブなソケットは、パッシブなソケットに接続を開始します。デフォルトで、 SCTP ソケットは、アクティブで作成されます。パッシブなソケットを作成するためには、 bind(2) または sctp_bindx(3) システムコールでソケットをバインドした後に、 listen(2) システムコールを使用しなければなりません。パッシブなソケットだけが、着信接続を受け付けるために accept(2) 呼び出しを使用します。アクティブなソケットだけが、接続を開始するために connect(2) 呼び出しを使用します。

別の抽象化 SOCK_SEQPACKET は、ユーザが (ソケットアドレスを運ぶ有効な送信呼び出しのいずれかを使用して)、アドレスに送信するする点において、“connectionless” (コネクションレス) 操作モードを提供し、アソシエーションは、基本的な SCTP 転送スタックによって暗黙的にセットアップされます。この抽象化は、4 つの方法のハンドシェイクの 3 番目の行程でデータを送信することができるただ一つのものです。ユーザは、ソケットが接続を受け付けることができるように、まだ listen(2) を呼び出さなければなりません。しかしながら、 listen(2) の呼び出しは、まだ他のピアへの暗黙の接続を開始することからユーザを禁止しません。

SCTP プロトコルは、直接マルチホーミング (multi-homing) をサポートします。それで、“ワイルドカード”のアドレス INADDR_ANY でソケットをバインドするとき、 SCTP スタックは、ピアの範囲で考えられるすべてのローカルのアドレスに関してピアに情報を与えます。そして、ピアには、たぶんローカルホストに到達する複数のパスがあります。

また、 SCTP 転送プロトコルもマルチストリーム (multi-stream) されます。マルチストリームは、メッセージのサブ順序付けフローを送信する能力を参照します。ユーザは、 sctp_send(3) 関数呼び出しのような、拡張された送信呼び出しの 1 つで特定のストリームを指定することによって、これを実行します。異なったストリームでのメッセージの送信は、データの平行な配信を許可します、すなわち、ストリーム 1 におけるメッセージの損失は、ストリーム 2 で送信されるメッセージの配信をブロックしません。

また、 SCTP 転送プロトコルは、同様に順序付けされていないサービスを提供します。順序付けされていないサービスによって、他のメッセージの順序に関係しないで、メッセージを送信して配信することができます。

拡張

また、 SCTP の FreeBSD の実装は、次の拡張をサポートします:
sctp 部分的な信頼性
この拡張によって、いくつかのユーザの指定されたパラメータに基づいてスキップされ配信されないメッセージを持つことができます。
sctp 動的なアドレス付け
この拡張によって、既存のアソシエーションから動的にアドレスを追加して、削除することができます。
sctp 認証
この拡張によって、ユーザは、メッセージを送信するピアが、実際にアソシエーションをセットアップするピアであることを確認するために (データを含んでいる) 特定のピアのチャンク (塊) を認証することができます。また、共有されたキーオプションは、2 つのスタックがキーを前もって共有することができるように、供給されます。
パケットの取りこぼし
いくつかのルータは、不正による損失を報告する特別なサテライト (従属) プロトコルをサポートしています。これによって、帯域幅の利用においてそれに続く損失なしで再転送することができます。
ストリームのリセット
この拡張によって、どちらかの側のユーザは、いくらか、またはすべてのストリームで使用されるストリームシーケンス番号をリセットできます。

SCTP は、 setsockopt(2) で設定され、 getsockopt(2) または sctp_opt_info(3) でテストすることができる、多くのソケットオプションをサポートします:

SCTP_NODELAY
ほとんどの状況において、 SCTP は、それが存在しているとき、データを送信します。発行済のデータがまだ承認されていないとき、いったん承認が受信されると、単一のパケットで送信される少量の出力を収集します。応答を受信しないマウスイベントのストリームを送信するウィンドウシステムのような、いくつかのクライアントに関して、このパケット化は、重要な遅延を引き起こすかもしれません。ブール値のオプション SCTP_NODELAY は、このアルゴリズムを無効化します。
SCTP_RTOINFO
このオプションは、アソシエーション“再転送のタイムアウト”に関する特有の情報を返します。また、デフォルト値を変更するためにそれを使用することができます。
SCTP_ASSOCINFO
このオプションは、要求されたアソシエーションに関する特有の情報を返します。
SCTP_INITMSG
このオプションによって、利用者は、アソシエーションが暗黙のうちにセットアップされるときに、デフォルトの送信パラメータを取得するか、または設定することができます。それによって、利用者は、内向きで許可されたストリームの最大の数とピアの要求されたストリームの数としてそのようなものを変更することができ、
SCTP_AUTOCLOSE
1 対多ののモデル ( SOCK_SEQPACKET) において、アソシエーションは、暗黙のうちにセットアップされます。このオプションによって、ユーザは、アソシエーションを保持することができる、デフォルト番号のアイドル秒を指定することができます。 (ユーザメッセージが送信されないか、または、ピアから受信されていないところで) アイドル秒の後に、アソシエーションは、潔くクローズされます。この値のためのデフォルトは、0 または無制限 (すなわち、自動的にクローズされない) です。
SCTP_SET_PEER_PRIMARY_ADDR
動的なアドレス拡張によって、ピアは、特定のアドレスがプライマリアドレスに作られることも要求できます。このオプションによって、呼び出し側は、そのような要求をピアに行うことができます。また、ピアが動的なアドレス拡張をサポートしていないなら、この呼び出しが、失敗することに注意してください。呼び出し側は、ピアが、アソシエーションのセットアップの間または動的に伝える、有効なローカルアドレスを提供しなければならないことに注意してください。
SCTP_PRIMARY_ADDR
このオプションによって、呼び出し側が送信したいプライマリアドレスの設定を可能にします。呼び出し側は、プライマリとなるピアのアドレスを提供します。
SCTP_ADAPTATION_LAYER
また、動的アドレス拡張によって、ユーザは、アソシエーションのセットアップで 32 ビットの不透明な (サイズおよび形がわからない) 値を渡すことができます。このオプションによって、ユーザは、この値を設定するか、または取得できます。
SCTP_DISABLE_FRAGMENTS
デフォルトで、 SCTP は、ネットワークに適合し、次に後で、受信において、断片を単一のユーザメッセージに再構築する、ユーザメッセージを複数の断片に断片化します。代わりにこのオプションが有効にされるなら、パスの最大の転送単位 (P-MTU) を超える任意の送信は、失敗し、メッセージは、送信されません。
SCTP_PEER_ADDR_PARAMS
このオプションによって、ユーザは、特定のピアアドレスのパラメータを設定するか、または取得できます。
SCTP_DEFAULT_SEND_PARAM
ユーザが拡張された送信呼び出し (例えば、 sctp_sendmsg(3)) の 1 つを使用しないとき、デフォルト値の組は、それぞれの送信に適用します。これらの値は、プロトコル毎の ID と同様に送信するストリーム番号のようなものを含んでいます。このオプションによって、呼び出し側は、これらの値を取得して、設定できます。ユーザがこれらのデフォルト値を変更するなら、これらの新しい値は、情報が送信側によって提供されない (すなわち、非拡張 API が使用される) ときはいつも、デフォルトとして使用されます。
SCTP_EVENTS
SCTP には、アプリケーションと通信することができるデータでないイベントがあります。デフォルトで、これらは、受信されたメッセージで設定された特別なフラグ MSG_NOTIFICATION でデータパスに到着するので、すべて無効にされます。このオプションによって、呼び出し側は、それらが、受信に関心がある、異なったイベントで設定されるのと同様に現在受信された、イベントを取得できます。
SCTP_I_WANT_MAPPED_V4_ADDR
SCTP は、IPV4 と IPV6 の両方をサポートします。 SCTP は、マルチホームであるので、アソシエーションは、IPV4 と IPV6 アドレスの両方にわたります。デフォルトで、IPV6 ソケットをオープンするとき、データがソケットでピアの V4 アドレスから到着するとき、 V4 アドレスは、AF_INET のアドレスファミリで示されます。これが望ましくないなら、このオプションを、有効にすることができ、すべての V4 アドレスをマップしている V6 表現に変換します。
SCTP_MAXSEG
デフォルトで、 SCTP は、ピアの最も小さい P-MTU に基づくメッセージ断片化ポイントを選択します。このオプションによって、呼び出し側は、それをより小さい値に設定できます。ユーザは、この値を変更することができますが、P-MTU がユーザによって設定された値より小さいなら、P-MTU 値は、任意のユーザ設定を上書きすることに注意してください。
SCTP_DELAYED_ACK_TIME
このオプションによって、ユーザは、 SCTP が使用する遅延 ack 時間 (ミリ秒単位の) を設定して取得できます。デフォルトは、200 ミリ秒です。
SCTP_PARTIAL_DELIVERY_POINT
時には、 SCTP は、全体のメッセージが到着する前に非常に大きいメッセージの配信を始める必要があります。デフォルトで、 SCTP は、着信メッセージが受信バッファの 1/4 より大きくなるまで、ウェートします。このオプションによって、スタックに値は、より小さい値で上書きすることができます。
SCTP_FRAGMENT_INTERLEAVE
時には、 SCTP は、(上記のように) の部分的な配信を開始します。通常の場合では、連続した読み込みは、必要であるなら、ブロックして、そのメッセージのすべてが読み込まれるまで、メッセージの残りを返し続けます。しかしながら、これは、他のメッセージが到着して、配信の準備ができて、部分的に配信されたメッセージの後ろでブロックされることを意味します。このオプションが有効にされているなら、部分的に配信されたメッセージに、それ以上の受信されるデータがないとき、続く読み込みは、配信の準備ができてきる異なったメッセージを返します。ユーザがメッセージ (ストリームとストリームシーケンス番号を通して) の違いを伝えることができるように拡張 API を使用しなければならないので、このオプションは、デフォルトで、オフです。
SCTP_AUTH_CHUNK
デフォルトで、動的なアドレシングチャンク (塊) だけが認証されます。このオプションによって、ユーザは、追加のチャンク (塊) が同様に認証されるよう要求できます。このオプションへの連続した呼び出しは、動作し、認証を必要とするより多くのチャンク (塊) を追加し続けることに注意してください。このオプションは、今後のアソシエーションのみに効果があり、既存のものではないことに注意してください。
SCTP_AUTH_KEY
このオプションによって、ユーザは、後でピアを認証するために使用できる共有されたキーを指定できます。
SCTP_HMAC_IDENT
このオプションによって、利用者は、ピアを認証するために使用される HMAC アルゴリズムのリストを取得するか、または設定できます。 HMAC 値は、最初の HMAC 識別子が最も好ましく、最後は、最も好ましくないところの優先順であることに注意してください。
SCTP_AUTH_ACTIVE_KEY
このオプションによって、利用者は、認証情報の生成のためにキーをアクティブにすることができます。ピアは、同じキーを持たなければなりません、さもなければ、データが破棄されることに注意してください。
SCTP_AUTH_DELETE_KEY
このオプションによって、利用者は、古いキーを削除できます。
SCTP_USE_EXT_RECVINFO
ソケット API の文書によって、拡張された送信/受信情報構造を使用できます。拡張された構造は、(現在の受信が完了して後に)、そのような情報が知られているなら、次の受信されるメッセージに関連する追加フィールドを含みます。デフォルトで、システムは、この情報を渡しません。このオプションによって、ユーザは、この情報を要求できます。
SCTP_AUTO_ASCONF
デフォルトで、すべてのアドレスとシステム管理者へのバインドが自動的で動的なアドレスを有効にするとき、 SCTP スタックは、このオプションを真に設定することによって、任意のピアへの追加と削除要求に変更するアドレスを自動的に生成します。このオプションによって、終点 (endpoint) は、その振舞いを無効にすることができます。
SCTP_MAXBURST
デフォルトで、 SCTP は、混雑したウィンドウの開始で、パケットの大きなバーストを生成することができないように、マイクロバースト制御を実装します。デフォルトのバースト制限は、4 です。このオプションによって、ユーザは、この値を変更することができます。
SCTP_CONTEXT
多くの sctp 拡張呼び出しには、コンテキストフィールドがあります。コンテキストフィールドは、送信の失敗で返される 32 ビットの不透明な値です。このオプションによって、デフォルトのコンテキスト値を設定する呼び出し側は、ユーザによってなにも提供されないとき、使用することができます。
SCTP_EXPLICIT_EOR
デフォルトで、単一の送信は、完全なメッセージです。 SCTP は、暗黙的にレコードの境界を生成します。このオプションが有効にされるなら、 sctp_sndrcvinfo フラグフィールドで渡される、特別なフラグ SCTP_EOR でユーザが、レコードの終わりを示すまで、すべて送信は、同じメッセージの部分です。これは、ユーザが異なって指定するまで、同じメッセージのすべての送信部分を効果的に作成します。これは、呼び出し側が、 SCTP_EOR を SCTP に渡す後まで、ストリーム番号を変更してはならないことを意味し、そうでなければ、エラーが返されます。
SCTP_STATUS
このオプションは、指定されたアソシエーションに関する様々な状態情報を返す読み込み専用のオプションです。
SCTP_GET_PEER_ADDR_INFO
この読み込み専用のオプションは、ピアアドレスの情報を返します。
SCTP_PEER_AUTH_CHUNKS
この読み込み専用のオプションは、ピアが認証されるのを必要とするチャンク (塊) のリストを返します。
SCTP_LOCAL_AUTH_CHUNKS
この読み込み専用のオプションは、認証しなければならない局所的に必要なチャンク (塊) のリストを返します。
SCTP_RESET_STREAMS
このソケットオプションは、ストリームのシーケンス番号、またはすべてのストリームのシーケンス番号をリセットするために使用されます。また、ピアの SCTP 終点は、同様に、ストリームのリセット拡張をサポートしなければならないことに注意してください。
December 15, 2006 FreeBSD