8. 权限
对于每个 allocation, server 都维护一个包含零个或多个 permission (权限) 的列表. 每个 permission 由一个 IP 地址和一个关联的 time-to-expiry 组成. 当 permission 存在时, server 允许所有使用该 permission 中 IP 地址的 peer 向 client 发送数据. time-to-expiry 是 permission 过期前剩余的秒数. 在某个 allocation 的上下文中, permission 由其关联的 IP 地址唯一标识.
通过发送 CreatePermission request 或 ChannelBind request, client 可以使 server 为给定 IP 地址安装或刷新 permission. 这会导致以下两种情况之一:
-
如果该 IP 地址不存在 permission, 则创建一个 permission, 其 IP 地址为给定地址, time-to-expiry 等于 Permission Lifetime.
-
如果该 IP 地址已存在 permission, 则将该 permission 的 time-to-expiry 重置为 Permission Lifetime.
Permission Lifetime 必须为 300 秒 (= 5 分钟).
每个 permission 的 time-to-expiry 每秒递减一次, 直到达到 0; 此时 permission 过期并被删除.
CreatePermission 和 ChannelBind request 可以在同一个 permission 上自由混用. 某个 permission 可以先由 CreatePermission request 安装和/或刷新, 之后再由 ChannelBind request 刷新, 反之亦然.
当 UDP datagram 到达 allocation 的 relayed transport address 时, server 从 IP 头部提取源 IP 地址. 然后 server 将此地址与该 allocation 的 permission 列表中每个 permission 关联的 IP 地址进行比较. 如果未找到匹配项, 则不允许中继, server 会静默丢弃该 UDP datagram. 如果找到精确匹配, 则认为 permission 检查成功, server 按本文档其他位置的规定继续处理该 UDP datagram (第 10.3 节). 注意, 只比较地址, 不考虑端口号.
一个 allocation 的 permission 与另一个 allocation 的 permission 完全无关. 如果某个 allocation 过期, 它的所有 permission 也随之过期.
NOTE: 尽管 TURN permission 在 5 分钟后过期, 但在本文档发布时部署的许多 NAT 会以快得多的速度使其 UDP binding 过期. 因此, 使用 TURN 的应用很可能希望以更高频率发送某种 keep-alive 流量. 使用 ICE 的应用应遵循 ICE [RFC5245] 的 keep-alive 指南, 不使用 ICE 的应用推荐采用类似做法.