从 0 打造音视频直播系统
李超
前新东方音视频直播技术专家,前沪江音视频架构师
32579 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
WebRTC 1对1通话 (23讲)
从 0 打造音视频直播系统
15
15
1.0x
00:00/00:00
登录|注册

10 | WebRTC NAT穿越原理

限制条件
限制条件
限制条件
UDP协议
打洞原理
探测NAT环境
判断是否有NAT防护
对称型NAT
端口限制锥型NAT
IP限制锥型NAT
完全锥型NAT
思考时间
NAT类型检测
NAT的种类
NAT穿越
WebRTC
WebRTC NAT穿越的原理

该思维导图由 AI 生成,仅供参考

在 WebRTC 中, NAT 穿越是非常重要的一部分内容,也是比较有深度、比较难以理解的一部分知识。当然,等你学完本文,并完全理解了这部分知识后,你也会特别有成就感!
在我们真实的网络环境中,NAT 随处可见,而它的出现主要是出于两个目的。第一个是解决 IPv4 地址不够用的问题。在 IPv6 短期内无法替换 IPv4 的情况下,如何能解决 IP 地址不够的问题呢?人们想到的办法是,让多台主机共用一个公网 IP 地址,然后在内部使用内网 IP 进行通信,这种方式大大减缓了 IPv4 地址不够用的问题。第二个是解决安全问题,也就是主机隐藏在内网,外面有 NAT 挡着,这样的话黑客就很难获取到该主机在公网的 IP 地址和端口,从而达到防护的作用。
不过凡事有利也有弊,NAT 的引入确实带来了好处,但同时也带来了坏处。如果没有 NAT,那么每台主机都可以有一个自己的公网 IP 地址,这样每台主机之间都可以相互连接。可以想象一下,如果是那种情况的话,互联网是不是会更加繁荣?因为有了公网 IP 地址后,大大降低了端与端之间网络连接的复杂度,我们也不用再费这么大力气在这里讲 NAT 穿越的原理了。
如果从哲学的角度来讲,“世上的麻烦都是自己找的”,这句话还是蛮有道理的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

WebRTC中的NAT穿越技术是一项复杂而重要的技术,本文介绍了NAT的四种类型及其特点和工作原理。文章详细解释了NAT类型检测的流程,帮助读者深入了解NAT穿越的原理和相关技术特点。通过对NAT类型的判断,可以更容易地实现NAT穿越,进而实现音视频数据的传输。文章还提出了对称型NAT与其他类型NAT之间无法打洞成功的问题,并鼓励读者分享他们的想法和思考过程。这篇文章对于理解WebRTC中的网络传输和安全机制具有重要意义,对读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 打造音视频直播系统》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • 花果山の酸梅汤
    类型(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
    5
    37
  • 李新
    请教一下,除了生日攻击,还有其他方法提高P2P的打洞成功率吗?

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

    2019-11-03
    5
  • 杨凯
    老师您好,请问下:客户端C与服务端S进行socket通讯,TCP握手连接成功后,通过抓包分析端口是25568,然而,S端收到的第一个数据包的端口变成25567,导致C端报错connection reset,能说下什么原因吗?

    作者回复: socket的端口实现上代表的是一个应用(一个应用程序)。本来是 25568 这个应用在提供服务,给果有一个包来了说让 25567 对应的应用来提供服务,当你的操作系统收到这个包时,就将数据传给 25567这个应用。但实际上你的系统上就没有 25567 这个应用,那系统怎么办呢?它的作法很简单,就是返回一个reset,告诉发送端这个连接是不存在的,请重新进行三次握手。

    2020-05-14
    2
  • Happy~张🤔
    请问一下,stun服务器作为net打洞,那打洞成功后,后面传输还是会利用stun进行转发媒体信息进行通信吗?如果不是外网信息怎么转到内网的?

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

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

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

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

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

    2019-08-06
    1
  • piboye
    对称型可以通过生日悖论来突破吧,只是要尝试的次数太多,时间延迟较大

    作者回复: 是的

    2020-12-23
  • 斜月浮云
    请问,如果对称NAT的B每次改变IP和端口,那么IP限制NAT主机A与对称NAT的B怎么建立连接呢?

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

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

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

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

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

    2019-08-12
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部