ICE 连通性检查 - 通过 TURN 的 STUN 绑定响应
ICE Connectivity Check - STUN Binding Responses through 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
尝试确定这是一个有效的连接检查时,它会根据其 local/remote 个候选者检查响应。
对于 local 候选人检查:
它查看 STUN 响应的 XOR-MAPPED-ADDRESS
,在本例中为 1.2.3.4 40000
。这是设备 B 看到消息的源地址。这与它的本地候选人相匹配,因此我们在这里很好。
对于远程候选人检查:
Device A
如何检查 remote candidate equals the destination address to which the request was sent.
?
据我所知,这是一个只有在 allocation/permission 阶段配置的 TURN 服务器知道的传输地址。如果我不得不猜测,我认为它与包含 XOR-PEER-ADDRESS
.
的 SEND INDICATION 有关
即
if (local candidate == XOR-MAPPED-ADDRESS &&
remote candidate == XOR-PEER-ADDRESS)
pair is valid
这是正确的吗?
我认为有效的定义与响应的有效性脱钩。这可以通过验证消息完整性和匹配事务 ID 来检查。如果您得到的响应在这个意义上是有效的,那么您就构建了有效对。
现在...
This matches its local candidate, thus we are good here.
这与中继候选人的本地地址匹配。
For the remote candidate check:
您一直在通过 TURN 服务器发送 stun 消息,在发送指示中指定异或对等地址,并且还在响应的数据指示中接收异或对等地址。
另请参阅 https://datatracker.ietf.org/doc/html/rfc5245#section-7.1.3.2.2 了解完整详情。有点含糊,因为 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
尝试确定这是一个有效的连接检查时,它会根据其 local/remote 个候选者检查响应。
对于 local 候选人检查:
它查看 STUN 响应的 XOR-MAPPED-ADDRESS
,在本例中为 1.2.3.4 40000
。这是设备 B 看到消息的源地址。这与它的本地候选人相匹配,因此我们在这里很好。
对于远程候选人检查:
Device A
如何检查 remote candidate equals the destination address to which the request was sent.
?
据我所知,这是一个只有在 allocation/permission 阶段配置的 TURN 服务器知道的传输地址。如果我不得不猜测,我认为它与包含 XOR-PEER-ADDRESS
.
即
if (local candidate == XOR-MAPPED-ADDRESS &&
remote candidate == XOR-PEER-ADDRESS)
pair is valid
这是正确的吗?
我认为有效的定义与响应的有效性脱钩。这可以通过验证消息完整性和匹配事务 ID 来检查。如果您得到的响应在这个意义上是有效的,那么您就构建了有效对。
现在...
This matches its local candidate, thus we are good here.
这与中继候选人的本地地址匹配。
For the remote candidate check:
您一直在通过 TURN 服务器发送 stun 消息,在发送指示中指定异或对等地址,并且还在响应的数据指示中接收异或对等地址。
另请参阅 https://datatracker.ietf.org/doc/html/rfc5245#section-7.1.3.2.2 了解完整详情。有点含糊,因为 TURN 是在别处指定的。