WebRTC stun服务介绍
在WebRTC中,媒体能力最终通过 SDP 呈现。在传输媒体数据之前,首先要进行媒体能力协商,看双方都支持那些编码方式,支持哪些分辨率等。协商的方法是通过信令服务器交换媒体能力信息。

讯享网
需要建立双方通信的链路的时候,就需要借助stun和turn服务了,那就需要通过媒体中继服务器进行媒体数据的转发,下面我们就来看一下如何搭建媒体中继服务器吧。
一、STUN/TURN服务
在公网搭建一套 STUN/TURN 服务并不难。首先要有一台云主机,云主机的获我就不做介绍了,大家去某个云厂商购买就好了。文章中我们重点介绍下可以打通的,介绍下stun服务的工作原理,stun服务主要是用来判断当前NAT网络类型,我们本文重点介绍NAT的结构判断。
1. NAT(Network Address Translator)
网络上的主机要有一个公网的地址才能进行通讯,现实中我们大部分主机都是在网关之后的,实际是有一个映射,在网关上有一个NAT功能,将内网的地址映射成外网的地址。
1.1 NAT原理

其实就是一个地址的映射,上图左半部分是几台内网机器,有自己的内网IP,他们之间可以通讯,但与互联网外网没法通讯 ,因此需要NAT进行转换。如11.0.25.23转换成122.35.10.11,每台内网主机实际要映射成不同的端口,IP不变。
1.2 NAT产生的原因
NAT缓解了IPV4地址不够用的问题,同时也带了限制,那就是NAT外部的主机无法主动跟位于NAT内部的主机通信,NAT内部主机想要通信,必须主动和公网的一个IP通信,路由器负责建立一个映射关系,从而实现数据的转发, 这就是NAT的工作原理。
1.3 NAT种类以及穿越原理

假定公网server1 ip是1.1.1.1, 监听端口是1111;公网server2 ip是2.2.2.2, 监听端口是2222;
NAT router ip是8.8.8.8;NAT内部client是192.168.0.3。
client发送数据的时候,不管是tcp还是udp必须本地绑定一个端口,一般来讲,这个过程都是自动的。假定client(192.168.0.3, 100)给 server(1.1.1.1, 1111)发送报文,报文到达路由器,路由器在自己的公网ip上开辟一个端口800,从而建立了一个映射射关系(8.8.8.8, 800)<—>(192.168.0.3, 100), 建立映射关系后,所以(192.168.0.3, 100)和(1.1.1.1, 1111)之间的报文都通过这个映射关系进行转发。
NAT之间主要的区别分两种情况讨论:
- client(192.168.0.3, 100)和server(1.1.1.1, 1111)在路由器上建立好映射关系后,如果client(192.168.0.3, 100)又给(2.2.2.2, 2222)发送数据,路由器该怎么处理呢?
a.复用旧的映射关系(8.8.8.8, 800)<—>(192.168.0.3, 100)和(2.2.2.2, 2222)通信, 这就是锥型(Cone) NAT;
b.创建新的映射关系(8.8.8.8, 801)<—>(192.168.0.3, 100)和(2.2.2.2, 2222)通信, 这就是对称型NAT
注: (8.8.8.8, 801)只是举例,到底用什么端口取决于路由器的端口管理策略,总之是另外的一个端口,有的路由器有多个公网IP,不同的IP也会参与到这个映射关系中。 - client(192.168.0.3, 100)和server(1.1.1.1, 1111)在路由器上建立好映射关系后,如果这个时候路由器(8.8.8.8)在800端口上收到从另外一台server(2.2.2.2, 2222)发来的数据,是不是应该转发给(192.168.0.3, 100)呢?有四种情况:
a. 无条件转发给(192.168.0.3, 100), 这就是完全锥型(Full Cone)NAT;
b. 如果(192.168.0.3, 100)之前给(2.2.2.2)发送过数据则转发,这就是受限锥型(Restricted Cone);
c. 如果(192.168.0.3, 100)之前给(2.2.2.2, 2222)发送过数据,则转发这就是端口受限锥型(Port Restricted Cone);
d. 丢弃报文,拒绝转发, 这就是对称型NAT。
从上面也描述也可以看出,安全性系数, 对称型 > 端口受限锥型 > 受限锥型 > 全锥型
1.3.1 完全锥型NAT(Full Cone NAT)
完全锥型NAT(Full Cone NAT),私网机器的网络进程(iAddr:iPort)被NAT路由器 映射为公网地址(pAddr:pPort),后续该网络进程的所有数据报文都被转换为公网地址 (pAddr:pPort),公网任何一台机器发送报文到(pAddr:pPort),会被转发到私网机器的网 络进程(iAddr:iPort)。

