一、webrtc-sfu - 推流篇 - 概览

  • 学习和总结下webrtc推流的过程,仅仅是数据协议层的流程,不包括信令协议(这个也没有统一的规范)。
  • 服务器使用的是janus-gateway

推流篇

一、抓包看总流程

一、webrtc-sfu - 推流篇 - 概览_第1张图片

大概流程如下

  1. 通过STUN协议获取对方的公网IP和端口
  2. 通过DTLS协议进行握手,设置加密信息等
  3. 通过RTP和RTCP协议进行数据的传输和数据状态的上报和获取。

二、简单了解协议

2.1 STUN协议

  1. 协议标准 - RFC5389
  2. 参考文档-1
  3. NAT类型

2.1.1 为什么需要STUN协议?

2.1.1.1首先需要了解下STUN协议能做什么?

&:在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转。由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NAT Traversal)。最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议。
&:STUN(Simple Traversal of User Datagram Protocol Through Network Address Translators),即简单的用UDP穿透NAT,是个轻量级的协议,是基于UDP的完整的穿透NAT的解决方案。它允许应用程序发现它们与公共互联网之间存在的NAT和防火墙及其他类型。它也可以让应用程序确定NAT分配给它们的公网IP地址和端口号。STUN是一种Client/Server的协议,也是一种Request/Response的协议,默认端口号是3478。(IETF官方文档RFC3489/STUN点此进入)

2.1.1.2 所以STUN协议的存在主要为了做两件事

  1. 检测NAT类型。
  2. 获取NAT分配的公网IP和端口。

2.1.1.3 都有哪些NAT类型?有什么区别?

完全圆锥型NAT (Full Cane NAT)

完全圆锥型的NAT,将从同一内部IP地址和端口来的所有请求,都映射到相同的外部IP地址和端口。而且,任何外部主机通过向映射的外部地址发送报文,可以实现和内部主机进行通信。

这是一种比较宽松的策略,只要建立了内部网络的IP地址和端口与公网IP地址和端口的映射关系,则所有Internet上的主机都可以访问该NAT之后的主机!!!
一、webrtc-sfu - 推流篇 - 概览_第2张图片
在图中,NAT会将内网地址{X:y} (x代表内网主机的IP地址,Y代表端口)映射成公网地址{A:b}(A代表映射的公网IP地址,b代表映射的端口)并绑定。任何数据分组都可以通过地址{A:b}送到此内网主机。

受限圆锥型NAT ( Restricted Cone NAT)–IP受限

受限圆锥型NAT也是将从相同的内部IP地址和端口来的所有请求,映射到相同的公网IP地址和端口。

但是与完全圆锥型NAT不同,当且仅当内网主机之前己经向公网主机(假设IP地址为P)发送过数据分组,此公网主机才能够向内网主机发送数据分组。
一、webrtc-sfu - 推流篇 - 概览_第3张图片
在图中,NAT会将内网地址{x:y}映射成公网地址{A:b〕并绑定,只有源地址为P的分组才能和此内网主机通信。

端口受限圆锥型NAT ( Port Restricted Cone NAT) - IP+Port受限

类似于受限圆锥型NAT,但更严格。端口受限圆锥型NAT增加了端口号的限制,当且仅当内网主机之前已经向公网主机发送了数据分组,公网主机才能和此内网主机通信。
一、webrtc-sfu - 推流篇 - 概览_第4张图片
在图中,NAT会将内网地址{X:y}映射成公网地址{A:b}并绑定,由于内网主机之前己经分别与地址为M,端口为n的公网主机以及地址为P,端口为q的公网主机通信,所以只有来自这两个公网地址和端口的分组才能到达内网主机。

对称型NAT CSymmetric NAT)

对称型NAT把从同一内网地址和端口到相同的地址和端口的所有请求,都映射到同一个公网地址和端口。
如果同一个内网主机,用相同的内网地址和端口向另一个地址发送数据分组,则会使用不同的映射,而且公网主机只有在接收到数据分组后,才能向与发送分组的内网主机进行通信。可见,对称性NAT是所有NAT类型中限制最为严格的。
一、webrtc-sfu - 推流篇 - 概览_第5张图片
在图中,对称型NAT会将内网地址{X:y}转换成公网地址{A:b}并绑定为{X:y}|{A:b}<一>{P:q}。这就意味着NAT只允许地址{A:b}接收来自{P:q}的分组,将它转给{X:y} 。当客户机请求一个不同的公网地址{M:n}时,NAT会新分配一个外部端口{C:d} 。

2.1.1.3 STUN如何获取网络类型?

你可能感兴趣的:(RTC,webrtc,服务器,网络)