从0打造音视频直播系统
李超
前新东方音视频直播技术专家,前沪江音视频架构师
立即订阅
2827 人已学习
课程目录
已完结 40 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 5G的到来将会为音视频插上飞翔的翅膀
免费
WebRTC 1对1通话 (23讲)
01 | 原来通过浏览器访问摄像头这么容易
02 | 如何通过WebRTC进行音视频设备检测呢?
03 | 如何使用浏览器给自己拍照呢?
04 | 可以把采集到的音视频数据录制下来吗?
05 | 原来浏览器还能抓取桌面?
06 | WebRTC中的RTP及RTCP详解
07 | 你竟然不知道SDP?它可是WebRTC的驱动核心!
08 | 有话好商量,论媒体协商
09 | 让我们揭开WebRTC建立连接的神秘面纱
10 | WebRTC NAT穿越原理
11 | 如何通过Node.js实现一套最简单的信令系统?
12 | RTCPeerConnection:音视频实时通讯的核心
13 | 在WebRTC中如何控制传输速率呢?
14 | 如何打开/关闭音视频?
15 | WebRTC中的数据统计原来这么强大(上)
16 | WebRTC中的数据统计原来这么强大(下)
17 | 如何使用Canvas绘制统计图表(上)?
18 | 如何使用Canvas绘制统计图表(下)?
19 | WebRTC能不能进行文本聊天呢?
20 | 原来WebRTC还可以实时传输文件?
21 | 如何保证数据传输的安全(上)?
22 | 如何保证数据传输的安全(下)?
23 | 实战演练:通过WebRTC实现一个1对1音视频实时直播系统
WebRTC多人音视频实时通话 (7讲)
24 | 多人音视频实时通讯是怎样的架构?
25 | 那些常见的流媒体服务器,你该选择谁?
26 | 为什么编译Medooze Server这么难?
27 | 让我们一起探索Medooze的具体实现吧(上)
28 | 让我们一起探索Medooze的具体实现吧(下)
29 | 如何使用Medooze 实现多方视频会议?
30 | 实战演练:通过WebRTC实现多人音视频实时互动直播系统
支持上万人同时在线的直播系统 (8讲)
31 | 一对多直播系统RTMP/HLS,你该选哪个?
32 | HLS:实现一对多直播系统的必备协议
33 | FLV:适合录制的多媒体格式
34 | 如何使用Nginx搭建最简单的直播服务器?
35 | 如何构建云端一对多直播系统?
36 | 如何使用 flv.js 播放 FLV 多媒体文件呢?
37 | 如何使用 video.js 播放多媒体文件?
38 | 实战推演:带你实现一个支持万人同时在线的直播系统
结束语 (1讲)
结束语 | 路漫漫其修远兮,吾将上下而求索
从0打造音视频直播系统
登录|注册

10 | WebRTC NAT穿越原理

