メインコンテンツまでスキップ

14. 新しい STUN 属性 (New STUN Attributes)

この STUN 拡張は、以下の新しい属性を定義します:

  • 0x000C: CHANNEL-NUMBER
  • 0x000D: LIFETIME
  • 0x0010: 予約済み(以前は BANDWIDTH)
  • 0x0012: XOR-PEER-ADDRESS
  • 0x0013: DATA
  • 0x0016: XOR-RELAYED-ADDRESS
  • 0x0018: EVEN-PORT
  • 0x0019: REQUESTED-TRANSPORT
  • 0x001A: DONT-FRAGMENT
  • 0x0021: 予約済み(以前は TIMER-VAL)
  • 0x0022: RESERVATION-TOKEN

これらの属性の一部は、4 の倍数でない長さを持っています。STUN のルールにより、長さが 4 バイトの倍数でない属性の直後には、次の属性(存在する場合)が 4 バイト境界から始まるように、1 から 3 バイトのパディングを配置しなければなりません (MUST)([RFC5389] を参照)。

14.1. CHANNEL-NUMBER

CHANNEL-NUMBER 属性にはチャネル番号が含まれます。この属性の値部分は 4 バイト長で、16 ビット符号なし整数と、それに続く 2 オクテットの RFFU (Reserved For Future Use、将来の使用のために予約) フィールドで構成されます。RFFU フィールドは送信時に 0 に設定しなければならず (MUST)、受信時に無視されなければなりません (MUST)。

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Channel Number | RFFU = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

14.2. LIFETIME

LIFETIME 属性は、リフレッシュがない場合にサーバーがアロケーションを維持する期間を表します。この属性の値部分は 4 バイト長で、期限切れまでの残り秒数を表す 32 ビット符号なし整数値で構成されます。

14.3. XOR-PEER-ADDRESS

XOR-PEER-ADDRESS は、TURN サーバーから見たピアのアドレスとポートを指定します(例えば、ピアが NAT の背後にある場合、ピアのサーバー反射トランスポートアドレス)。XOR-MAPPED-ADDRESS [RFC5389] と同じ方法でエンコードされます。

14.4. DATA

DATA 属性は、すべての Send および Data インディケーションに存在します。この属性の値部分は可変長で、アプリケーションデータで構成されます(つまり、データがクライアントとピア間で直接送信される場合、UDP ヘッダーの直後に続くデータ)。この属性の長さが 4 の倍数でない場合は、この属性の後にパディングを追加する必要があります。

14.5. XOR-RELAYED-ADDRESS

XOR-RELAYED-ADDRESS は Allocate レスポンスに存在します。これは、サーバーがクライアントに割り当てたアドレスとポートを指定します。XOR-MAPPED-ADDRESS [RFC5389] と同じ方法でエンコードされます。

14.6. EVEN-PORT

この属性により、クライアントはリレーされたトランスポートアドレスのポートが偶数であることを要求し、(オプションで)サーバーが次に高いポート番号を予約することを要求できます。この属性の値部分は 1 バイト長です。その形式は次のとおりです:

     0
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|R| RFFU |
+-+-+-+-+-+-+-+-+

値には単一の 1 ビットフラグが含まれます:

  • R: 1 の場合、サーバーは後続のアロケーションのために次に高いポート番号(同じ IP アドレス上)を予約するよう要求されます。0 の場合、そのような予約は要求されません。

属性値の他の 7 ビットは、送信時にゼロに設定し、受信時に無視する必要があります。

この属性の長さは 4 の倍数ではないため、この属性の直後にパディングを配置する必要があります。

14.7. REQUESTED-TRANSPORT

この属性は、クライアントが割り当てられたトランスポートアドレスの特定のトランスポートプロトコルを要求するために使用されます。この属性の値は 4 バイトで、次の形式です:

     0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protocol | RFFU |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Protocol フィールドは、希望するプロトコルを指定します。このフィールドで使用されるコードポイントは、IPv4 ヘッダーの Protocol フィールドと IPv6 ヘッダーの NextHeader フィールドで許可されているコードポイント [Protocol-Numbers] から取得されます。本仕様では、コードポイント 17(ユーザーデータグラムプロトコル、User Datagram Protocol)の使用のみが許可されています。

RFFU フィールドは送信時にゼロに設定しなければならず (MUST)、受信時に無視されなければなりません (MUST)。これは将来の使用のために予約されています。

14.8. DONT-FRAGMENT

この属性は、クライアントがピアにアプリケーションデータをリレーする際に、サーバーが IP ヘッダーに DF(Don't Fragment、フラグメント禁止)ビットを設定することを要求するために使用されます。この属性には値部分がないため、属性長フィールドは 0 です。

14.9. RESERVATION-TOKEN

RESERVATION-TOKEN 属性には、サーバーによって予約保持されているリレーされたトランスポートアドレスを一意に識別するトークンが含まれます。サーバーは、クライアントにトークンについて通知するために、成功レスポンスにこの属性を含めます。クライアントは、後続の Allocate リクエストにこの属性を含めて、サーバーにそのリレーされたトランスポートアドレスをアロケーションに使用するよう要求します。

属性値は 8 バイトで、トークン値が含まれます。