1.3.2 地址限制性锥型NAT(Address Restricted Cone NAT)
限制锥型 NAT(Restricted Cone NAT),又名 IP 限制锥型 NAT。限制锥型 NAT,只允许映射关系的对应公网 IP 地址机器传输数据到私网机器。其他的公网IP地址机器发送数据给NAT路由器的公网IP地址与端口时,则会被 NAT 路由器丢弃。


私网机器网络进程(192.168.1.3:2341)发送报文到公网地址(180.93.45.46:8080)的服务器,在 NAT 路由器上产生了映射公网地址(112.93.114.33:34523)。有以下两种情形分开 讨论:
情形一:私网机器网络进程没有发送报文给其他公网机器,NAT 路由器只允许公网 IP 地址为 180.93.45.46 的机器数据进入,其他地址机器的数据报文则会被 NAT 路由器阻挡, 不允许进入内网。
情形二:私网机器网络进程同时发送报文给另一台公网机器,此时 NAT 路由器生成了 NAT 映射记录,则另一台公网机器发送报文与公网地址(112.93.114.33:34523),NAT 路由 器是允许报文进入私网。
先由私网机器发送报文到公网机器,限制锥形 NAT 路由器方能允许公网机器报文进入 私网。
1.3.3 端口限制锥形NAT(Port Restricted Cone NAT)
端口限制锥形 NAT(Port Restricted Cone NAT),在 IP 限制锥型 NAT 的基础上,又添 加了一层端口限制。限制了发送报文进入私网的 IP 地址与端口。如图所示,私网机器 (192.168.1.3:2341)发送报文数据到公网机器(180.93.45.46:8080)的过程中,在 NAT 路 由器上产生了(112.93.114.33:34523)记录。有以下两种情形讨论。
情形一:私网机器网络进程没有发送报文给公网机器(180.93.45.46)其他端口,则 NAT 路由器只允许公网地址(180.93.45.46:8080)的数据报文进入私网。
情形二:私网机器网络进程发送数据给公网机器(180.93.45.46)的其他端口,则NAT 路由器生成一条 NAT 记录,则允许该端口的数据报文到达网络进程。

1.3.4 对称型NAT(Symmetric NAT)
对称NAT(Symmetric NAT),NAT路由器会为私网机器的每一个网络进程都会分配一个 地址与端口,从而把私网网络进程(iAddr1:iPort1)与公网地址(pAddr1:pPort1)。后续 NAT 路由器会把私网机器地址端口(iAddr1:iPort1)与公网地址端口(pAddr1:pPort1)完 全相同的报文看作一个连接。
讯享网

私网机器的网络进程每与一台公网机器通信,NAT 路由器都会重新分配一个地址端 口。这样使得每一个通信链路都是经过 NAT 路由器不同的端口。公网机器往私网发送报文 也是经过不一样的端口。
1.4 NAT的鉴别方案
1.4.1 对称NAT与锥型NAT
对称 NAT 与锥型 NAT 的区别,在于私网机器与不同的公网机器通信在 NAT 路由器上产 生映射表记录的条数。对称 NAT 与 N 台公网机器通信则生成 N 条记录;而锥形 NAT 与 N 台 公网机器通信则生成 1 条记录。

判断流程如下:
步骤 1:私网机器(192.168.1.3:2341)发送报文到服务器 1(180.93.45.46:8888)的 NAT 路由器产生了对外公网 IP(112.93.114.33:23454),此时服务器 1 获取客户端IP地址即为对外公网 IP(112.93.114.33:23454);
步骤 2:私网机器(192.168.1.3:2341)发送报文到服务器 2(118.56.189.34:8888)。服务 器 2 获取客户端 IP 地址(iAddr:iPort);
步骤 3:服务器 1 将获取客户端的 IP 地址,发送给服务器 2。服务器 2 对比服务器 1 发过来的 地址与服务器 2 获取的客户端 IP 地址。若两个客户端 IP 地址一致,则为锥型 NAT;若不一 致则为对称 NAT。
1.4.2 完全锥形NAT与限制锥形 NAT
完全锥型 NAT 与限制锥形 NAT 的区别,在于其他公网机器发送报文到 NAT 路由器对外 公网 IP 地址能否到达私网机器,NAT 路由器的 NAT 类型是完全锥型 NAT 的话,私网机器能 够收到报文数据,限制锥形 NAT 则不能收到报文数据。

