网络穿透与音视频技术(1)——NAT的概念及工作模式(上)

(这个专题我们将介绍网络穿透的基本知识,以及建立在此基础上的实时视频语音通信技术。不只是介绍理论知识,还介绍实际案例 )

1、概念介绍

1.1、NAT基本概念

NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上(摘自百度)。了解NAT的定义、NAT设备的工作方式等基本知识,是我们进行网络穿透与音视频技术学习的基础。本文和后续几篇文章将按照NAT基本概念、NAT映射模式、NAT映射实现方式、NAT检验这样的顺序进行知识介绍和梳理。

1.2、NAT设备是什么

常见的各种网络中(税务专网、警务专网、教育网、互联网、军网等),路由器的应用都非常广泛。路由器实现了内部网络到外部网络的连接,除了起到子网隔离、有害信息防护、路径选择和防火墙的作用外,路由器最重要的作用之一就是实现网络地址转换(NAT)功能——只有进行了各种模式下的网络地址转换和映射工作,路由器所隔离的内网和外网才能进行数据通信。

所以路由器实际上就是一种最常见的带有NAT功能的设备,我们日常生活中使用的网络的存在多级地址转换,并且处于不同级别的NAT设备其地址转换模式、性能都有较大差异。例如在电信核心机房的带有NAT功能的设备,其工作性能和我们家里使用的NAT设备的工作性能肯定是不一样的。

1.3、为什么需要NAT和NAT设备

TCP/IP协议是一种四层协议簇(七层协议簇并不完全满足),IP地址工作在网络层,端口描述信息工作在传输层。一个IPV4的结构一共32位,其实在除去广播段、组播段、保留段、内网段等特定IP地址范围后,能够工作在外网的固定IP地址非常有限(一种说法是IPV4已基本分配完毕,另一种说法是IPV4资源还很多只是运营商捂着。但是IPV6 128位地址的推广非常缓慢是显而易见的,这涉及到广泛的应用程序升级问题,有时间的话我们可以专门作为一个专题来进行探讨)。

那么有的朋友会说,操作系统上还有多个端口可以使用啊,IP + 端口这种组合方式还可以将目标地址再进行扩容。那么抱歉,这也是有限的或者说扩容潜力是有限的。一个操作系统的端口范围从 0——65535,其中低端口为保留端口,包括很多默认约定的端口。这样算下来,我们通常能自定义使用的端口编号就从1024开始一直到65535。(那么为什么65535是最大端口数呢?因为TCP/IP协议簇中,只有16位描述端口信息)

所以在我们所知的网络中,网络工程师都会使用带有NAT功能的设备/软件来进行网络隔离,达到不同网络中进行IP、端口重用的目的。如下图所示:

这里写图片描述

当然就如前文描述的那样,带有NAT功能的网络隔离设备还能完成很多其它重要功能,例如防火墙、最优路径选择、桥接等。

2、三种NAT设备的映射模式

在本小节中,我们不但会介绍三种NAT设备的映射模式,还会针对每种映射模式进行工作场景的介绍。目前NAT设备有三种映射模式,它们是静态映射、动态映射和网络地址端口映射(NAPT/PAT),其中又由于NAPT/PAT支持端口映射转换,所以它又是目前使用最广泛的一种映射模式。

2.1、静态映射(Static NAT)

静态映射(Static NAT)模式是指内部IP地址在NAT设备上都有一个稳定且同一时间不重用的外部网络IP与之对应,如下图所示:

这里写图片描述

静态映射模式的优点和缺点都非常明显,优点是对应关系简单,NAT设备中的映射表易于查询和维护;缺点也很明显,内部网络的每一个终端要访问外部网络都需要一个外部网络IP做对应,这加大了外部网络/上层网络的IP分配压力。

2.2、动态映射(Pooled NAT)

动态映射模式可以解决静态映射的一些问题,首先面对外部网络的NAT设备拥有有限的多个外部IP地址,这些IP地址同样是通过外部网络/上层网络分配而来,其次在NAT设备内部维护了一个可用的外部网络IP地址池。当内部网络的某个终端需要完成地址转换操作时,NAT设备就会从自己内部维护的这个“地址池”中取出一个可用的外部网络IP地址作为映射关联,如下图所示:

这里写图片描述

当完成本次外部资源的访问或一段时间不再有相关数据通信,这个映射关系将从NAT设备的映射表中被剔除,外部网络IP地址将回到NAT设备的“地址池”中,准备下一次被使用。从上图可以看出动态映射模式的几个工作特点,首先映射关系是随机的,内部网路地址“192.168.100.201”第一次映射的外部网络地址可能是“47.92.50.240”,下一次同样的内部网络地址可能映射的外部地址就变成了“47.92.50.241”。其次NAT设备被外部网络/上层网络分配的网络地址虽然还是多个,但由于引入了“池”的概念,所以增加了一定的外部网络地址的重用性,减少了外部网络的地址分配压力。

