14. 新しい STUN 属性 (New STUN Attributes)
この STUN 拡張は、以下の新しい属性を定義します:
0x000C: CHANNEL-NUMBER0x000D: LIFETIME0x0010: 予約済み(以前は BANDWIDTH)0x0012: XOR-PEER-ADDRESS0x0013: DATA0x0016: XOR-RELAYED-ADDRESS0x0018: EVEN-PORT0x0019: REQUESTED-TRANSPORT0x001A: DONT-FRAGMENT0x0021: 予約済み(以前は 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 バイトで、トークン値が含まれます。