NAT,即网络地址转换,是指在一个网络内部,根据需要可以随意自定义的IP地址,而不需要经过申请。而当内部的计算机要与外部internet网络进行通讯时,NAT设备(比如:路由器)负责将其内部的IP地址转换为合法的IP地址并进行通信。
从功能上来说,NAT可以分为:传统NAT,双向NAT(Bi-Directional NAT),两次NAT(Twice NAT),多宿主NAT(MultihomedNAT);从转换的类型上说,NAT可以分为:静态NAT,动态NAT,复用NAT,重叠NAT。
功能分类:
一 传统NAT
传统NAT又分为两大类对称NAT(Symmetric NAT) 和非对称NAT (Cone NAT)
1)非对称NAT(Cone NAT)
其下又细分为:
a) 全ConeNAT(Full ConeNAT)
打洞创建原则:向外部任意IP发送一个package,就形成了一个映射,即创建了一个洞。
接收数据原则:只要过来的数据是发送到打洞的PC,就可以顺利通过。
b) 限制性ConeNAT(Restricted Cone NAT)
打洞创建原则:向外部某个IP发送一个package,就形成了与此IP的一个映射。
接收数据原则:满足两个条件:1,此数据来自此IP;2,此数据要发送到打洞的PC。
c) 端口限制性 ConeNAT(PortRestricted Cone NAT)
打洞创建原则:向外部某个IP的某个Port发送一个package,就形成了与此IP/Port对的一个映射。
接收数据原则:满足两个条件:1,此数据来自此IP的此Port;2,此数据要发送到打洞的PC。
2)对称NAT(Symmetric NAT)对称NAT是指把所有来自相同内部IP地址和端口号,到特定目的1P地址和端口号的请求映射到相同的外部TP地址和端口。如果同一主机使用不同的源地址和端口对,发送的目的地址不同,则使用不同的映射。只有收到了一个IP包的外部主机才能够向该内部主机发送回一个UDP包。对称的NAT不保证所有会话中的(私有地址,私有端口)和(公开IP,公开端口)之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。
假设同一个进程,与外网的两台机器,同时建立联系,ClientA的原来那个Socket(绑定了1234端口的那个UDP Socket),现在又要向另外一个Server S2发送了一个UDP包,那么这个UDP包在通过NAT时会怎么样呢?
这时可能会有两种情况发生:
1)是NAT再次创建一个Session,并且再次为这个Session分配一个端口号(比如:62001)。
2)是NAT再次创建一个Session,但是不会新分配一个端口号,而是用原来分配的端口号62000。
前者NAT叫做Symmetric NAT,后者叫做Cone NAT。
传统P2P文件传输在NAT检测方面比较薄弱,没有一个系统全面地检测方法,其中对对称型NAT的检测几乎没有。因此P2P应用在对称NAT设备后就无用武之地了。
二 双向NAT
双向NAT是指即由内向外翻译,同时又将外部全局地址翻译为外部本地地址,但是每次翻译都只是翻译一侧地址,而不是两侧同事翻译。从而区别与两次NAT。
这里涉及到NAT的四个地址:
内部本地(IL,Inside Local)--分配给内部设备的地址,这些地址不会对外公布。
内部全局(IG,Inside Global)--通过这个地址,外部可以知道内部的设备。
外部全局(OG,Outside Golbal)--分配给外部设备的地址。这些地址不会向内部公布。
外部本地(OL,Outside Local)--通过这个地址,内部可以知道外部设备。
三 两次NAT(twicenat)
两次NAT是同时修改源和目的地址,相当于双向NAT的两个方向同时生效一样。这种应用一般在内部IP地址与外部IP地址冲突时使用。
四 多宿主NAT(MultihomedNAT)
使用NAT会带来很多问题(RFC2993)。比如,NAT设备要为经过它的会话维护状态信息,而一个会话的请求和响应必须通过同一NAT设备做路由,因此通常要求允许NAT末梢域边界路由器必须是惟一的,所有的IP包要么发起,要么终结在该域。但这种配置将NAT设备变成了可能的单点故障点。
为了让一个内部网络能够在某个NAT链路故障的情况下,也可以保持与外部网络的连通性,通常希望内部网络到相同或不同的ISP具有多条连接(多宿主的),希望经过相同或不同的NAT设备。
又如,多个NAT设备或多条链路使用同一NAT,共享相同的NAT配置能够为相互之间提供故障备份。在这种情况下,有必要让备份NAT设备交换状态信息,以便当主NAT出现故障时,备份NAT能够担负起透明地保持会话的能力。
转换类型分类:
一 静态转换(Static NAT)
在路由器上手工配置私有IP地址和公网IP地址的对应关系,一经配置,转换表永久存在。明显的例子是NAT路由器上配置外网用户访问内网的服务器:内网服务器依然使用私网地址,在NAT路由器上,分配一个公网地址并配置私网地址/公网地址的转换表,对外提供公网IP地址给外部网络用户访问。
NAT转换表:202.110.10.10 8080 ---> 10.110.10.10 80 (www)
二 动态转换(Dynamic NAT)
路由器上保留一个合法地址列表,每当有转换需求的时候,从列表中选择一个进行转换。注意:动态转换依然是一对一的。
1)由于从列表中选择,每次转换采用的IP地址并不一定是同一个;
2)合法地址被采用后,其他的转换需求不能再使用这个合法IP。
三 复用转换(Overloading NAT)
在动态转换中,每个合法的IP地址只能在转换表中使用一次,在内部网络主机访问外部需求增多的情况下,合法地址列表中的IP地址会很快不够用。这时,可以利用上层协议标识,例如利用传输层TCP/UDP的端口号字段来协助建立NAT转换表项(ICMP报文的ICMP头中的Identifier字段也可以用来实现与端口号类似的功能)。这样,多个私有地址可以通过一个合法地址进行转换,这种类型的NAT转换也可以称为PAT(端口地址转换)。
转换表项例子:
10.10.1.1 100 202.110.10.1 100
10.10.1.1 101 202.110.10.1 101
10.10.1.2 102 202.110.10.1 102
......
理论上,1个公网地址可以提供的转换表项为2^16=65535个(尚未扣除知名端口数量)。这是INTERNET上NAT的典型应用。通过复用转换,还可以实现服务器负载分担的功能。
四 重叠转换(OverlappingNAT)
内部网使用的地址跟外部网重叠,这时需要把跟外部重叠的IP地址进行变换。在NAT路由器上,将外部网的重叠IP重新映射成不重叠的IP地址。这个方案可以解决使用相同私网网段的企业网络的合并问题。
建立的转换表项如下:
10.10.10.1 168.192.10.1 172.10.1.1 10.10.10.1
10.10.10.1 172.10.1.1 168.192.10.1 10.10.10.1
在NAT路由器上,将外部网的重叠IP重新映射成不重叠的IP地址。这个方案可以解决使用相同私网网段的企业网络的合并问题。
阅读(3270) | 评论(0) | 转发(0) |