华为BasicNAT和NAPT实现原理
NAT是路由器的一项非常重要,且应用非常广泛的技术,但许多读者对NAT的各种实现方式的工作原理一直没有搞清楚,其实很简单。本篇先介绍两种NAT实现方式的工作原理,下篇再介绍另两种实现方式的工作原理。
6.1.2 Basic NAT实现原理
Basic NAT方式属于一对一的地址转换,但要注意它不是静态的一对一转换,而是动态的。在这种转换方式下,在内网用户向公网发起连起请求时,请求报文中的私网IP地址就会通过事先准备好的公网IP地址池动态地建立私网IP地址与公网IP地址的NAT映射表项,并利用所映射的公网IP地址将报文中的源IP地址(也就是内网用户主机的私网IP地址)进行替换(但只转换IP地址,而不处理TCP/UDP协议的端口号,且一个公网IP地址不能同时被多个私网IP地址映射),然后再送达给外网的目的主机。而当外网主机收到请求报文后进行响应时,响应报文到达NAT设备后,又将依据前面请求报文所建立的私网IP地址与公网IP地址的映射关系反向将报文中的目的IP地址(为内部主机私网IP地址映射后的公网IP地址)替换成对应的私网IP地址,然后再送达给内部源主机。
图6-1描述了Basic NAT的基本原理,实现过程如下(需先要在Router上创建公网地址池):
(1)当内网侧Host主机要访问公网侧Server服务器时,向Router发送请求报文(即Outbound方向),此时报文中的源IP地址为Host自己的10.1.1.100,目的IP地址为Server的IP地址211.100.7.34。
(2)Router在收到来自Host主机的请求报文后,会从事先配置好的公网地址池中选取一个空闲的公网IP地址,建立与内网侧报文源IP地址间的NAT转换映射表项,包括正(Outbound)、反(Inbound)两个方向,然后依据查找正向NAT表项的结果将报文中的源IP地址转换成对应的公网IP地址后向公网侧发送。此时发送的报文的源IP地址已是转换后的公网IP地址162.105.178.65(不再是原来的Host主机IP地址10.1.1.100),目的IP地址不变,仍为Server服务器的IP地址211.100.7.34。
(3)当Server服务器收到请求报文后,需要向Router发送响应报文(即Inbound方向),此时只需要将收到的请求报文中的源IP地址和目的IP地址对调即可,即报文的源IP地址就是Server服务器自己的IP地址211.100.7.34,目的IP地址是Host主机私网IP地址转换后的公网IP地址162.105.178.65。
(4)当Router收到来自公网侧Server服务器发送的响应报文后,会根据报文中的目的IP地址查找反向NAT映射表项,并根据查找结果将报文中的目的IP地址转换成Host主机对应的私网IP地址(源地址不变)后向私网侧发送,即此时报文中的源IP地址仍是Server服务器的IP地址211.100.7.34,目的IP地址已转换成了Host主机的私网IP地址10.1.1.100。
【经验之谈】从以上Basic NAT实现原理分析可以看出,Basic NAT中的请求报文转换的仅是其中的源IP地址(目的IP地址不变),即仅需关心源IP地址;而响应报文转换的仅是其中的目的IP地址(源IP地址不变),即仅需关心目的IP地址。两个方向所转换的IP地址是相反的。6.1.3 NAPT实现原理
由于Basic NAT这种一对一的转换方式并未实现公网地址的复用,不能有效解决IP地址短缺的问题,因此在实际应用中并不常用。而这里要介绍的NAPT可以实现并发的地址转换,允许多个内部地址映射到同一个公有地址上,因此也可以称为“多对一地址转换”或地址复用。
NAPT使用“IP地址+端口号”的形式进行转换,相当于增加了一个变量,最终可以实现使多个私网用户可共用一个公网IP地址访问外网。图6-2描述了NAPT的实现原理,具体过程如下(需先在Router上创建好公网地址池):
路由器学习指南》一书:http://item.jd.com/11513567.html。本书的配套视频课程:http://edu.51cto.com/course/course_id-1173.html