李超 2019-08-06
在 WebRTC 中, NAT 穿越是非常重要的一部分内容,也是比较有深度、比较难以理解的一部分知识。当然,等你学完本文,并完全理解了这部分知识后,你也会特别有成就感!
在我们真实的网络环境中,NAT 随处可见,而它的出现主要是出于两个目的。第一个是解决 IPv4 地址不够用的问题。在 IPv6 短期内无法替换 IPv4 的情况下,如何能解决 IP 地址不够的问题呢?人们想到的办法是,让多台主机共用一个公网 IP 地址,然后在内部使用内网 IP 进行通信,这种方式大大减缓了 IPv4 地址不够用的问题。第二个是解决安全问题,也就是主机隐藏在内网,外面有 NAT 挡着,这样的话黑客就很难获取到该主机在公网的 IP 地址和端口,从而达到防护的作用。
不过凡事有利也有弊,NAT 的引入确实带来了好处,但同时也带来了坏处。如果没有 NAT,那么每台主机都可以有一个自己的公网 IP 地址,这样每台主机之间都可以相互连接。可以想象一下,如果是那种情况的话,互联网是不是会更加繁荣?因为有了公网 IP 地址后,大大降低了端与端之间网络连接的复杂度,我们也不用再费这么大力气在这里讲 NAT 穿越的原理了。
如果从哲学的角度来讲,“世上的麻烦都是自己找的”,这句话还是蛮有道理的。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0打造音视频直播系统》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

  • 花果山の酸梅汤
    类型(A-B) 建立状况
    完全锥型-完全锥型 A通过server获得B的IP:port开始通信
    完全锥型-IP限制型 B通过server获得A的IP:port开始通信
    完全锥型-port限制型 B通过server获得A的IP:port开始通信
    完全锥型-对称型 B通过server获得A的IP:port开始通信
    IP限制型-IP限制型 A通过server获得B的IP:port,A向B发送UDP包,数据通过自己的NAT时会为B建立NAT映射条目;B通过server获得A的IP:port,发送UDP包为A建立NAT映射条目,二者之后就可以开始通信。
    IP限制型-port限制型 A通过server获得B的IP:port,A向B发送UDP包,数据通过自己的NAT时会为B建立NAT映射条目;B通过server获得A的IP:port,发送UDP包为A建立NAT映射条目,二者之后就可以开始通信。
    IP限制型-对称型 A通过server获得B的IP:port1,A向B发送UDP包,数据通过自己的NAT时会为B建立NAT映射条目;B通过server获得A的IP:port,发送UDP包为A建立NAT映射条目,A收到B的UDP包,获得B新的IP:port2;A向B的新地址IP:port2发送数据,可以开始通信。
    port限制型-对称型 A通过server获得B的IP:port1,A向B发送UDP包,数据通过自己的NAT时会为B建立NAT映射条目;B通过server获得A的IP:port,发送UDP包为A建立NAT映射条目,但由于B更换了新端口port2,A刚建立的映射无法使用,A故此无法收到B为A通信使用的新端口,无法建立NAT映射,两者无法互通。
    对称型-对称型 同上,对称型开启新端口对方无法获悉,无法建立链接。
    无法P2P就需要用TURN服务器转发数据了…

    作者回复: 非常赞!描述的非常清楚!

    2019-08-06
    2
    11
  • 李新
    请教一下,除了生日攻击,还有其他方法提高P2P的打洞成功率吗?

    作者回复: 在中国,P2P 成功率很低,尤其是移动互联网。

    2019-11-03
    1
  • SherwinFeng
    打洞失败自然就要用relay服务器啦
    2019-11-23
  • Happy~张🤔
    请问一下,stun服务器作为net打洞,那打洞成功后,后面传输还是会利用stun进行转发媒体信息进行通信吗?如果不是外网信息怎么转到内网的?

    作者回复: WebRTC内部首先会判断对方是否与自己在同一个网段,也就是说先判断通信双方是否在内网。如果是在内容就直接进行通信了。如果不在内网,会偿试 P2P 穿越,一旦穿越成功,双方就直接通信了,后面的传输不会用到 STUN服务器。

    2019-11-10
  • 李新
    请教一下,NAT类型的探测这么复杂,而且需要的时间也久,webrtc在P2P的时候是不是不需要探测NAT类型,而只是对着ICE Candidate相互发包就可以了?

    作者回复: 是进行 NAT 探测的,逻辑复杂,但执行速度很快!

    2019-11-03
    1
  • 张驰
    请问,如果对称NAT的B每次改变IP和端口,那么IP限制NAT主机A与对称NAT的B怎么建立连接呢?

    作者回复: A 先给 B发消息。此时,A 的NAT表里会增加这样一条记录<srcIP, srcPort, dstIP>,然后 B再给A发消息。B的消息过来之后,A的 NAT 发现来的这个主机的IP地址在地址表中,所以放行。

    2019-09-25
  • momo
    探测 NAT 环境的时候为什么要向服务器#2发请求, 不能向#1的另外一张网卡发请求吗?

    作者回复: 因为 #1 的第二块网卡后面还要用到,如果同一个网卡有两种用途就无法进行区分了。

    2019-08-28
  • 恋着歌
    看了 花果山の酸梅汤 同学的回答。打洞不成功是因为建立了两个连接,但是为什么不用发起者建立的连接来传回数据呢?

    作者回复: 这与你们公司用的网关/路由设备的实现有关

    2019-08-12
  • 刘丹
    是否IP限制型NAT、端口限制型NAT都有一个隐含条件:WebRtc客户端与防火墙之间只有1个NAT映射?

    作者回复: 对,只有一个映射的情况是最简单的,如果有多个出口IP的话的,情况会更复杂。

    2019-08-08
  • 老师,请教下如何编译resiprocate成ios静态库

    作者回复: 不太清楚,这个好像与 webrtc 没啥关系!

    2019-08-07
  • 彭刚
    老师,前端这方面实在有点差,前端方面代码就看你的过一遍可以吗。大概能看懂每一步是干嘛的,后端部分认真写

    作者回复: 这块一定要好好看,如果这块没有学好的话,后面很难深入学习 webrtc

    2019-08-06
    1
  • 许童童
    两端都是NAT时,因为都没有公网IP,所以只能通过中转服务器打洞,但打的打洞却被对称型 NAT限制,需要重新打洞,从而无法打洞成功。此时只能让数据也通过中转服务器传输。

    作者回复: 描述的还是不够清楚,在NAT 之后,它要发包是必须要有外网地址的,NAT就是将内网转成外网哈,你再好好理解理解!

    2019-08-06
  • Jason
    尝试回答思考题,不知道理解的对不对,还请老师指正:
    对称型NAT之间打洞失败:对称型NAT是内网主机通过STUN服务返回的外网IP:port,只是针对STUN服务的,而跟其他外网设备的链路是直接不能相通的。
    端口受限型NAT与对称型NAT之间打洞失败:端口受限型NAT是指内网主机通过STUN服务返回的外网IP:port,要求外网设备的IP和端口是不能变的,否则链路不通。但对称型NAT针对内网主机的不同端口而映射出来的外网地址,明显不能保证IP和端口不变。

    作者回复: 是可以这么理解的。在本文中我讲的一个重点是映射表,从映射表的角度去思考这各种类型的NAT理解起来会更清晰哈!

    2019-08-06
  • 刘丹
    可以介绍一下WebRtc双方都是端口限制型NAT或者都是IP限制型NAT的情况下,怎样打洞通信的呢?好像打出来的洞只允许中间服务器和WebRtc直接通信,不允许另外一个WebRtc使用?

    作者回复: 打洞就是指 P2P之间打洞呀!也就是两个 WebRTC客户端之间打洞。不能 A 与 B 打通了这后,再让C来与 A通讯,这是不行的。

    2019-08-06
    1
  • Beast-Of-Prey
    打卡
    2019-08-06
  • 刘丹
    请问李老师:为什么在NAT类型检测图里,要先判断是否完全对称型NAT,然后才判断是否IP限制NAT、端口限制NAT呢?这个次序能变吗?

    作者回复: 原理都讲清楚了,你可以自己回答这个问哈!告诉我你思考后的答案。

    2019-08-06
  • XE.COM
    老师,想问一下,如果想在服务器保留音视频通话记录是不是P2P的连接方式就不能用了?

    作者回复: 是的

    2019-08-06
收起评论
17
返回
顶部