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媒体信息

你可能感兴趣的:(1- WebRTC传输基本知识)