STUN服务器真的必要吗?

问题描述 投票:0回答:1

[在WebRTC信令过程中,我必须通过向STUN服务器发出请求来使用端口找到我自己的公共IP地址。但这真的需要这么复杂吗?

难道我不只是向子网的路由器发送请求并获取其IP地址和它为我打开的端口吗?甚至更好的是,我将我的公共地址直接存储在计算机中,并且路由器会在更改时通知我。浏览器将提供一个API,以直接获取此公共地址。无需使用STUN服务器。我们为什么不这样做呢?

谢谢您的帮助。

webrtc nat stun
1个回答
0
投票

这些都是很好的问题。

我不能只向子网的路由器发送请求并获取其IP地址和它为我打开的端口吗?

存在一个称为uPnP的旧协议,它将为您动态打开端口映射-如果路由器支持的话。许多路由器曾经支持它。不确定现在的标准。

即使路由器是智能的并且有标准的信令机制,在以下情况下,STUN(或仍需要与STUN等效的东西)。

Carrier NAT是您的ISP与多个路由器共享公共IP地址的时间。也就是说,路由器在ISP启动时配置的公用IP地址实际上只是另一个专用IP地址。在上游,有一个“更大的路由器”正在与其他多个客户共享公共IPv4地址。也就是说,您的PC可能认为它的IP地址是192.16.1.2,而您的路由器报告它自己的IP地址是10.0.0.2。实际的公共IP地址1.2.3.4与其他客户共享。 STUN解决了此问题,因为到公共STUN服务器的出站数据包将同时通过两个NAT-在此过程中创建端口映射。

甚至更好,我将我的公共地址直接存储在计算机中,并且路由器在发生更改时会通知我

因为建立有效的P2P / WebRTC连接不仅仅知道您的公共IP地址。它还涉及知道还要使用什么“端口”。虽然大多数路由器都会尝试保留客户端PC在映射中使用的套接字的本地端口(例如,10.0.0.2:9876映射到1.2.3.4:9876)。并非总是如此-另一个节点可能正在使用您网络上的端口9876和/或许多NAT只是选择一个随机可用的端口进行映射。在一天结束时,您必须向P2P / WebRTC连接的另一侧发出“使用哪个IP”和“哪个端口”的信号。

浏览器将提供一个API,以直接获取此公共地址。

[有很多网站,例如whatismyipaddress.com会告诉您您的IP地址。但是,如果涉及到HTTP代理服务器(在PC上显式配置或在网络上静默部署),则Web服务将仅看到代理IP地址。另外的HTTP(S)是基于TCP的协议。 STUN和WebRTC基于UDP。

© www.soinside.com 2019 - 2024. All rights reserved.