网络地址转换(Network Address Translation,NAT)
对某子网(如家庭,小型办公室),ISP已为其分配一组连续的IP地址。NAT技术使得该子网可以在有限的IP地址下扩展因特网设备。
NAT使能路由器接口可分为公网接口和子网接口,公网接口连接因特网,子网接口是小型网络的一部分;
[RFC 1918] (https://tools.ietf.org/html/rfc1918) 保留了三块特殊的地址空间:
- 10.0.0.0/8 - 10.255.255.255 (10/8 prefix)
- 172.16.0.0/12 - 172.31.255.255 (172.16/12 prefix)
- 192.168.0.0/16 - 192.168.255.255 (192.168/16 prefix)
这些地址空间用于专用网络,如家庭网络;
在小型网络,即上述子网中,使用特殊地址空间编码,在公网,使用一般地址编码;
在小型网络内部,可以通过特殊地址空间内的地址区分各个网络设备;
在因特网范围内,以特殊地址空间地址编制的设备,其IP是不唯一的;
在小型网络内部,可之间通过内部IP区分设备,但在因特网上通讯,须使用NAT使能路由器的公网IP。
- 在外部视角下,NAT使能路由器类似一个具有单一IP地址的单一设备;
- NAT使能路由器对外界隐藏了家庭网络的细节;
- NAT使能路由器的公网地址通常是通过DHCP获得的;
- NAT使能路由器从ISP的DHCP获得公网地址,而后路由器运行一个DHCP服务器,为该路由器控制的小型网络中的端系统提供地址;
NAT转换表
- 对外界,NAT路由器控制下的网络有如一个设备,当数据到达NAT路由器时,路由器需将之分发到正确的设备;
- NAT通过转换表实现地址转换;
- NAT转换表是 端口号 到 内部IP x 实际端口号 的映射;
NAT工作原理
- 假定NAT内部网络上有设备在 (ip A,port a) 上对 公网端系统 (ip B,port b)发送报文,其中ip A 是内网地址,ip B是公网地址;
- 假定NAT路由器的公网地址是 ip N;
则,NAT路由器截获内网发往外围的报文,分配一个port nA,用(ip N,port nA)替换原报文中的源地址部分,同时,添加相应NAT转换表项;
NAT技术缺陷
NAT是解决IP地址短缺的权宜之计,有诸多问题;
- 端口号用于进程编址,而不应用于主机编址;NAT给运行在内网上的服务器造成了问题,因为客户无法知晓服务器的实际端口;
- 路由器仅应当出来网络层及以下的分组;
- 根据端到端原则,主机彼此应直接相互对话,节点介入修改IP地址与端口号违背了这一原则;
- 应使用IPv6解决IP地址短缺问题,而非使用NAT做权宜;
NAT穿越
- NAT妨碍P2P应用,因为NAT下的对等方无法作为服务器与其它对等方建立TCP连接,P2P需要通过中继等技术实现NAT穿越;
无论如何,NAT已是因特网的一个重要组件。
通用即插即用(UPnP)
可用于实现NAT穿越的技术;
允许主机发现并配置邻近NAT的协议;
UPnP要求主机和NAT都是UPnP兼容的;
在UPnP协议下,主机上的进程可以在一定程度上自定义NAT映射,即进程可以定义并了解套接字被映射到了哪个(ip,port)序对;