UDP打洞是P2P(对等)技术中的一种NAT(网络地址转换)穿越方法。它允许处于NAT(网络地址转换)后的两台主机之间建立双向UDP(用户数据报协议)连接。由于NAT的行为是非标准化的,UDP打洞的方法并不适用于所有类型的NAT。其基本思想是让位于NAT后的两台主机都与处于公共地址空间的众所周知的第三台服务器相连,一旦NAT设备建立好UDP状态信息就转为直接通信。这种技术的关键在于利用NAT设备在分组实际来自另一主机时仍保持当前状态的行为。
UDP打洞的过程可以概括如下:
- 双方都通过UDP与服务器通讯后,网关默认建立外网IP和端口号与内网IP和端口号的映射,这个过程无需设置,服务器也不需要知道客户的真正内网IP。
- 用户A先通过服务器知道用户B的外网地址与端口。
- 用户A向用户B的外网地址与端口发送消息。
- 在这一次发送中,用户B的网关会拒收这条消息,因为它的映射中并没有这条规则。
- 但是用户A的网关就会增加一条允许规则,允许接收从B发送过来的消息。
- 服务器要求用户B发送一个消息到用户A的外网IP与端口号。
- 用户B发送一条消息,这时用户A就可以接收到B的消息,而且网关B也增加了允许规则。
- 之后,由于网关A与网关B都增加了允许规则,所以A与B都可以向对方的外网IP和端口号发送消息。
UDP打洞技术的应用非常广泛,尤其是在P2P软件和VoIP电话领域。对于大型公司网络中常见的对称NAT设备(也称为双向NAT),UDP打洞不起作用。尽管如此,这项技术仍为许多依赖P2P通信的应用提供了有效的解决方案,特别是在没有有效和直接的端到端连接的环境中。