2012年9月7日星期五

UDP隧道打洞技术研究

        UDP在点对点通信中起到了很大的作用,比如skype在用户点对点通信的时候就使用了UDP打洞的技术;
        所谓打洞,实际就是绕过防火墙或路由器的拦截,实现用户终端的直接连接。这里就需要先介绍一下NAT(Network Address Translation)了。它的核心是在IP封包通过防火墙或路由器时,重写源IP地址或目的IP地址的技术;
        下图展示了一个带NAT的网络,路由器后的网络地址和路由器的网络地址是变化的。

       NAT设备有四种模式,还可以简化为两种类型,即对称模式和非对称模式。非对称模式还分为1. 自由模式 2. 受限IP模式 3. 受限IP和端口模式;
       1. 自由模式:凡是内网的一个IP+PORT发起的UDP广播,在经过路由器之后都会映射到一个固定的端口,并且外部所有的IP和端口都可以通过路由器映射的IP+Port回访数据;
       2. 受限IP模式:凡是内网的一个IP+PORT发起的UDP广播,在经过路由器之后都会映射到一个固定的端口,只有接收方的IP可以发送回访数据,端口不限;
       3. 受限IP+port模式:凡是内网的一个IP+PORT发起的UDP广播,在经过路由器之后都会映射到一个固定的端口,只有接收方的IP和指定的PORT发起的回访数据,会被接受;
       4. 对称模式:凡是内网的一个IP+PORT发起到指定IP+port的UDP广播,在经过路由器之后都会映射到一个固定的端口,只有接收方的IP和指定的PORT发起的回访数据,会被接受;

       换句话说,只有非对称模式的NAT设备才可以进行UDP打洞;

       UDP打洞原理:
       1. 有一个协调方,我们称之为server;
       2. A,B分别和S相连;S即得到了A,B在最外层路由的ip地址和端口号;
       3. A要向B发起连接,先向S请求连接,S将B的ip+端口发送给A;
       4. A向B的IP+端口发送UDP数据包,被B的防火墙或路由抛弃;
       5. A向S通知,已经向B发送过数据;
       6. S通知B,向B发送A的ip+port,并通知B向A发送数据;
       7. B向A发送数据,由于A向B发送过数据,因此A的NAT设备的session里已经记录了B的ip+port,B的数据过来后,会被A的设备放行,数据将被直接传递到A的终端;
       8. A收到B的数据后,回数据给B,此时B的设备也记录了A的ip+port,因此通信建立成功;
       
       测试了一下,发现公司的环境和家里的环境,全部是对称模式,抓包时发现端口号已变,无法打洞:(
     

没有评论:

发表评论