WebRTC中NAT穿透浅析

课程地址:零声学院 WebRTC入门与提高 https://ke.qq.com/course/435382?tuin=137bb271

技术支持QQ群:782508536

webrtc时序图.png

原文地址:https://www.cnblogs.com/xiaofengfengzhang/p/6590687.html

说NAT穿透之前先说几个关于WebRTC的概念,可能之前有跟作者一样对WebRTC概念理解错误的同学。。

WebRTC(网络实时通信)它是一个支持网页浏览器进行实时语音对话或视频对话的技术,它为我们提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android,iOS。

1、WebRTC的实现原理

webRTC是基于P2P的网络通信,可能有同学不太了解P2P是什么,在此简单解释一下 P2P就是点对点的通信。

下面就拿P2P与传统连接方式做个比较:

  1. 一般我们传统的连接方式,都是以服务器为中介的模式:

    • 类似http协议:客户端⇋服务端(当然这里服务端返回的箭头仅仅代表返回请求数据)。

    • 我们在进行即时通讯时,进行文字、图片、录音等传输的时候:客户端A⇨服务器⇨客户端B。

  2. 而点对点的连接恰恰数据通道一旦形成,中间是不经过服务端的,数据直接从一个客户端流向另一个客户端:客户端A⇋客户端B ... 客户端A⇋客户端C ...(可以无数个客户端之间互联。

采用P2P的优点:可以大大的减轻了服务器的压力,我们服务端确实是没必要去获取两者通信的数据。

说到这,大家认为WebRTC真的就不需要服务端了吗?这是其中的一个误解,严格意义上来说,webRTC仅仅是不需要服务器中转数据。起码有两件事是必须要用到服务器

  • (1)浏览器之间交换元数据(信令)必须通过服务器
  • (2)为了穿越NAT和防火墙

第1条很好理解,我们在A和B需要建立P2P连接的时候,至少要服务器来协调,来控制连接开始建立。而连接断开的时候,也需要服务器来告知另一端P2P连接已断开。这些我们用来控制连接的状态的数据称之为信令,而这个与服务端连接的通道,对于WebRTC而言就是信令通道

如上图所示,完整的P2P连接就是首先向服务器发送Signaling信令,然后底层调用WebRTC从服务器获取信令,从信令中获取对端用户的基本信息,然后再进行Media通信连接。

2. NAT相关概念及原理

NAT(Network Address Translation,网络地址转换)简单来说就是为了解决IPV4下的IP地址匮乏而出现的一种技术。

举例🌰,就是通常我们处在一个路由器之下,而路由器分配给我们的地址通常为191.168.0.21 、191.168.0.22如果有n个设备,可能分配到192.168.0.n,而这个IP地址显然只是一个内网的IP地址,这样一个路由器的公网地址对应了n个内网的地址,通过这种使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。

NAT技术会保护内网地址的安全性,所以这就会引发个问题,就是当我采用P2P之中连接方式的时候,NAT会阻止外网地址的访问,这时我们就得采用NAT穿透了。

于是我们就有了如下的思路:
我们借助一个公网IP服务器,a,b都往公网IP/PORT发包,公网服务器就可以获知a,b的IP/PORT,又由于a,b主动给公网IP服务器发包,所以公网服务器可以穿透NAT A,NAT B送包给a,b。
所以只要公网IP将b的IP/PORT发给a,a的IP/PORT发给b。这样下次a和b互相消息,就不会被NAT阻拦了。

WebRTC的NAT/防火墙穿越技术,就是基于上述的一个思路来实现的。在WebRTC中采用ICE框架来保证RTCPeerConnection能实现NAT穿越。

关于ICE协议框架,作者提供连接地址:https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API/Protocols,有兴趣的同学可以去了解一下。

不过作者在此特别说明一下SDP协议,它是会话描述协议Session Description Protocol (SDP) 是一个描述多媒体连接内容的协议,例如分辨率,格式,编码,加密算法等。所以在数据传输时两端都能够理解彼此的数据。本质上,这些描述内容的元数据并不是媒体流本身。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容