【Android音视频开发】【033】WEBRTC之P2P通信原理

全局IP和专用IP

全局IP是指在内部网络和外部网络中统一使用的IP,像我们平时访问互联网服务器时使用的就是全局IP

专用IP是指在内部网络中使用的IP,只有内部主机之间才能相互识别,像我们平时通过路由器组建的局域网就是专用IP

NAT网络地址转换

对于互联网来说,全局IP是有限的,不可能每个主机都独占一个全局IP

比如公司有1000台主机,这1000台主机连接同一个路由器,使用同一个宽带,对外的IP都是一样的,即使用全局IP

那么问题就来了,所有主机对外部网络的全局IP都一样,那么外部网络和内部主机进行通信时,如何找到具体的内部主机

这就是NAT要解决的问题,NAT全称Network Address Translator,网络地址转换器,是一套用于将专用IP转换为全局IP的协议

NAT服务一般都集成在路由器当中

NAT协议的实现可分为三套方案:静态NAT,动态NAT,端口复用NAT

静态NAT

每个内部网络IP,映射为一个固定的全局网络IP

这种方案不适用于公网,因为公网IP是有限的,不可能让所有联网主机都占用一个固定IP

一般适合大企业内部搭建的复杂网络,比如多个内部子网络,再组成一个庞大的企业网络

动态NAT

和静态NAT原理基本一样,只是分配的全局IP不是固定的

当内部主机连接NAT时,从地址池中分配一个空闲的地址给该主机

当内部主机与NAT断开连接时,NAT再将该地址回收到地址池

显然,这种方式也不适合于公网

端口复用NAT

又叫NAPT,PAT,这是最专业最常用的模式,也是公网使用的NAT模式

NAPT不再是将内部主机地址映射为全局IP,而是将内部主机地址映射为一个端口

这样所有内部主机地址对应的全局IP都是一样的,但是对应的端口不一样

NAT根据端口,将来自外部网络的数据,转发给对应主机的对应服务

内网服务端口映射

当我们内网有多台主机时,这些主机上有不同的服务,这些服务可能都使用了相同的端口,比如8080

当我们想把这些服务都对外部开放时,就需要通过配置NAT进行端口映射,将不同主机上的服务映射为不同的外网端口

所以我们通过内网访问服务,和通过外网服务,经常使用的是两个不同的端口

访问地址分别是,内网IP : 本地端口,外网IP : 映射端口

NAT备份

当NAT设备发生故障时,内部地址-全局地址的映射表就可能会丢失,导致之前的主机无法和外部网络进行通信

为防止这一现象,就需要对NAT设备中的映射表进行备份,这就叫NAT备份

NAT容灾

当NAT设备发生故障时,我们可能还希望网络机制拥有容错能力,所有工作能够继续正常运行

这时我们就需要准备多套NAT设备,在发生故障时能够切换到正常的设备继续进行工作

P2P通讯

上面我们提到了内网服务端口映射,这是一种NAT主动开放端口,供外部网络访问的情景

还有一种情景是P2P,即点对点通讯,这种业务是无法事先预知的,所以NAT不可能提前就为每台主机开好端口

当NAT没有开放端口时,外部网络是无法访问到内网主机的

此时就用到了一项新的技术,NAT穿透,又叫NAT打洞

NAT穿透

NAT穿透,又叫NAT打洞

顾名思义,就是NAT跳过默认的端口映射表,单独开一个渠道,供外网主机和内网主机间进行通讯

实际就是NAT设备临时添加了一条访问规则,允许特定IP特定端口的程序,通过该规则访问内网程序

访问规则的格式为,内网IP : 内网端口 - 外网IP : 外网端口

由于一个内网的主机,无法知道另外一个内网主机的IP和端口,所以还必须通过一个中转服务器来交换各自的

P2P通讯连接建立流程

两个需要通过进行通讯的内网客户端,分别将自己的外网地址注册给一个具有公网地址的中转服务器

中转服务器将两个客户端的外网地址分别告知给对方

两个客户端分别给对方发送一个UDP数据包,俗称打洞包

发送过打洞包后,两端的NAT服务,就可以分别为对方添加专用的访问规则

两端都添加了打洞规则之后,就可以通过NAT相互访问了

TURN服务器

TURN全称Traversal Using Relay NAT,即通过中转方式来实现NAT穿透的服务器

TURN服务器即上面提到的中转服务器的一种实现方案,它是一种比较完善的NAT穿透方案

STUN服务器

STUN全称Simple Traversal of UDP Through NAT,即简单地通过UDP方式来实现NAT穿透的服务器

STUN是一种比较简单的NAT穿透方案,即通过UDP方式来检测出本机的对外地址,然后直接与外部连接

但是如果NAT服务不允许内部主机直接与外部连接的话,这种方案是行不通的

在这里插入图片描述
ICE服务器

ICE全称Interactive Connectivity Establishment,交互式连接建立协议,它整合了STUN和TURN两种协议

ICE提供了一套既完善又高效的P2P连接协议,它的工作原理如下

首先尝试用设备的网卡地址直接建立连接

如果失败,改用STUN协议,通过NAT中映射的外网地址进行通信

如果依旧失败,则改用TURN协议,通过中转+NAT穿透的方式建立连接

ICE Candidate

两个客户端直接,可能存在多条通讯路径,一个ICE Candidate就代表一个候选的路径

ICE会根据性能对探测到的多个候选路径进行排序,优先选择最高效的候选路径

Coturn服务器

Coturn是一个集成了STUN和TURN协议的服务器,是ICE服务器的一种实现

Libjingle

Libjingle是Google的一个开源库,提供了点对点通信的功能,是ICE协议的一种实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值