很多人知道webrtc打洞能力很强,到底有多强但是不知道,比较好的方法就是跟QQ对比,但大多数公司很难模拟各种网络环境进行测试,比如联通,铁通,电信,移动,所以这次请小师妹在实验室下进行了一个比较全面的测试,并整理出测试结果供大家参考,支持原创,文章来自博客园RTC.Blacker(作者:竹叶青),转载必须说明出处,更多详见www.rtc.help。

介绍测试结果前我们先来看看webrtc的p2p架构:

原理介绍

1,Peer与STUN服务器交互采用的是STUN协议,STUN服务器返回Peer的公网地址,地址形式为[IP:port]。

2,L和R都获取到了自己的局域网地址和公网地址后通过信令服务发送给对方,然后彼此都有了对方的地址。

3,RFC5245定义这些地址为candidate,按照局域网 > 外网 > TURN地址的优先级顺序为candidates排序后进行打洞测试。

4,打洞过程就是双方不停地往彼此的端口发包,既能收到对方发的包,也能收到自己发出去的回包,说明打洞成功。否则失败,通过TURN转发。

测试说明:

测试之初,我以为NAT在路由器中,试图通过对路由器的设置,配置NAT的各种类型,这样就能全面地进行测试了。

然而结果是,路由器上的NAT设置指的是静态转换、动态转换、端口多路复用的实现方式,查遍各种资料和咨询相关人员也没找到到底在哪里可以设置网络的Full Cone NAT、Restricted Cone NAT、Port Restricted Cone NAT、Symmetric NAT四种类型?

最后得出结论:NAT功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中,或者由运营商决定吧,大概是我们触碰不到修改不了的吧!

若欲将所有NAT场景都测试完,同时又考虑到中国的多运营商情况(暂且只考虑铁通、移动、电信、联通),并且每种网络有Full con等四种类型,那么理论上的测试数量则为:组合数C(4*4,2)=120,再乘以8中场景(图2),最后为960种情况。然要齐全所有情况是相当困难的,实际实验室能提供的网络环境为:

1,PC4-5:Full cone 铁通

2,PC4-6:symmetric 联通

3,PC4-7:Port Restricted Cone 电信

4,L-014-wifi:Full cone  电信

这些网分别只经过一个路由器接入,处于不同的内网。

类型检测工具采用的是从网上下载的STUN_Client_app.exe,如下:

测试方法:

1,本地外网IP通过http://www.ip138.com/检测,采用抓包和相关日志分析方法来判断QQ视频和webrtc的打洞成败(即是否能建立P2P直连)情况。

2,webrtc:利用peerconnection_server和peerconnection_client测试,不过stun服务器地址修改成了stun.voipbuster.com。

3,QQ:直接打开两个QQ进行视频通信(P2P失败时会使用中转服务器进行转发)。

测试结果:

结果分析:

1,除了PC4-5,其余的结果与预期相符。

其中,PC4-5的铁通网络,明明测出来是Full cone类型,却偏偏出现了与之不符的结果,究其原因是该铁通网具有多出口IP,以下面的简化模拟图来说明。

上图说明:现有两客户端A和B,通过NAT后的外网地址分别为PublicIPA和PublicIPB

真正通信后,在A端抓包看到的对方地址为PublicIPB,则认为是直连,然而在B端抓包显示的对方地址却是一个陌生IP——PublicIPA2

看起来就像是A通过中转服务器似的,故而出现了一端直连一端中转的假象,之所以称之为假象,是因为在A端的抓包中并没有出现与PublicIPA2这个陌生IP进行通信的数据包。

由于B是电信网,故而在B建立连接时,A从多IP中选择了电信的出口IP(不是说铁通就一定会选择与对方相同的运营商出口,只是说此时正好如此)。这种多ip出口就容易导致本来能够P2P的两端直连却失败。

2,不清楚www.ip138.com获取的是不是真实运营商类型。webrtc的STUN服务器获得的客户端的NAT外网地址,我个人觉得是其所处的真实的运营商类型。因为STUN不在国内,故而不存在多运营商问题。

在PC4-5 Full cone铁通和PC4-6 Symmetric联通下ping服务器STUN的地址stun.voipbuster.com过程如下:

(某市)铁通——>(省会)铁通——>(省)铁通——>中国铁通——>欧洲联盟——>荷兰

