使用webRTC创建对等音频连接时,如果用户位于路由器后面,我们使用的STUN服务器将返回公共IP。现在在ICE对象中,我可以看到rport总是介于50000和更高之间。
有没有办法使用特定端口,以便用户不必打开所有这些端口?
答案 0 :(得分:10)
有没有办法使用特定端口,以便用户不必打开所有这些端口?
我认为你有一个误解。 STUN和ICE(包括其WebRTC衍生物)的重点在于避免任何人必须在其NAT上打开端口。而是,STUN和ICE动态打开端口。
以下是它的工作原理(简要说明)。
客户端在随机端口(例如50001)上打开套接字
联系STUN服务器使用该套接字发现此套接字的外部IP:端口映射。 (例如192.168.1.2:50001映射到1.2.3.4:50001)。端口不一定必须在内部和外部地址之间进行匹配,但它们通常都是匹配的,因此我将继续使用此示例。
通过外部机制(SIP,XMPP,Jingle,带字符串的杯子),交换两个节点的候选地址列表。这包括收集的所有已知内部和外部地址(例如192.168.1.2:50001和1.2.3.4:50001)。
使用在步骤1中打开的相同套接字,双方直接在彼此之间发送(STUN)消息(UDP数据包)。第一对消息可能被路由器/防火墙阻止。但是因为一方向远程地址发起了一个出站数据包,所以允许来自该地址的后续数据包重新进入。这称为“打孔步骤”#34;。因此,端口是动态打开的,路由器不需要任何特定配置。
希望这有帮助。
答案 1 :(得分:1)
除非您在自己的应用程序中使用webrtc API,否则无法以编程方式进行编程。浏览器将从本地范围内选择特定的本地端口;然后它会在SDP和ICE候选人信息中通知您。
STUN服务器只能帮助发现客户端是否在NAT /防火墙后面;然后ICE使用此信息建立点对点连接。
我听说过可能有办法通过Chrome政策模板控制该端口范围(企业用来限制Chrome设置) - http://www.chromium.org/administrators/policy-templates。值得研究......