UDP打洞
在计算机科学中,UDP打洞指的是一种普遍使用的NAT穿越技术。
基本介绍
- 中文名:UDP打洞
- 外文名:UDP hole punching
- 性质:NAT穿越技术
- 套用:P2P软体和VoIP电话领域
- 领域:网路安全
简介
通过UDP路由验证实现NAT穿越是一种在处于使用了NAT的私有网路中的Internet主机之间建立双向UDP连线的方法。由于NAT的行为是非标準化的,因此它并不能套用于所有类型的NAT。
其基本思想是这样的:让位于NAT后的两台主机都与处于公共地址空间的、众所周知的第三台伺服器相连,然后,一旦NAT设备建立好UDP状态信息就转为直接通信,并寄希望于NAT设备会在分组其实是从另外一个主机传送过来的情况下仍然保持当前状态。
这项技术需要一个圆锥型NAT设备才能够正常工作。对称型NAT不能使用这项技术。
这项技术在P2P软体和VoIP电话领域被广泛採用。它是Skype用以绕过防火墙和NAT设备的技术之一。
相同的技术有时还被用于TCP连线——儘管远没有UDP成功。
算法
假设有两台分别处于各自的私有网路中的主机:A和B;N1和N2是两个网路的NAT设备,分别拥有IP位址P1和P2;S是一个使用了一个众所周知的、从全球任何地方都能访问得到的IP位址的公共伺服器。
步骤一:A和B分别和S建立UDP连线;NAT设备N1和N2创建UDP转换状态并分配临时的外部连线埠号。
步骤二:S检查UDP包,看A和B的连线埠是否是正在被使用的(否则的话N1和N2应该是套用了连线埠随机分配,这会让路由验证变得更麻烦)。
步骤三:如果连线埠不是随机化的,那幺A和B各自选择连线埠X和Y,并告知S。S会让A传送UDP包到P2:Y,让B传送UDP包到P1:X。
步骤四:A和B通过转换好的IP位址和连线埠直接联繫到对方的NAT设备。
套用
对于大型公司网路中常见的对称NAT设备(也称为双向NAT),UDP打洞不起作用。在对称NAT中,与着名STUN伺服器的连线关联的NAT映射受限于从知名伺服器接收数据,因此众所周知的伺服器看到的NAT映射对端点来说并不是有用的信息。
在一个更详细的方法中,两个主机将开始传送给对方,使用多次尝试。在受限制的Cone NAT上,来自其他主机的第一个数据包将被阻止。在此之后,NAT设备就有记录传送了一个数据包到另一台机器,并让任何数据包来自该IP位址和连线埠号。这项技术广泛套用于点对点软体和网际网路协定语音电话。它也可以用来协助建立通过UDP运行的虚拟专用网路。相同的技术有时会扩展到传输控制协定(TCP)连线,但成功率较低,因为TCP连线流由主机作业系统控制,而不是应用程式,序列号随机选择。