ICE 连接检查 - 通过 TURN

时间:2021-07-24 23:33:43

标签: webrtc stun turn

假设我们有一个本地和远程候选人,如下所示:

本地候选人 - relay UDP 1.2.3.4 40000

远程候选人 - srflx UDP 192.0.0.1 50000

这描述了以下拓扑:

[ Device A <-> NAT <-> TURN ] <-> [ NAT <-> Device B ]

来自 RFC:

The agent constructs a candidate pair whose local candidate equals
the mapped address of the response, and whose remote candidate equals
the destination address to which the request was sent.

据我所知,Device A 将从其 TURN 中继发送一个 STUN 绑定到 Device B 的服务器反射传输地址。 Device B 将看到 TURN 服务器的 relayed-transport-address,将其放入 XOR-MAPPED-ADDRESS 字段,然后将响应发回。

Device A 尝试确定这是一次有效的连接检查时,它会根据其本地/远程候选对象检查响应。

对于本地候选人检查:

它查看 STUN 响应的 XOR-MAPPED-ADDRESS,在本例中为 1.2.3.4 40000。这是设备 B 看到消息的来源地址。这与其本地候选匹配,因此我们在这里很好。

对于远程候选人检查:

Device A 如何检查 remote candidate equals the destination address to which the request was sent.

据我所知,这是一个只有在分配/许可阶段配置的 TURN 服务器才知道的传输地址。如果我不得不猜测,我认为它与包含 XOR-PEER-ADDRESS 的 SEND INDICATION 有关。

if (local candidate == XOR-MAPPED-ADDRESS &&
    remote candidate == XOR-PEER-ADDRESS)
       pair is valid

这是正确的吗?

1 个答案:

答案 0 :(得分:1)

我认为有效的定义与响应的有效性是分离的。这可以通过验证消息完整性和匹配交易 ID 来检查。如果你得到一个在这个意义上有效的响应,你就构造了有效的对。

现在...

<块引用>

这与其本地候选匹配,因此我们在这里很好。

这与中继候选的本地地址相匹配。

<块引用>

对于远程候选人检查:

您已经通过 TURN 服务器发送了 stun 消息,在发送指示中指定了一个 xor-peer-address,并且还在响应的数据指示中收到了一个 xor-peer-address。

另请参阅 https://datatracker.ietf.org/doc/html/rfc5245#section-7.1.3.2.2 以了解详细信息。由于 TURN 是在别处指定的,所以有点含糊。