gpt4 book ai didi

tcp - Chrome WebRTC 数据通道 : ICE-TCP server reflexive candidates missing even with STUN

转载 作者:可可西里 更新时间:2023-11-01 02:32:43 28 4
gpt4 key购买 nike

我正在 build (又一个)manual signalling WebRTC chat via DataChannels (CoffeeScript,对不起 JS 伙计们)。它在本地连接中工作正常,但在 NAT 后面的互联网上却不行(不幸的是我还不能尝试 NATless)。

我不想维护 TURN 服务器,但如果只有一个对等点必须可从 Internet 公开访问才能使设置正常工作,我也没问题。由于我是唯一拥有可访问机器的人,因此我们需要我来主持 TCP 连接。在 Firefox 中没有报告 TCP 候选者,所以我猜 ICE-TCP 还不被支持。

在 Chrome 上,查看 SDP 提议/答案,STUN 服务器正确识别了两个对等方的公共(public) IP 并添加了每个服务器自反 UDP 候选者(参见下面的第 10 行)但没有 TCP server reflexive candidate ,所以连接永远不会成功。还包括一个 TCP 候选者(请参阅下面的第 9 行),但它只是一个主机候选者。

这是一个示例 SDP 报价(我的公共(public) IP 是 88.88.88.88):

01. v=0
02. o=- 7452583715680269460 2 IN IP4 127.0.0.1
03. s=-
04. t=0 0
05. a=msid-semantic: WMS
06. m=application 50816 DTLS/SCTP 5000
07. c=IN IP4 88.88.88.88
08. a=candidate:864190085 1 udp 2122194687 10.10.10.4 50816 typ host generation 0
09. a=candidate:2097250933 1 tcp 1518214911 10.10.10.4 0 typ host generation 0
10. a=candidate:3500406889 1 udp 1685987071 88.88.88.88 50816 typ srflx raddr 10.10.10.4 rport 50816 generation 0
11. a=ice-ufrag:2066nM5kqwFDQMBT
12. a=ice-pwd:thO7oP0H+H1VBHFNfT8SLFiI
13. a=ice-options:google-ice
14. a=fingerprint:sha-256 72:87:BF:AD:03:9C:09:A7:58:0C:3A:DF:.....:B7
15. a=setup:actpass
16. a=mid:data
17. a=sctpmap:5000 webrtc-datachannel 1024

我确定互联网可以通过 NAT 访问我的机器并且端口转发没问题(我的机器是 NAT 转发到的默认主机)。

  • 为什么我的提议/答案中没有报告 TCP 服务器自反候选者?
  • Chrome 是否缺少服务器自反 ICE-TCP 候选发现?
  • 是否可以根据 STUN 服务器报告的公共(public) IP 手动添加服务器自反候选者?

最佳答案

首先,STUN 可以根据new RFC 支持NAT 上的TCP。并提出了 updates for said RFC for DTLS .尽管如此,Chrome 仍应支持 SCTP over TCP 和 Firefox still does not according to bug 891551 .

我也非常怀疑 MEDIA 是否会支持 TCP 连接,并怀疑任何 TCP 连接(中继或非中继)都只支持 SCTP。

[注意:为了历史起见,我保留了其余的答案,但很好 comment made by @adamfisk , 给我看了一些勘误表。]


原始答案

STUN CANNOT 通过 NAT 使用 TCP

它的 RFC在申请声明中说了这么多。 Stun 仅设计用于 UDP。这就是为什么 SCTP 需要建立在 UDP 之上,以便您可以绕过 NAT。 (只有 Chrome 提供了 TCP 的内部选项)。

如果您想让 TCP 流量通过它,但 STUN 不会,您必须在其中一个 NAT 上设置端口转发帮助你。

对不起坏消息:(

编辑:这只是 STUN 的限制,而不是 SCTP 的限制(因此 chrome 如果愿意的话也无能为力)。无论如何,FireFox 都不支持 SCTP over TCP。我不是 100% 的 TURN。 RFC好像说TCP只支持客户端和服务器之间的通信,而不是实际的中继。 Check this out , Chrome 可以通过 TURN 服务器与 TCP 一起工作,正如 T. R. Missner 在帖子底部所说的那样。

如果您想将 TCP 与 RTCDataConnection 一起使用,您可能必须在两端都设置端口转发。

关于tcp - Chrome WebRTC 数据通道 : ICE-TCP server reflexive candidates missing even with STUN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23434753/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com