判断流程如下:
步骤 1:私网机器网络进程(192.168.1.3:2341)发送报文给服务器 1(180.93.45.46:8888)。 服务器 1 获取到客户端 IP 地址(即 NAT 路由器对外公网 IP 地址)。
步骤 2:服务器 1 将获取的客户端 IP 地址发送给服务器 2。
步骤 3:服务器 2 收到客户端 IP 地址以后,发送报文给客户端 IP 地址。探测客户端 IP 地 址能否收到报文数据。若是完全锥型 NAT,则私网机器能够收到报文;若是限制锥形 NAT, 则私网不能收到报文数据。
步骤 4:私网机器网络进程收到报文数据,继续发送报文给服务器 1。服务器 1 收到了报文 数据。判断结束。服务器 1 收到报文数据,则为完全锥型 NAT;否则为限制锥型 NAT。
1.4.3 IP限制锥形NAT与端口限制锥形NAT
IP 限制锥型 NAT 与端口限制锥型 NAT 的区别,在于公网机器的其他端口发送报文数据给私网机器网络进程能否收到。网络进程能收到同一台公网机器的其他端口发送的报文数据 则为 IP 限制锥型 NAT,否则为端口限制锥型 NAT。

判断流程如下:
步骤 1: 私网机器网络进程(192.168.1.3:2341)发送报文给服务器(180.93.45.46:8888)。 服务器获取到客户端 IP 地址。
步骤 2:服务器从另一个端口(180.93.45.46:8889),发送报文数据给客户端 IP 地址。若私 网机器能够收到报文则为 IP 限制锥型 NAT,若不能则为端口限制锥型 NAT。
步骤 3:私网机器网络进程回发报文给服务器 8888 的端口,收到报文数据,判断结束。若收到数据则为 IP 限制锥形 NAT,否则为端口限制锥形 NAT。
注意:所谓的STUN协议,就是允许私网应用程序发现它们与公共互联网之间存在的 NAT 和防火墙及其他类型。它也可以让应用程序确定 NAT 分配给它们 的公网 IP 地址与端口,STUN 是一种 Client/Server 的协议,也是一种 Request/Response 的协议,默认端口 3478。 本质上就是在做NAT类型的鉴定,鉴定方案如上所述。
1.5 NAT穿越的原理
网络穿透,即 NAT 穿透,能够让公网机器找到私网机器,并提高下载速度。如图 所示,穿透图中两个网关路由器,从而报文数据能够直接到达私网机器。穿透的本质是给一个NAT路由器的公网 IP 地址与端口发送报文数据,对应私网机器能够收到报文数据。比如 图中 NAT1,私网机器(192.168.1.3:2341)发送报文到公网服务器(180.93.45.46:8888)的过程中,在 NAT路由器上产生了一条公网映射记录(112.93.14.56:43891)。后续其他外网机器(192.168.2.6:6583)发送报文数据给公网映射记录(112.93.14.56:43891),使得 私网机器(192.168.1.3:2341)能够收到该报文数据。

1.5.1 穿透完全锥形NAT
穿透过程中,两端私网机器都是在NAT路由器之下的。两端NAT只要有一方为完全锥型 NAT 的时候,是可以穿透的。穿透逻辑如图所示。比如 NAT1为完全锥形NAT,NAT2为任意NAT。