2.3、网络地址端口映射(NAPT/PAT)

这种工作模式下,面向外部网络/上层网络的NAT设备可以只被外部网络/上层网络分配了一个网络地址。网络地址端口映射(NAPT/PAT)工作在TCP/IP的传输层,是目前使用最普遍NAT映射模式,首先是静态映射和动态映射都不支持基于网络端口复用的映射转换;其次是因为NAPT/PAT可以最大限度的节约外部网络/上层网络的IP资源,所有内部网络的终端都可以基于NAT设备,映射同一个外部网络地址的不同端口。

那么我们用一个实例说明,当局域网(内部网络)一个IP地址去访问某一个外网服务地址时,NAT设备是怎样完成地址和端口转换的。这个实例可以对NAPT/PAT的工作方式有一个大致了解(为了着眼重点,如何查询DNS并解析域名、路由表如何完成查询等工作就不多介绍了)。

这里写图片描述

上图中可以看到,当一个内网IP为“192.168.100.201”的操作系统需要访问互联网资源时,首先请求会通过操作系统上的一个端口(上图中呈现的端口号是41000,实际上这些源端口往往是操作系统随机分配的)发送到第一级NAT设备上,该NAT设备使用NAPT/PAT映射模式,所以该NAT设备会为内部网络地址“192.168.100.201:41000”建立一个新的映射关系,映射到“172.16.80.62”的“13445”端口。接下来第一级NAT设备会将这个数据请求报文的源地址从192.168.100.201:41000改写成172.16.80.62:13445(这种改写方式实际上是NAPT/PAT映射模式中的Source NAT(SNAT)子模式,后文再进行详细说明)。如下图所示:

NAT设备改写SourceNAT

接下来这个被改写的数据报文会被当前NAT设备发送到下一层网络的网关,既是上图中所示的“公司核心路由器”,后者同样也是一个带有NAT功能的设备,同样也会将当前数据报文再次进行改写(前提是这个NAT设备支持NAPT/PAT-Source NAT映射模式)。改写的效果如下图所示:

这里写图片描述

以上介绍的NAPT/PAT的工作模式是不是感觉似曾相似,还记得关于LVS工作模式的介绍吗——LVS-NAT(https://blog.csdn.net/yinwenjie/article/details/46845997),是的实际上LVS-NAT的工作模式就是借鉴的NAT设备的NAPT/PAT映射模式。

随后说明一下,上图中每一个局域网的NAT设备都有且只有一个外部网络/上层网络地址,在实际情况下如果你的ADSL路由器是图中的NAT设备,那么它的外网IP是由电信运营商分配的,目前这些由电信运营商分配“外网IP”有时是一种所谓的“虚拟IP”(实际上是一种电信的内网IP,这又是另一个话题这里就不讨论了)。

2.3.1 NAPT/PAT子模式——Source NAT

既然NAPT/PAT映射模式的本质是改写数据报的地址和端口,那么根据改写地址和端口的方式,NAPT/PAT又可以分为Source NAT 和 Destination NAT两种子映射模式。所谓Source NAT是指NAT设备在向外部网络发送数据报之前,会将数据报的源IP地址和源端口进行改写,并建立映射关系。所以在本篇文章(2.3节)上述内容中介绍的NAPT/PAT映射模式,实际上就是Source NAT映射模式。

2.3.2 NAPT/PAT子模式——Destination NAT

那么NAT设备既然可以通过改写数据报文的源地址和源端口实现NAPT/PAT,那么自然就可以通过改写数据报文的目标地址和目标端口实现NAPT/PAT,后者这种方式就是Destination NAT。Destination NAT的应用场景很多,其中一种就是服务器通过NAT设备对客户端的请求进行相应,如下图所示:

这里写图片描述

上图中客户端通过NAT设备向服务器发送请求报文(可能就是HTTP数据报或者可能是基于TCP的MQTT数据报),这个请求数据报通过NAT设备时会被NAT设备通过Source NAT方式建立映射关系并进行数据报改写;当服务器处理完本次请求,并生成一个响应数据报文。这个响应数据报文通过NAT设备时,NAT设备将基于之前建立的映射关系,通过改写目标地址和目标端口的方式进行处理——Destination NAT。

Destination NAT还有一些比较典型的应用场景,例如负载均衡架构——Nginx、LVS、Tengine等都有类似原理的应用。如下图所示:

这里写图片描述

(接后文)

posted @ 2018-09-14 17:43  点点爱梦  阅读(419)  评论(0编辑  收藏  举报