关于webrtc peer to server 为什么还需要使用stun服务

本文作者:IMWeb jaychen 原文出处:IMWeb社区 未经同意,禁止转载

关于webrtc peer to server 为什么还需要使用stun服务

理论上是可以抛弃stun server,但实际操作上面会有很多限制。 webrtc peer连接过程: 1) 各个peer首先向各自的stun server请求,获取各自的对外IP。(非必须) 2) 各个peer收集自己的ice candidate,这里包括了本机的local地址,及打洞后获取的对外IP,双方交换ice candidate。 3) 各个peer收到对应的ice candidate后,排序后向各个candidate发起stun请求,用stun协议进行连通性测试,通过后择优。

限制:

1,在broswer调用createPeerConnection时,webrtc对ice框架会自动启动,开始收集候选地址。此时若没指明ice的stun server时,则默认选择stun.l.google.com作为stun server。此时国内由于Google被墙,收集到的candidate只是内网的ip。

2,在1不部署自己stun server,无法获取到client的public ip传给server。但client是知道server的public ip的,这个时候可以通过通过发包给server,server可以知道client的public ip。但是在webrtc中,音视频,以及datachanel的candidate信息不单单包括ip 端口外,除了端口号不一致外,还有一些用于连通性检查的“ice-ufrag" and "ice-pwd”属性。webrtc底层在连接建立时,ice协议在检查连通性时会进行校验。

//发送给服务端的本地ICE候选路径
let candidate0={
    candidate: "a=candidate:2638051854 1 udp 2122260223 10.70.108.177 60787 typ host generation 0 ufrag dpdk network-id 1 network-cost 10",
    sdpMLineIndex: 0,
    sdpMid: 'audio'
};

let candidate1={
    candidate: "a=candidate:2638051854 1 udp 2122260223 10.70.108.177 60788 typ host generation 0 ufrag dpdk network-id 1 network-cost 10",
    sdpMLineIndex: 1,
    sdpMid: 'video'
};

let candidate2={
    candidate: "a=candidate:477461690 1 udp 1686052607 14.17.22.45 64522 typ srflx raddr 10.70.108.177 rport 60787 generation 0 ufrag dpdk network-id 1 network-cost 10",
    sdpMLineIndex: 0,
    sdpMid: 'audio'
};

3, stun服务的部署难度不大,且只是用于简单的收发包,逻辑不重。由于浏览器底层的ice协议是webrtc底层的连接方案,此处并没有暴露给开发者,要取出只能通过hack方式。因此去除stun的成本可能比单纯部署stun服务还高,且还有可能会有兼容性问题,对建立连接的成功率没帮助。

具体可参考-互联网工程任务组(IETF)备忘录5245 https://tools.ietf.org/html/rfc5245

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux、Python学习

你不知道Linux的10个最危险的命令

Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。

1080
来自专栏乐沙弥的世界

从0到1学习Oracle--备份与恢复-程国华-专题视频课程

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。 https://blog.csdn.net/robinson_0612/article/d...

1402
来自专栏腾讯云数据库(TencentDB)

CynosDB的计算层设计优化揭秘——兼容PostgreSQL版

CynosDB 是腾讯数据库研发团队推出的自研数据库,有PostgreSQL和MySQL两个版本。本文以兼容PostgreSQL版CynosDB为例,介绍我们的...

15.3K4
来自专栏容器云生态

piranha-基于web界面的HA配置管理平台

piranha构建高可用平台 使用piranha红帽配置lvs集群:(虚拟伺机服务器) 内网私有ip(心跳线,用来加强ha集群的健壮度) pulse和piran...

2906
来自专栏蓝天

自己动手提高ubuntu系统的性能(EXT3)

  在内核设置层面之上,还有很多个人用户配置的参数,ulimit命令就是bash下提供的,查看对指定应用的限制值的工具。你可以通过ulimit –a命令显示当前...

922
来自专栏Grace development

运行/调试你的PHP代码

没有任何一名程序员可以一气呵成、完美无缺的在不用调试的情况下完成一个功能或模块。调试实际分很多种情况。本篇文章我分享下自己在实际开发工作中的经验,我个人理解,调...

2782
来自专栏北京马哥教育

Linux的10个最危险的命令

豌豆贴心提醒,本文阅读时间10分钟 Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。 这篇文章将会向你...

4937
来自专栏python3

thinkphp3关闭日志

882
来自专栏吴伟祥

详解301永久重定向实现方法 转

我重点讲讲这个网址规范化,因为这是大家很容易忽略的问题。例如我的域名,如果不做任何设置,它默认会产生四个网址:

3274
来自专栏SDNLAB

RYU多控制器通信

2506

扫码关注云+社区

领取腾讯云代金券