作者:Nils Ohlmeier(原文链接)
翻译:刘通
随着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,浏览器之间的连接性也不会得到提升。