(某市)联通——>(省会)联通——>北京联通——>加拿大——>欧洲联盟——>德国——>欧洲联盟——>荷兰

更多待补充!

Android IOS WebRTC 音视频开发总结(四一)-- QQ和webrtc打洞能力pk的更多相关文章

  1. Android IOS WebRTC 音视频开发总结(五四)-- WebRTC标准之父谈WebRTC

    本文主要是整理自国内首届WebRTC大会上对Daniel的一些专访,转载必须说明出处,欢迎关注微信公众号blacker,更多说明详见www.rtc.help 说明:以下内容主要整理自InfoQ的专访, ...

  2. Android IOS WebRTC 音视频开发总结(十)-- webrtc入门002

    继续上一篇中未翻译完成的部分,主要包括下面三个部分: 1,扩展:WebRTC多方通话. 2,MCU Multipoint Control Unit. 2, 扩展:VOIP,电话,消息通讯. 注意:翻译 ...

  3. Android IOS WebRTC 音视频开发总结(九)-- webrtc入门001

    下面这篇介绍webrtc的文章不错,我花了大半天翻译了一下. 翻译的时候不是逐字逐句的,而是按照自己的理解翻译的,同时为了便于理解,也加入一些自己组织的语言. 本文主要介绍webrtc的信令,stun ...

  4. Android WebRTC 音视频开发总结(五)-- webrtc开发原型

    这些天基于WebRTC做了个 手机视频监控 的程序,分享出来,供想了解这方面内容的朋友参考. 这个程序最早是广州一家智能穿戴设备公司请我们做的(他们不需要底层源码,也不需要ios版本),之后我们在这个 ...

  5. Android WebRTC 音视频开发总结(四)-- webrtc传输模块

    在介绍WebRTC通讯之前我们先来看一个P2P视频聊天包括的主要过程,转载请说明出处(博客园RTC.Blacker): 音视频数据采集->编码->发送->接收->解码-> ...

  6. Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈

    本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam ...

  7. Android IOS WebRTC 音视频开发总结(四四)-- webrtc图书

    本文主要介绍即将出版的webrtc图书相关信息,支持原创,转载必须说明出处,更多详见www.rtc.help --------------------------------------------- ...

  8. 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)

    随笔分类 - webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...

  9. WebRTC 音视频开发

    WebRTC 音视频开发 webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...

  10. Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

随机推荐

  1. RBStoryboardLink库的使用注意事项 -转载至--坤哥MartinLi博客

    RBStoryboardLink库的使用注意事项 demo下载:https://github.com/MartinLi841538513/RBStoryboardLinkDemo 操作步骤: 1,引入 ...

  2. [Java] 将标准字符流写入到文件中(通过控制台写一个html程序,并保存)

    package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...

  3. 用SPCOMM 在 Delphi中实现串口通讯 转

      用Delphi 实现串口通讯,常用的几种方法为:使用控件如MSCOMM和SPCOMM,使用API函数或者在Delphi 中调用其它串口通讯程序.利用API编写串口通信程序较为复杂,需要掌握大量通信 ...

  4. XEP-0079

    XEP-0045: 多用户聊天 摘要: 本文定义了一个XMPP协议扩展用于多用户文本会议.即多个XMPP可以在一个房间或频道互相交流信息, 类似互联网中继聊天系统(IRC).还有标准聊天室功能如聊天室 ...

  5. codeforces 2B The least round way 【DP】

    VJ上可找到中文题意. 思路: 首先分解有多少2与多少5.接下来就是dp. 分两次,一次是根据2的数量贪心,另外一次是根据5的数量贪心,看哪一次乘积的末尾0最少. 需要注意的是两点: 1.输入有0的情 ...

  6. poj 2406 Power Strings kmp算法

    点击打开链接 Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 27368   Accepted:  ...

  7. @SessionAttributes与HttpSession

    SessionAttributes注解将model中与它同名的属性保存在HttpSession中. 在controller的方法执行完毕后处理SessionAttributes注解并保存的,是Hand ...

  8. php array函数实例应用

    array_diff_key() array_diff_assoc() array_count_values() array_combine() array_column() array_chunk( ...

  9. cookie机制和session机制的原理和区别[转]

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...

  10. OC基础(5)

    #pragma mark指令 description方法 OC多文件开发介绍 *:first-child { margin-top: 0 !important; } body > *:last- ...