步骤 1:私网机器 1(192.168.1.3:2341)发送报文给服务器(180.93.45.46:8888)。服务器获取到私网机器 1 的公网 IP 地址与端口(112.93.14.56:43891)。
步骤 2:服务器收到信息后,通知私网机器 2(192.168.2.6:6583),通知信息内含私网机器 1 的公网 IP 地址与端口(112.93.14.56:43891)。
步骤 3:私网机器 2(192.168.2.6:6583)发送数据给私网机器 1 的公网 IP 地址与端口 (112.93.14.56:43891),此时私网机器 1 就能收到私网机器 2 发送的报文数据,并且能过 获取私网机器 2 的公网 IP 地址与端口(iAddr:iPort)。
步骤 4:私网机器 1 回发报文信息给私网机器 2 的公网 IP 地址与端口(iAddr:iPort),此 时私网机器 2 能够收到报文数据。穿透流程结束。
1.5.2 穿透限制锥形 NAT
限制锥型 NAT 的特点是限制了其他公网机器报文数据传输。如果在采用完全锥型 NAT 的 穿透步骤,就会在步骤 3 不能到达私网机器。针对于两端 NAT 都是限制锥形 NAT 的情况,穿透流程如图所示。

步骤 1:私网机器 1(192.168.1.3:2341)发送报文给服务器(180.93.45.46:8888),服务器获取私网机器的公网 IP 地址(112.93.14.56:43891)。
步骤 2:服务器发送通知报文给私网机器 2(192.168.2.6:6583),通知报文中内含私网机器 1 的公网 IP 地址(112.93.14.56:43891)。
步骤 3:私网机器 2 发送报文数据到私网机器 1 的公网 IP 地址(112.93.14.56:43891)。由于NAT1 是限制锥型 NAT,此时私网机器 1 是不能收到报文数据的。
步骤 4:私网机器 2 进行完步骤 3 以后,立即发送报文给服务器(180.93.45.46:8888),要求私网机器 1 发送数据给私网机器 2 的公网 IP 地址。
步骤 5:服务器通知私网机器 1,通知信息内含公网 IP 地址(180.20.198.42.9681)。
步骤 6:私网机器 1 发送报文数据给私网机器 2 的公网 IP 地址。由于步骤 3 发送报文给私网机器2的公网IP地址,此份报文会被NAT2的路由器认为是步骤3的回复。所以此步骤会被允许通过。此时已经穿透了 NAT2。
步骤 7:私网机器 2 回发报文给私网机器 1,此时穿透了 NAT1。穿透流程结束。
1.5.3 穿透对称 NAT
对称 NAT 的特点是每一个不同公网机器的通信,都会被分配不同的映射端口通信。若 参照限制锥型 NAT 的穿透流程,则在不能准确地知道步骤 3 所产生的公网 IP 地址与端口。 穿透流程如图 5-20 所示。NAT1 为限制锥型 NAT,NAT2 为对称 NAT。

步骤 1:私网机器 1(192.168.1.3:2341)发送报文数据给服务器(180.93.45.46:8888), 请求与私网机器 2 进行透传。
步骤 2:服务器(180.93.45.46:8888)发送通知信息给私网机器 2。通知信息内含私网机器 1 的公网 IP 地址(112.93.14.56:43891)。
步骤 3:私网机器 2 收到通知信息,发送报文数据给私网机器 1 的公网 IP 地址。此时由于 NAT1 为限制锥形 NAT,数据是不被允许进入私网的。同时由于 NAT2 为对称 NAT,所以会在 此次报文发送过程中,会被产生新的映射记录,分配公网地址与端口(iAddr:iPort)。
步骤 4:私网机器 2 进行完步骤 3 以后,发送报文信息给服务器的另一个端口 8889,此步骤也会在路由器上产生一条新的映射记录,分配公网地址与端口(mAddr:mPort)。服务器同时也获取到新的公网地址与端口(mAddr:mPort)。
步骤 5:服务器(180.93.45.46:8889)发送通知信息给私网机器 1。通知信息内含步骤 4 产 生的新记录公网地址与端口(mAddr:mPort)。此时根据 iPort 与 mPort 产生的相隔时间很 短,可以来判断 iPort 的值,即需要穿透的端口。为了判断的根据准确,可以在产生 mPort 之前也加上一次新记录,即再步骤3以前让NAT路由器产生一条记录,这样准确度会大大穿 透的概率。
步骤 6:根据 mPort 的值,来猜测 iPort 的值,发送报文信息给私网机器 2 的公网地址与端 口(mAddr:mPort)。准确的 mPort 值,则能够穿透 NAT2。
步骤 7:收到穿透报文信息后,回复报文信息。流程完毕。
1.5.4 NAT穿透组合

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/31700.html