1- WebRTC传输基本知识

  • NAT:内网打穿到公网
  • STUN:公网信息交换,进行连接
  • TURN:云端服务器,防止STUN连接失败,A端通过TURN服务器转发给B端
  • ICE:找出所有的IP路径

NAT

NAT穿越可以分为四种类型:完全锥型、地址限制型、端口限制型、对称型

完全锥型

内网打穿后生成公网地址和端口,任意外网用户访问都可以访问,没有限制。

image.png

地址限制型

内网主机IP和端口、 NAT穿越后生成公网IP和端口、要请求的主机IP,其它主机的ip地址不是内网主机要请求的地址会失败


image.png

端口限制型

在地址限制型的基础上,增加了端口限制,如果请求的主机返回的端口也不对,请求也不成功


image.png

对称型

NAT穿越后会生成多个IP地址和端口号, 请求的主机对应一个ip地址和端口,内外穿到外网会生成不同的ip地址和端口号给不同的主机

image.png

NAT穿越的原理

  • 1.C1,C2向STUN发送消息(网络信息),stun获取对应的公网ip和端口
  • 2.stun交换公网IP及端口给C1,C2
    1. C1->C2,C2->C1,端口猜测


      image.png

NAT类型检查

前提要在服务端部署STUN服务器,并且有两个IP地址和端口


image.png
  1. 客户端发送请求给服务端,服务端发送多条相同的ip地址和端口给客户端,如果客户端不能接收到则网络不同。
  2. 客户端收到服务端信息,判断发送出去的公网的ip和本机的ip是否一致,一致则是公网,不一致到4
  3. 服务端再发送另一个IP和端口给客户端,如果客户端可以接收到就是在一个开放的网络中,客户端接收不到则是有防火墙的
  4. NAT检测:
    4.1 服务端发送不同的IP和端口给客户端,如果能接收到则是完全锥型,不行就是4.2
    4.2 客户端向服务端的第二个ip和端口发送数据,服务端返回一个ip和端口给客户端,如果与1的不一样则是对称型。如果一样4.3
    4.3 客户端向服务端第一个IP地址和端口发送请求,返回的是同一个地址不同的端口号,如果客户端不能接收到则是端口限制型,能接收到则是地址限制型

STUN协议

目的:NAT穿越,主机访问STUN服务器,返回一个公网ip地址
stun是典型的客户端/服务器响应模式,客户端发送请求,服务端响应。
规范:
RFC3489:通过UDP进行NAT穿越
RFC5389:通过UDP、TCP进行NAT穿越
由于UDP会有失败的情况,RFC5489引入TCP。

stun 5389格式

  • STUN Header
    • message type(类型):2个字节,共16位,前两位是00用以不同的协议复用同一个端口的时候区分哪个是STUN协议;还有2位C0、C1用于分类:请求、指示、成功应答、失败应答;剩余12为用于请求
    • 消息长度: 2个字节,不包含header本身
    • magic cookie:4字节,固定值0x2112A442。通过它可以判断客户端是否可以识别某些属性。有这个值就是5389,5389定义了一些新的属性。
    • 事务ID:12字节,96位,用于匹配请求与响应的事务ID相同的消息

0b00:表示是一个请求
0b01:表示一个指示
0b10:表示一个请求成功的响应
0b11:表示一个请求失败的响应
最右侧是c0,


image.png

大小端模式

  • 大端模式:数据的高字节保存在内存的低地址中,低字节保存在内存的高地址中
  • 小端模式:数据的高字节保存在内存的高地址中,低字节放在低地址中
  • 网络字节顺序:采用大端排序方式

网络中使用大端模式,左边的优先被接收到,右边的最后接收到。

  • body
    • 消息头后有0个或多个属性
    • 每个属性进行TLV编码:Type,Length,Value
image.png

其中USERNAME、PASSWORD最重要,用于STUN服务器验证用户合法性

属性的什么时候使用


image.png

N/A 不支持,O是可选的,M是服务端,C是客户端

TURN协议

  • TURN是在解决NAT无法穿越的问题。对称型和对称型对称型好端口限制型 无法互通。
  • 在无法通行的时候,将媒体流数据转给TURN服务器,进行中继处理,然后再转发给客户端
  • 建立在STUN上,消息格式使用STUN格式消息,主要body的属性不一样。(STUN和TURN建立在一起)
  • TURN Client要求服务端分配一个公共IP和Port用于接收或发送数据。

turn使用的传输协议
turn client - turn server :UDP、TCP、TLS over TCP
TURN server to peer: UDP
在STUN无法接通时,这时就需要公网的服务器作为一个中继,对来往的数据进行转发。这个转发的协议就被定义为TURN。TURN和其他中继协议的不同之处在于,它允许客户端使用同一个中继地址(relay address)与多个不同的peer进行通信。

使用TURN协议的客户端必须能够通过中继地址和对等端进行通讯,并且能够得知每个peer的的IP地址和端口(确切地说,应该是peer的服务器反射地址)。
TURN协议被设计为ICE协议的一部分,relay地址会作为一个候选,由ICE在多个候选中进行评估,选取最合适的通讯地址。一般来说中继relay的优先级都是最低的。
TURN协议本身是STUN的一个拓展,因此绝大部分TURN报文都是STUN类型的,作为STUN的一个拓展,TURN增加了新的方法(method)和属性(attribute)。

在典型的情况下,TURN客户端连接到内网中,并且通过一个或者多个NAT到达公网,TURN服务器架设在公网中,不同的客户端以TURN服务器为中继和其他peer进行通信,如下图所示:


image.png

在上图中,左边的TURN Client是位于NAT后面的一个客户端(内网地址是10.1.1.2:49721),连接公网的TURN服务器(默认端口3478)后,
服务器会得到一个Client的反射地址(Reflexive Transport Address, 即NAT分配的公网IP和端口)192.0.2.1:7000,
此时Client会通过TURN命令创建或管理ALLOCATION,allocation是服务器上的一个数据结构,包含了中继地址的信息。
服务器随后会给Client分配一个中继地址,即图中的192.0.2.15:50000,另外两个对等端若要通过TURN协议和Client进行通信,
可以直接往中继地址收发数据即可,TURN服务器会把发往指定中继地址的数据转发到对应的Client,这里是其反射地址。

Server上的每一个allocation都唯一对应一个client,并且只有一个中继地址,因此当数据包到达某个中继地址时,服务器总是知道应该将其转发到什么地方。
但值得一提的是,一个Client可能在同一时间在一个Server上会有多个allocation,这和上述规则是并不矛盾的。

ICE

ICE包括了NAT、STUN、TURN。
主要工作:
第一步:找出端与端的所有路径:网卡的路径,NAT穿越后的公网ip、中继服务、多网卡、vpn等
第二步:相互传给对方路径,找出能通的路径

基本概念

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

推荐阅读更多精彩内容