在IETF第69次会议上,美国UCLA计算机系教授、互联网体系结构委员会(IAB)委员张丽霞撰写了《A Retrospective View of NAT(对地址转换的回顾与反思)》一文,该文详细论述了网络地址转换技术NAT的发展历史,针对该技术今后发展的可能方向提出自己的见解。本文中我们阐述了NAT技术的历史沿革,分析了其成功的原因。
今天互联网上的网络地址转换设备(NAT)随处可见。NAT的广泛采用不是由于设计、也不是规划,而是由于互联网持续增长的需求。这种增长不仅是对地址空间的需求,还在于NAT能够提供其他的功能。本文给出了作者观察到的NAT发展历史、我们从中应该吸取的教训,对于已经走到今天的互联网,有助于我们看清以后发展的最佳方向。
引言
NAT一般是指连接本地网络和公众互联网的一个盒子,局域网在盒子后面,使用RFC1918中指定的私有IPv4地址。在最早的互联网体系结构设计中,每个IP地址是全球惟一而且是从全球都可以访问的。私有IPv4地址只在NAT后面的局域网内部有意义,因此,私有地址块可以在不同地方重复使用,只要这些局域网之间不直接相连。他们可以通过NAT进行通信,就像与互联网其他部分进行通信一样。
就像很多意想不到的成功一样,15年前(RFC1287和RFC1335刚出来),谁也没料到NAT会这么普遍。如果那时有人预料到了,NAT的部署可能是另一个样子:会有更好的规划和标准化。同样,如果当初有先见之明,那么15年来Internet的协议族的研究与发展也许是另一个样子,没有我们今天看到的那么复杂。
尽管时光不能倒流,但我想,重新审视NAT的历史,从中吸取有用的经验还是值得的;而且,这种审视对于我们评估或者重新评估NAT的优缺点,认清我们今天所处的位置,找到最佳的前进方向,都是非常有意义的。
我要强调的是,以下只是我个人的观点,我对历史的回顾可能不全,可能出错,而且就像我们对于互联网的理解不断变化一样,我的观点也不是一成不变的。
NAT是怎样工作的
我先前提到,IP地址设计为全球惟一和全球可达的,这是支持Internet端到端体系结构的基石。直到最近,几乎所有Internet协议,特别是应用层以下协议,都是基于上述IP地址模型的。但是20世纪90年代初以来,Internet的爆炸性增长不仅预示了IP地址空间耗尽的危险,而且实际也已经对地址产生了迫切的需求:突然之间,为了连接大量的用户网络和家用电脑,对IP地址的需求时间紧迫,数量巨大。这种需求无法通过常规地址分配来满足,于是NAT应运而生了。
因为NAT广泛部署以前并没有标准化,所以今天存在许多不同的NAT产品,无论从功能还是技术细节都有所不同。本文讨论的是NAT发展的历史——不是研究具体的NAT盒子——我只是以一种主流的NAT实现为例子,感兴趣的读者可以通过wikipedia了解不同的NAT产品。
我们把NAT看作一个盒子N,它有一个公网地址的接口连到Internet,一个私有地址的接口连到内网,内网的所有联网计算机都把N作为去往公网所有目的的默认网关。当内网一台主机H发送数据包P给Internet上的主机D时,数据包将被路由到NAT盒子N。N把数据包P头部的源地址(私有地址)转换为公网地址,并且在NAT内部的映射表中增加一个条目,记录着内部主机和出去的数据包地址的映射关系。一个条目就代表了一部分状态,保证所有后续的数据包可以在主机H和D之间进行交换。比如,如果D对数据包P发出了一个响应包P’,P’会先到达N; N根据前面映射表中相应的条目,把P’包头中的目的地址(N自己的公有地址)转换为实际的目的地址H,于是数据包P’就到达了目的主机H。如果D和H之间长时间没有通信,NAT内部映射表中对应的条目会超时,这个超时的时间一般由厂商指定。在处理IP数据包进行地址转换时,NAT设备必须重新计算IP头的校验和,以及传输层的校验和——如果它们受IP地址影响的话,比如TCP 和UDP的校验和。
从上面的描述中很容易看出NAT最大的好处:用单个公网地址就可以把大量主机接入到Internet;而且,随着时间的推移,其他的好处也逐渐显露出来,本文后面将详细讨论。
但同时,NAT的几个缺点也很明显;首先,也是最重要的,NAT从根本上改变了Internet体系结构中端到端的通信模型。主机之间不能直接通信,而必须要经过NAT;而且通信必须由内部主机发起才能建立NAT内部映射表的条目。另外,NAT容易成为单点故障,因为所有出入的数据交换都要依赖于NAT内部的地址映射表,一旦崩溃,所有现存的状态都将丢失,内外部的通信都必须重新开始。这样就违背了IP层最初的目标:只要源和目的之间存在物理连接,就可以发送数据包。此外,由于NAT修改了IP地址,所有依赖IP地址的协议都受影响。在某些场合,比如TCP校验和,NAT在可以转发时重新计算以隐藏这种修改。但一些直接使用IP地址的协议,如IPSEC,在存在NAT的环境中就无法再像最早设计的端到端模式来使用;而一些在应用层数据里嵌入了IP地址的应用层协议,就要求应用层网关处理这种地址的变化。NAT还有一些缺点只是在最近才浮出水面,本文下面还会讲到。
NAT历史回顾
在1981年9月RFC791(IP协议)发布时,我正在麻省理工学院(MIT)读研究生,从事网络研究工作,因此我有幸见证了被称为Internet的这一新系统那令人陶醉的诞生过程。在接下来的10年里,Internet飞速发展。1991年发布了RFC1287“面向未来互联网的体系结构”,它可能是第一个关注在可预见的将来IP地址耗尽问题的RFC。
RFC1287 也提出了3个可能的方向来扩展IP地址空间。第一种类似今天的NAT:“把32位地址替换为等长但不同意义的地址,这个地址不再是全球惟一,而只在小范围内是惟一的。”
RFC1335于1992年5月发布,它更深入地探讨了用内部地址(即私有地址)来解决IP地址耗尽问题。而第一篇正式提出NAT的文章“通过地址重用扩展IP互联网(Extending the IP Internet Through Address Reuse),”发表在1993年1月的Computer Communication Review上,并在1年后作为RFC1663发布。尽管这些RFC可以看作NAT的先驱,但由于种种原因(我们稍后解释),IETF没有开始NAT标准化的工作。
Web的出现进一步加速了Internet在20世纪90年代初的发展,爆炸性的增长迫使人们解决路由可扩展性和地址不足的问题。为此,IETF采取了一系列措施,最终发起了IPng的开发工作。我想当时是期望几年内就产生一个新的IP协议并快速部署。然而,以后10年中实际的部署却走了另一条出乎意外的道路。
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。