14. 新的 STUN 属性
此 STUN 扩展定义以下新的属性:
0x000C: CHANNEL-NUMBER0x000D: LIFETIME0x0010: Reserved (原为 BANDWIDTH)0x0012: XOR-PEER-ADDRESS0x0013: DATA0x0016: XOR-RELAYED-ADDRESS0x0018: EVEN-PORT0x0019: REQUESTED-TRANSPORT0x001A: DONT-FRAGMENT0x0021: 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 值.