我试图了解 WebRTC 的工作原理,但在理解 STUN 的作用时遇到了麻烦。
根据我在各种网页(例如rfc5389 )上阅读有关 STUN 的内容,或在 WebRTC 上观看Google 2013 年的演示,STUN 似乎唯一能做的就是告诉客户端它的公共 IP 地址/端口是什么。
然而,看看如何实现 STUN 服务器表明他们涉及更多,并且似乎包括诸如对 UDP、TCP 和 TLS-TCP 的故障回复支持之类的东西,以及客户端和服务器报告他们什么的握手期望他们的 IP 地址是,并根据对方所说的 IP 地址进行验证。例如,有趣的是,jselbi 的 stunserver 项目有超过 50 个 C++ 文件。
此外,我不明白为什么 WebRTC 客户端甚至需要知道自己的公共 IP 地址。在Google 的演示视频(时间 19:46)中,两个对等方想要从 NAT 后面相互通信,并且每个对等方还与信令服务器进行通信。该图表明每个信令服务器不知道对等方的公共 IP 地址/端口。但是这个图肯定是错误的:它显示了对端直接与信令服务器通话,但通过 NAT 间接与 STUN 服务器通话。实际上,对等方也将通过 NAT 与信令服务器通信,因此,信令服务器已经知道对等方的公共 IP 地址/端口。
由此,我遇到的问题是:
从客户端到信令服务器的任何请求都将在请求的 IP 标头中包含该客户端的公共 IP 地址/端口。客户端与 STUN 服务器通话时也是如此,这就是为什么 STUN 服务器可以用公共 IP 地址/端口进行响应的原因......是吗? …