NAT学习

The IP Network Address Translator,IP网络地址转换是人们说的NAT,或者说NA(P)T。 NAT是为了解决IPv4地址不足而提出来得一种替代方案,可以对外界屏蔽内部的网络拓扑。 随着网络的发展,NAT阻碍了构建在覆盖网络的P2P程序的发展。 因为覆盖网络是构建在应用层,屏蔽了传输层以下的网络拓扑,网络中的每一个节点或某些节点有此网络的路由表,由这些路由表构建出这个覆盖网络,但是NAT阻碍的覆盖网络中节点的连接。

上图显示了NAT的原理。 NAT将内网的IP替换为公网IP,将端口映射为公网的端口。 公网IP替换内网IP是固定的,NAT的不足之处在于端口的替换。 因为NAT还没有形成标准,替换策略有几种,这也是NAT行为的关键。

在《Behavior and Classification of NAT Devices and Implications for NAT Traversal》一文中就把端口映射的行为分成四种,其中包括保留端口,不保留端口,端口重载,端口复用。 这四种分类最终区分了NAT的四种类型即Full cone NAT,Symmetric NAT,Port-Restrictes cone NAT ,Address-Restriced cone NAT。

为了使覆盖网络中的节点相互通信,我们需要进行NAT穿越。在《A NAT Traversal Mechanism for Peer-To-Peer Networks》一文种介绍了根据两端不同的NAT类型对应的四种NAT穿越方案。如下图

这些解决方案都需要STUN(Simple Traversal of User Datagram Protocol through Network Address Translators (NATs),NAT的UDP简单穿越)协议帮助。 STUN协议要求一台具有公网IP的主机帮助一台主机进行NAT类型的判断。

上图是STUN协议的流程,其主要的思想是通过STUN的回射来判断主机的NAT类型。

除了直接连接,反向连接、打洞和依赖都需要第三台主机的帮助。 在《Characterization and Measurement of TCP Traversal through NATs and Firewalls》一文中介绍了TCP穿越的方法。 在STUNT#2方法中,第三台主机和两台需要连接的主机都有长连接,当一方需要发起来连接时,向第三台主机发请求,第三台主机向被请求的主机发送邀请,此时需要连接的主机都向对方发送SYN包,此时双方的防火墙都有了洞,只要有一方的SYN包到达对方主机,连接就会被建立。 Relay方法需要耗费的代价太大,在P2P应用中一般会消极的处理双方都是对称NAT的情况。

Tags: 网络