UDP打孔

Kai*_*aan 7 c++ networking winapi firewall udp

关于使用UDP打孔,我有一些问题.基于维基http://en.wikipedia.org/wiki/UDP_hole_punching

1)要在双方(NAT后面的客户端,非NAT服务器)之间建立UDP会话,客户端只需向服务器发送数据包,然后允许会话两种方式(发送和接收) )通过防火墙?这意味着客户端也可以从服务器接收.

2)UDP Hole punching:两个客户端首先连接到服务器,然后服务器将客户端端口/ IP连接到其他客户端,因此客户端在这些端口上相互发送数据包.这是否正确?

3)如果#2为真,为什么防火墙允许从另一个IP接收数据而不是在该端口上进行连接时使用的数据?听起来像一个很容易被过滤的大安全漏洞?我知道源IP欺骗会欺骗它,但是这个?

先谢谢你,约翰

Ser*_*nov 5

1)是,使用最合理的防火墙,除非您将其配置为极端偏执模式。

2)不完全是。本文将对此进行更详细的说明,但是其思想是,其中一个客户端首先将数据报发送到另一个客户端的公共IP。然后,该数据报被丢弃,但是另一个客户端知道它已发送,因为第一个通过服务器通知了它。然后,另一个客户端将数据报发送回第一个,返回到第一个数据报所源自的端口。由于第一个客户端的NAT记住该端口有一个数据包,因此它将传入的数据报视为对第一个数据报的答复。这里的问题是弄清楚哪个公共端口NAT将选择发送第一个数据报,但是大多数NAT以可预测的方式进行发送,因此它几乎总是可以正常工作,有时甚至不是第一次尝试就可以。