
_START_ARTICLE_
UDP打洞
_START_SECTION_
描述
_START_PARAGRAPH_
通过UDP路由验证实现NAT穿越是一种在处于使用了NAT的私有网络中的Internet主机之间建立双向UDP连接的方法。由于NAT的行为是非标准化的，因此它并不能应用于所有类型的NAT。_NEWLINE_其基本思想是这样的：让位于NAT后的两台主机都与处于公共地址空间的、众所周知的第三台服务器相连，然后，一旦NAT设备建立好UDP状态信息就转为直接通信，并寄希望于NAT设备会在分组其实是从另外一个主机传送过来的情况下仍然保持当前状态。_NEWLINE_这项技术需要一个圆锥型NAT设备才能够正常工作。对称型NAT不能使用这项技术。_NEWLINE_这项技术在P2P软件和VoIP电话领域被广泛采用。它是Skype用以绕过防火墙和NAT设备的技术之一。_NEWLINE_相同的技术有时还被用于TCP连接——尽管远没有UDP成功。
_START_SECTION_
算法
_START_PARAGRAPH_
假设有两台分别处于各自的私有网络中的主机：A和B；N1和N2是两个网络的NAT设备，分别拥有IP地址P1和P2；S是一个使用了一个众所周知的、从全球任何地方都能访问得到的IP地址的公共服务器_NEWLINE_步骤一：A和B分别和S建立UDP连接；NAT设备N1和N2创建UDP转换状态并分配临时的外部端口号_NEWLINE_步骤二：S检查UDP包，看A和B的端口是否是正在被使用的（否则的话N1和N2应该是应用了端口随机分配，这会让路由验证变得更麻烦）_NEWLINE_步骤三：如果端口不是随机化的，那么A和B各自选择端口X和Y，并告知S。S会让A发送UDP包到P2:Y，让B发送UDP包到P1:X_NEWLINE_步骤四：A和B通过转换好的IP地址和端口直接联系到对方的NAT设备；