在传统的NAT中,路由器进行了地址转换,实现了私网地址的设备可以访问Internet上的设备。但是当只有一个公网地址时,在同一时刻私网内的设备只有一台设备能够访问Internet。为了使私网内多个设备能同时访问Internet,出现了NAPT(Network Address Port Translation),即网络端口地址转换。在NAPT中,不仅源地址进行了转换,源端口也进行了转换。这样一个公网IP地址可以同时被几万个私网主机使用。NAPT是目前实际应用的主流方案。我们来看下面的例子。
Full Cone(全锥型)NAT:内网主机往外访问不同的目标地址和端口号,路由器每次都把该“私网源IP+源端口号“映射到同一个”公网IP地址/端口“;同时,外网的任何主机(包括先前内网主机未曾主动访问过的外网主机)都可以通过该”公网IP+端口号“访问内网主机。
Restricted Cone(限制锥型)NAT:地址/端口映射的情况同全锥型NAT,但外网的主机要访问内网主机的前提是:该内网主机必须先发送过报文给该外网主机的地址——不要求是对应的端口号。
Port Restricted Cone (端口限制锥型)NAT:地址/端口映射情况同全锥型NAT,但外网主机要访问内网主机的前提是:该内网主机必须先发送过报文给该外网主机的地址和端口号。
Symmetric(对称型)NAT:内网主机往外访问不同的目标地址和端口号,路由器每次都把该“私网源IP+源端口号“映射到不同的”公网IP地址/端口“——通常为节约公网IP,外网源IP地址不会发生改变(直接利用路由器WAN口的IP地址),但也可以通过配置公网地址池以使IP地址发生改变。外网主机必须先收到过内网主机的报文,才能访问到该内网主机。
前三种NAT的处理模型中,因为一对“私网IP/端口”统一被映射到同一对“公网IP/端口”,虽然被访问的“公网IP/端口”有多对,所以呈现一对多的模型,很像锥形,所以称为锥型NAT。而对称型NAT中,访问不同的“公网IP+端口”对,NAT路由器都会为同一个“私网IP+端口”对映射为不同的“公网IP+端口”对,呈现一对一的模型,故称为对称型NAT。
我们继续本周开头的故事。传递室大爷分拣信件时,收到一封收件人为“XXX年级年级长”的信件。大爷可犯难了,因为这个年级长是每月竞选轮换的,他可不知道当月的年级长在哪个班级,所以不知道该把信件放到哪个班级的信箱。小U给大爷出了一招,让年级长的评选负责组织及时把对应的同学姓名和班级号报送给大爷,这样大爷就知道把信件放到哪个班级的信箱了。
其实,NAT设备也存在类似的烦恼。前面我们曾说过,为解决外网设备主动访问NAT内网设备的问题,需要在NAT设备上手工配置NAT表项映射。但如果内网设备的服务IP地址或端口号会发生变更,手工静态配置显然是不合适的,需要有一个动态交互的机制。解决这个问题的特性叫通用即插即用UPnP(Universal Plug and Play)。
DDNS(Dynamic Domain Name Server)叫做动态域名服务。首先我们看一下DDNS的应用场景:在前面我们已经介绍了DNS的功能,在DNS中域名和用户服务器的公网IP地址是静态绑定的,是由DNS的服务提供商手工配置的。但申请静态公网IP价格较高,通常普通用户的服务器上网默认采用运营商分配的动态IP地址(例如ADSL、PPPoE),这时处于公网的其他设备该如何访问这个IP地址飘忽不定的服务器呢?DDNS技术就是用来解决这个问题的。