UDP NAT打洞初解

UDP  NAT打洞即为P2P做准备!

总所周知,2个内网IP,无法直接通讯,如果需要连接,即需要一台公网IP的服务器作中转,如果所有的数据都通过服务器中转,那么服务器的压力相当大了,因此需要使用P2P技术来减少数据通讯量。

 

首先看一个模型,Client 10.0.0.2:4000,NAT 201.0.0.2:60000,Server 200.0.0.2:80

 

这样C/S的通讯方式如下:

 

Client                                                   NAT                                                             Server

                  发送端  10.0.0.2:4000                     201.0.0.2:60000

                  接受端  200.0.0.2:80                       200.0.0.2:80

 

                  发送端 200.0.0.2:80                        200.0.0.2:80

                  接受端 10.0.0.2:4000                      201.0.0.2:60000

 

也就是说,C在NAT上开了60000号端口,来转发S端的数据,对S来说,不存在10.0.0.2:4000这个端口,只有200.0.0.2:60000这个口

 

内网穿透就是基于C在NAT上打孔来实现的

 

现在有2个Client需要通讯,我们增加一个Client  11.0.0.2:4000,一个NAT  202.0.0.2:60000

 

 

那么C-C的孔该怎么开呢?

 

新建一个C/S的链接

 

Client                                                   NAT                                                             Server

                  发送端  11.0.0.2:4000                     202.0.0.2:60000

                  接受端  200.0.0.2:80                       200.0.0.2:80

 

                  发送端 200.0.0.2:80                        200.0.0.2:80

                  接受端 11.0.0.2:4000                      202.0.0.2:60000

这时候,如果,10.0.0.2:4000直接向202.0.0.2:60000发送数据包,那么这个包会被NAT丢弃,应为这个孔不是为它而开,那么怎么办?

 

首先10.0.0.2:4000直接向202.0.0.2:60000发送数据包,这个包被202.0.0.2丢弃,但是不要紧,在201.0.0.2上,10.0.0.2:4000到202.0.0.2:60000的孔,开启了,下一步就是让11.0.0.2:4000也去开孔,那么谁来通知,自然是Server

由11.0.0.2:4000向201.0.0.2:60000发送数据包,那么201.0.0.2上的孔已经开了,通讯成功,一个双向的全通的P2P链接就可以链接成功,也标志了打孔成功!

理论暂时讲到这里,下次贴代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值