NAT可以分为很多种,但是最为普遍的是传统NAT,或者称为向外NAT。向外NAT在默认情况下只允许向外的Session穿越NAT,这就是我们最为常见的情况。
这种向外NAT又可以分为基本NAT(Basic NAT)和NAPT(Network Address/Port Translation)。
1. 基本NAT
基本NAT只转换IP地址,而不转换端口。一个基本NAT往往需要具有多个公网IP来满足多个内网节点中具有相同端口的应用程序的同时访问。由于这种类型的NAT设备限制大,现在已不常见。
2. NAPT
(注:Endpoint表示一个IP地址和端口对)
与基本NAT只转换IP地址不同,NAPT转换整个Endpoint。由于NAPT允许内网内的多个节点通过共享的方式使用同一个IP地址,因此,如今NAPT类型的NAT设备已经越来越多。
NAPT又可以进一步分为以下四种类型: (1) 完全锥型NAT(FULL CONE NAT)
完全锥型NAT在内网用户A(Private Endpoint)首次向外部主机发送数据包时创建地址映射会话,并为A分配一个公网地址和端口(Public Endpoint),以后任何A向外部发送的数据都将使用这个Public Endpoint。此后,任何外部主机想要与A通信,只要将数据包发送到Public Endpoint上,A就能够顺利的进行接收。
(2) 限制锥型NAT (RESTRICT CONE NAT)
限制锥型NAT在内网用户A(Private Endpoint)首次向外部主机发送数据包时创建地址映射会话,并为A分配一个公网地址和端口(Public Endpoint),以后任何A向外部发送的数据包都将使用这个Public Endpoint。此后,如果某个外部主机(Endpoint IP:PORT)想要与A通信,只要将数据包发送到Public Endpoint并且保证A曾用当前与NAT的会话向该外部主机的IP地址发送过数据,A就能够正常收到外部主机(Endpoint IP:PORT)发送来的数据包。
(3) 端口限制锥型NAT(PORT RESTRICT CONE NAT)
端口限制锥型在内网用户A(Private Endpoint)首次向外部主机发送数据包时创建地址映射会话,并为A分配一个公网地址和端口(Public Endpoint),以后任何A向外部发送的数据都将使用这个Public Endpoint。此后,如果某个外部主机(Endpoint IP:PORT)想要与A通信,只要将数据包发送到Public Endpoint并且保证A曾用当前与NAT的会话向该外部主机的Endpoint发送过数据,A就能够正常收到外部主机(Endpoint IP:PORT)发送来的数据包。
(4) 对称型NAT(SYMMETRIC NAT)
对称型NAT是一种比较特殊的NAT。内网用户A(Private Endpoint)首次向外部主机S1发送数据包时创建地址映射会话Session1,并为A分配一个公网地址和端口(Public Endpoint1),以后A所有发向S1的数据包都使用这个Public Endpoint1。如果之后A用同一个Socket向外部主机S2发送数据包,这时对称型NAT又为其分配一个地址映射会话,并为A分配一个新的公网地址和端口对(Public Endpoint2),以后A所有发向S2的数据包都使用这个Public Endpoint2。对称型NAT规定Public Endpoint1和Public Endpoint2一定不相同。此外,如果任何外部主机想要发送数据给A,那么它首先应该收到A发给他的数据,然后才能往回发送,否则即使他知道内网主机的Public Endpoint也不能发送数据给A。这种NAT可以通过端口猜测等方法进行穿透,但是效果并不是很好,很难实现UDP-P2P通信。
参考资料:http://wenku.baidu.com/link?url=0mMdF_wpljAf_VRemw5BhCUZmo2ynnJmOWoxBctngYXMd0yhm79dwX8ELf7WYxfUAZcjv7AXiWZ797dbt1KI8EaxowntJ8Se2eh5c_aMjBi