跳到主要内容

14. 新的 STUN 属性

此 STUN 扩展定义以下新的属性:

  • 0x000C: CHANNEL-NUMBER
  • 0x000D: LIFETIME
  • 0x0010: Reserved (原为 BANDWIDTH)
  • 0x0012: XOR-PEER-ADDRESS
  • 0x0013: DATA
  • 0x0016: XOR-RELAYED-ADDRESS
  • 0x0018: EVEN-PORT
  • 0x0019: REQUESTED-TRANSPORT
  • 0x001A: DONT-FRAGMENT
  • 0x0021: Reserved (原为 TIMER-VAL)
  • 0x0022: RESERVATION-TOKEN

其中一些属性的长度不是 4 的倍数. 按照 STUN 规则, 任何长度不是 4 字节倍数的属性后面必须紧跟 1 到 3 个填充字节, 以确保下一个属性 (如果存在) 从 4 字节边界开始 (见 [RFC5389]).

14.1. CHANNEL-NUMBER

CHANNEL-NUMBER 属性包含 channel number. 该属性的值部分长度为 4 字节, 由一个 16 位无符号整数后跟一个两八位组的 RFFU (Reserved For Future Use) 字段组成. 该字段在发送时必须设置为 0, 在接收时必须被忽略.

     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 属性表示在没有刷新时服务器将维持 allocation 的持续时间. 该属性的值部分长度为 4 字节, 由一个 32 位无符号整数值组成, 表示距离过期还剩余的秒数.

14.3. XOR-PEER-ADDRESS

XOR-PEER-ADDRESS 指定从 TURN 服务器视角看到的对等方地址和端口. (例如, 如果对等方位于 NAT 后面, 则为该对等方的服务器反射传输地址.) 其编码方式与 XOR-MAPPED-ADDRESS [RFC5389] 相同.

14.4. DATA

DATA 属性存在于所有 Send indication 和 Data indication 中. 该属性的值部分长度可变, 由应用数据组成 (也就是如果数据直接在客户端与对等方之间发送, 会紧跟在 UDP 头部之后的数据). 如果该属性的长度不是 4 的倍数, 则必须在该属性之后添加填充.

14.5. XOR-RELAYED-ADDRESS

XOR-RELAYED-ADDRESS 存在于 Allocate 响应中. 它指定服务器分配给客户端的地址和端口. 其编码方式与 XOR-MAPPED-ADDRESS [RFC5389] 相同.

14.6. EVEN-PORT

此属性允许客户端请求 relayed transport address 中的端口为偶数, 并且 (可选地) 请求服务器保留下一个更高的端口号. 该属性的值部分长度为 1 字节. 其格式为:

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

该值包含一个单独的 1 位标志:

  • R: 如果为 1, 则请求服务器为后续 allocation 保留下一个更高的端口号 (在同一 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 字段在发送时必须设置为零, 在接收时必须被忽略. 它保留供将来使用.

14.8. DONT-FRAGMENT

客户端使用此属性请求服务器在向对等方中继应用数据时, 设置 IP 头部中的 DF (Don't Fragment) 位. 此属性没有值部分, 因而属性长度字段为 0.

14.9. RESERVATION-TOKEN

RESERVATION-TOKEN 属性包含一个 token, 用于唯一标识服务器正在保留的 relayed transport address. 服务器在成功响应中包含此属性以告知客户端该 token, 客户端在后续 Allocate 请求中包含此属性, 以请求服务器将该 relayed transport address 用于 allocation.

属性值为 8 字节, 其中包含 token 值.