Skip to main content

14. New STUN Attributes (新 STUN 属性)

本 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 字节倍数的属性后面必须 (MUST) 紧跟 1 到 3 个填充字节,以确保下一个属性(如果有)从 4 字节边界开始(参见 [RFC5389])。

14.1. CHANNEL-NUMBER

CHANNEL-NUMBER 属性包含通道号。此属性的值部分长度为 4 字节,由一个 16 位无符号整数组成,后跟一个两字节的 RFFU (Reserved For Future Use,保留供将来使用) 字段,在传输时必须 (MUST) 设置为 0,在接收时必须 (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 字节,包含令牌值。