NAT 英文称是 Network Address Translator,中文翻译为网络地址转换。简单来说,它的作用是将局域网的私有 IP 地址与广域网的公有 IP 地址进行转换。
当初 IEEE 设计 IPv4 协议时,估计是考虑到当时网络还不大发达,传输效率不高,也可能是想节省些空间吧,将地址长度设计成 32 位的。但是随着网络的飞速发展,32 位的 IPv4 地址已经不能够满足这网络飞速发展的需求了,设计新一代的更大地址空间的 IP 协议已经刻不容缓了。事实上,在 1996 年的时候,新一代的 IP 协议已经被设计出来了,就是 IPv6。IPv6 的地址长度是 128 位的,寻址空间大小为 2^128,大约是 3.4 x 10^38 个,这可是一个天文数字啊,据说这样的地址空间完全可以给地球上的每一粒沙子都分配一个唯一的地址!但是,由于 IPv4 与 IPv6 的地址格式不相同,现有的大部分主机都是 IPv4 的,想要一次性将 IPv4 替换为 IPv6 是不可能的,IPv4 与 IPv6 在网络上共存的局面要持续很长的一段时间。
NAT 就是在这个过渡时间内缓解 IPv4 压力的一项技术,它可以在 IPv4 地址有限的情况下也可以让更多的电脑连接到互联网。这就是本文的重点——NAT。
NAT 的基本运作方式如下。在存根域里面的地址可以被其它存根域重复利用,一个 A 类的地址可以被许多存根域使用。NAT 被安装在每一个主干网与存根域出口的地方,有一点比较重要的是,如果有多个出口,那么要确保每个出口的 NAT 必须要保持有一个相同的转换表。
例如,在图 2 的例子中,stub A 和 stub B 的内部都是使用 A 类地址 10.0.0.0 。stub A 的 NAT 分配到的是 C 类地址 198.76.29.0,而 stub B 的 NAT 分配到的是 C 类地址 198.76.28.0 。C 类地址是全局唯一的,在 stub 里面是不可使用。
当 stub A 里的主机 10.33.96.5 想要给 stub B 里的主机 10.81.13.22 发送一个数据包时,它使用全局唯一的地址 198.76.28.4 作为目标地址,然后将数据包发送给它的主路由器。stub 的路由器有一个到网络 198.76.0.0 的静态路由,所以这数据包被转发到广域网。然而在转发之前,NAT 将 IP 报头部的源地址 10.33.96.5 转换成全局惟一的 198.76.29.7。相同地,在返回路径的 IP 数据报也会经过类似的地址转换。
值得注意的是,这不需要主机和路由器做出任何的改变。例如,对于 stub A 的主机而言,198.76.28.4 只是在 stub B 里的主机使用。地址转换是完全透明的!
为了能让 NAT 正常地运作,非常有必要将 IP 地址分为两个部分——在根存域里的可重复使用的地址和全局唯一的地址。我们将可重用的地址成为本地地址,称全局唯一的地址为全局地址。任何一个给定的 IP 地址只能够是本地地址或全局地址之一,不能同时两者都是!
本文只是提到了 NAT 如何运作的一个简单的例子。当然,NAT 还有其它方面的问题需要解决,比如说私有网络、数据报头部的修改等等,这里就不想在继续了,想了解更新信息的朋友可以查看 RFC 1631,本文的大部分内容就是来自此。
END
本文作者: chenishr
本文标题:《探索 NAT》
本文地址: http://blog.chenishr.com/?p=549
©版权所有,除非注明, 永在路上文章均为原创,转载请以链接形式注明出处和作者细信息。