直接穿透防火墙的主动ICE TCP

作者:Nils Ohlmeier(原文链接

翻译:刘通

 

active ice1

         随着bug 1335939登录Firefox 54版本,我们终于在Firefox浏览器中将主动ICE TCP连接作为默认设定。

 

ICE TCP跟我有关系吗?

本质上讲,这项更新意味着Firefox浏览器会尝试通过TCP建立通向其他任一ICE终端的ICE连接,提供ICE TCP候选来监听流入的连接。Firefox现在不借助TURN TCP的帮助就可以建立到媒体服务器的直接TCP连接。

 

深入分析

         ICE TCP致力于在使用UDP的普通ICE无法工作的情况下创建连接。它应该会产生3种不同的新的ICE候选:

         #主动ICE TCP候选

         #被动ICE TCP候选

         #同步打开的ICE TCP候选

         第一个,主动ICE TCP候选,意味着ICE实现可以作为一个TCP用户。它会尝试建立一个新的TCP连接与另一端监听socket相连。我们在Firefox 54中将其改为默认设定。

         被动ICE TCP候选指的是实现可以对一个端口进行输入的TCP连接的监听。Firefox不支持e10s(也就是不支持多进程。)我们假设大部分的Firefox实例不在他们可以接收输入连接的环境下运行。因此我们目前就可以不考虑这个问题。

       最后一个候选种类,同步打开,指的是实现监听的端口,与产生流出连接的端口是同一端口。换句话说,就像是同一时刻,用户和服务器都处在同一个端口下。因为我们还不能使用e10s来监听输入的TCP连接,所以这个模式也只是在e10s关闭的时候才能工作。

        

所以现在Firefox能做什么?

         Firefox 54可以开始发送主动ICE TCP候选。为了防止任何其他人连入候选项,它们对于9号端口是不可见的,所以只有这些候选项并不是那么有用。

         但是,如果Firefox接收从另一端来的被动ICE TCP候选项,它会尝试通过TCP连接来连入它们。

         现在来举一个典型的例子。UDP被完全禁止,直到53版本号的Firefox浏览器都只能通过支持TCP的TURN传输来建立连接。从Firefox 54版开始,如果另一端是一个媒体服务器,会议网桥或者更普遍的情况是运行在公共路由地址上的服务器,它可以提供被动ICE TCP候选项给Firefox浏览器,因此就允许在Firefox和服务器之间建立直接的TCP连接,可以忽略TURN服务器处那额外的一次中继。

        

目前还无法做到的

         由于我们还不支持输入的TCP连接,所以还不能提高两个WebRTC浏览器之间的直接连接性。我们假设大多数浏览器在不能接受输入连接的环境(在NAT后面)中运行。即便是有被动ICE TCP,浏览器之间的连接性也不会得到提升。

填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营