1990年,互联网上的设备出现了爆炸式增长。但IPV4是一个32位的数字,因此世界上只有42.9亿个唯一的IPV4地址。

我们不能给每个设备提供自己的IP地址,需要对此采取措施。

互联网提出了一个叫做NAT的临时解决方案,就像生活中的大多数事情一样,它成为了一个永久的解决方案,我们到处都有NAT。

NAT(Network Address Translation)

NAT或网络地址转换,是一种在设备没有公共IP地址时通过映射IP地址空间以允许流量到达其目的地的方法。

位于网络边缘的NAT设备,该设备将被映射到公共IP地址,并具有本地IP地址表。NAT后面的设备将使用本地IP地址,NAT的公共IP地址将用于NAT后面的所有设备。

因此,任何需要到达NAT后面的任何设备的流量都将被发送到NAT的公共IP,NAT将有一个带有映射的本地地址的设备表,NAT将把流量发送到它后面的本地设备。

对于互联网上的世界来说,NAT后面的所有设备看起来都像一个单独的设备。本地地址应不为外界所知,因此为本地网络保留了一些IP子网,即
10.0.0.0 – 10.255.255.255
172.16.0.0 – 172.31.255.255
192.168.0.0 – 192.168.255.255

这些地址不应在互联网中路由,而是保留用于本地使用,因此可以重复使用。在这些专用ip地址之前,将有一个NAT设备,该设备将具有可全局路由的公共ip地址,并为其网络进行从公共地址到专用地址的转换,反之亦然。

因此,对多个设备使用一个公共IP。

NAT design

NAT的问题

通常在家庭或办公室中,互联网服务提供商提供单个公共IP地址,并且所有设备都在该IP地址后面。

为了从外部世界到达特定设备,外部服务器将数据包发送到公共IP地址,然后NAT将数据传输到本地IP地址上的设备,因为NAT知道本地网络上的哪个设备请求了数据。

如果我们想在两个或多个客户端之间建立直接连接,就会出现问题,因为使用NAT,所有客户端都将位于NAT之后。它只知道自己的内部本地IP地址,NAT设备会重写每个UDP数据包中的源端口和地址,以及IP数据包中始发的IP地址。

客户端无法使用其内部IP地址与外部对等方通信,因为连接将失败。因此,应用程序必须发现其公共IP地址,然后与网络外的对等方共享。

然而,仅仅知道公共IP地址并不能解决问题。到达NAT设备的公共IP的任何数据包也必须具有目的端口和NAT表中的条目,该条目可以将其转换为内部IP到内部目的主机IP和端口。

如果该条目不存在(最有可能的情况是客户端直接与来自外部世界的对等方通信),则NAT丢弃数据包,因为NAT无法知道将该数据包发送到哪里(即该数据包需要发送到哪个设备)。

解决方案

为了解决这种不匹配,已经发明了各种Traversal技术,即(STUN、TURN和ICE)。这些用于在网络上的对等点之间建立端到端连接。绕过NAT与NAT后面的设备建立连接的技术称为NAT穿越。

在进行WebRTC通信时,节点间会按照如下顺序获取对方的地址:

  1. 如果双端在同一个内网,直接用内网IP通信;
  2. 通过STUN服务器,为双端构造可以直接访问的地址,打造一条可以穿透NAT的通路,俗称“打洞”;
  3. 双端通过TURN服务器(中继服务器)进行通信。此时,通信网络的拓扑结构不再是P2P,因为数据其实是经过TURN服务器转发给双端的。

0

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!