p2p内网穿透技术-udp打洞

栏目: 服务器 · 发布时间: 7年前

内容简介:在公司如何访问家里的电脑?实现方法有很多,其它p2p传输文件最快,能否实现?完全圆锥型NAT: 无条件转发

在公司如何访问家里的电脑?实现方法有很多,其它p2p传输文件最快,能否实现?

udp打洞原理

假设有两台分别处于各自的私有网络中的主机:A和B;N1和N2是两个网络的NAT设备,分别拥有IP地址P1和P2;S是一个使用了一个众所周知的、从全球任何地方都能访问得到的IP地址的公共服务器

步骤一:A和B分别和S建立UDP连接;NAT设备N1和N2创建UDP转换状态并分配临时的外部端口号

步骤二:S检查UDP包,看A和B的端口是否是正在被使用的(否则的话N1和N2应该是应用了端口随机分配,这会让路由验证变得更麻烦)

步骤三:如果端口不是随机化的,那么A和B各自选择端口X和Y,并告知S。S会让A发送UDP包到P2:Y,让B发送UDP包到P1:X

步骤四:A和B通过转换好的IP地址和端口直接联系到对方的NAT设备;

p2p内网穿透技术-udp打洞

udp打洞成功前提条件--非对称NAT

完全圆锥型NAT: 无条件转发

受限圆锥型NAT:  忽略掉其它主机的数据包(要求来源ip一直)

端口受限圆锥型NAT: 更进一步地要求源端口(上例中是 2727)必须跟之前发出的数据包的目的端口一致(要求来源ip和端口)

对称NAT: 丢弃报文,拒绝转发(每次连接端口会变)

对称NAT理论上可以使用端口预测,但是基本上用不了。现在国内几个宽带运行商都是使用对称NAT,所以udp打洞不可行。

记得之前上学的时候p2p共享软件很多,后来都销声匿迹,应该是被管控了。

socat测试udp打洞

下面是socat打洞的例子,试过在公司与家里之间打洞,用不了被现实了

https://blog.lilydjwg.me/2012/8/28/udp-hole-punching-experiment.35350.html

frp测试udp打洞

frp采用xtcp协议,试过同样用不了。stcp可以用,但是不是p2p,要经过中间转发。

检查nat类型?

#python直接用pynat包
pip install pynat

pynat

C:\Users\wyq>pynat
Network type: Symmetric NAT   #对称nat
Internal address: 192.168.50.169:54320
External address: xxx.xxx.xxx.xxx:61195

内网穿透可行方法

方法 描述 实现条件 实际是否可行
p2p udp打洞 非对称nat 不可行。宽带基本都是对称nat。除非在自己公网ip上提供p2p穿透
ddns 路由器使用有公网ip 宽带提供了公网ip 不可行。路由器基本没有公网ip
端口转发 将端口映射到公网ip 需要公网ip 可行
vpn 要求有公网ip节点,运行vpn服务端 需要公网ip 可行

参考来源

http://www.yongqingking.top/vps/2018/11/25/dig-hole.html

此生必看的科学实验-水知道答案

《了凡四训》详解之改过之法

印光大师十念法(胡小林主讲第1集)

精神病为什么治不好

百病之源


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Linux Command Line

The Linux Command Line

William E. Shotts Jr. / No Starch Press, Incorporated / 2012-1-17 / USD 39.95

You've experienced the shiny, point-and-click surface of your Linux computer-now dive below and explore its depths with the power of the command line. The Linux Command Line takes you from your very ......一起来看看 《The Linux Command Line》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具