UDP Hole punching 概述

基本思想

        利用一个任何客户端都可达的服务器,在服务器上预先存储、维护客户端的UDP公用端点地址,当双方需要通信时,通过服务器的介绍获取对方的端点地址,建立直接的连接(两个客户端公网地址之间的直连)。

基本流程

        假设有两个位于私网中的客户端C1和C2(可能位于同一私网),都可访问同一Server,那么流程如下:

        一、C1向服务器发出请求,要求与C2建立连接。

        二、服务器向C1、C2发送对方的公网地址+端口(临近服务器的公网NAT的地址+端口,有可能是经由STUN学习到的);为了检测C1与C2是否在同一私网,服务器把对方的私网地址也发过去,双方先用私网地址通信,若不同,说明在不同私网中。

        三、C2收到C1的公网地址+端口后,向该地址发送UDP数据包,该数据包的作用是:使C2的NAT设备允许后续的以C1为源地址(公网地址)的数据包进入C2的内网,即让己端的防火墙对以C1为源地址的UDP数据包开放入口。

       四、C1接收到C2的公网地址+端口后,向C2的地址发送UDP数据包,该数据包的作用也是是己端的防火墙允许对端发来的UDP数据进入内网。

       五、C2会收到C1发来的数据包(假设C2先打开洞),它就向C1发送确认数据包,至此,双方可以互发数据了。

使用场景

        一、对称NAT无法使用该技术。

        二、C1与C2之间存在中继时,无法使用该技术(TURN)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值