概要
NAT的全称是 Network Address Translation, 其实看英文名,就知道它的大概意思:网络地址转换。
严格来说,
- 这个Address,包括了IP地址和端口。
- 而这个Translation,则包括来来源地址和目的地址,以及来源端口和目的端口这4者之间的转换
那么NAT规则其实定义的就是这4者的映射关系,告诉路由器应该怎么去转换(Translation)
那么什么时候会用到NAT技术呢,答案是,从一个网络到另外一个网络,有一些文章在写NAT的时候,常讲的是外网(互联网)到私网(私域子网)的通信的时候,其实这只是其中一种场景,实际上,只要是两个网络间需要通信,都可以用NAT来做。
下面这个图讲的就是互联网和私网这个场景的NAT
\ | / . /
+---------------+ WAN . +-----------------+/
|Regional Router|----------------------|Stub Router w/NAT|---
+---------------+ . +-----------------+\
. | \
. | LAN
. ---------------
Stub border
Figure 1: A typical NAT operation scenario
这个图是从NAT的规范rfc.2663 复制过来的,其中WAN就是广域网,LAN是一个局域网,LAN通过路由器连接到WAN,那么要在WAN和LAN之间通信,那就通过的在路由器里面做数据包的NAT转换。
NAT的地址转换技术有很多种类,但这些技术一般都具备下面这3个特征:
- 透明地址分配,就是定义外网和内网的地址的映射关系
- 通过地址转换进行透明路由(这里的路由指的是数据包的转发,而不是指交换路由信息)
- ICMP的错误包的payload转换
那么透明地址分配的规则是这个这些技术里面的关键点,这种地址分配又分为:
- 静态地址分配:这是一种one-to-one的映射关系,这种映射关系明确、简单,不需要在地址转换翻译的过程中管理会话,发出去和回复回来的数据包都有明确的关系。
- 动态地址分配:非one-to-one的映射关系,一个或者少量的外网地址分配个一个私网的一堆主机,这种情况,则需要通过会话来明确这个映射关系,那么就需要管理会话,这样才知道回复的数据包对应的是哪台主机发出去的(通过会话来查找映射关系,映射关系会话开始的时候就确立了)
NAT的种类
N