P2P网络中内网穿透的方法总结(2019)

news/2024/11/16 12:42:10/

P2P网络中内网穿越方法总结(2019)

  • 内网穿越的需求
    • 问题分析
    • 方案一
    • 方案二
    • 方案三

内网穿越的需求

今天去图书馆搜资料查了一下,这个问题很老,但是解决办法很久都没有更新过了,还得翻翻书。网上的帖子众说纷纭,看得人云里雾里,这里总结一下以后备查。
是关于一个局域网和外网之间连接的问题:
问题简介
一分钟实现内网穿透:https://blog.csdn.net/zhangguo5/article/details/77848658

问题分析

首先问题的关键在于:
问题分析
由于动态NAPT的映射关系是LAN侧数据包来触发的,如果WAN侧有主动进来的数据包,因为查询不到映射关系的存在,就会被丢弃掉。所以这时需要内网穿透。

方案一

理念是构建一个公网中的服务端,两个内网中的客户端都相当于向该服务器注册,然后发送三次握手,可互相发现,实现NAT穿透。
Python写的比较常用的实现TCP内网穿透的服务器是ShootBack:
shootback
ShootBack:https://github.com/aploium/shootback

方案二

一个比较简单的方式是:端口映射(Port Mapping或者叫Port Forwarding),也是最基本的一种方式。

它将NAPT网关WAN侧的指定端口映射到内网指定地址的指定端口上。 这样当网关收到一个从外网过来的封包,就会转发到上述指定的内网地址和端口,对于封包的发起者来说,就像是直接访问这个内网主机一样。

且当内网的地址和端口都希望是动态的时候就需要“动态端口映射”,也就是UPnP里面的IGD(Internet Gateway Device)控制协议。
这种方式下的情形就是: 把节点连接在某个UPnP分配的节点上,然后外部直接来连接这个端口。

现在了解到的python下分离并加强这种分配端口方法的的包就是miniUpnp,还有待于了解;

但这种方法存在的问题:

——使用UPNP穿透NAT的方法会使得机器不安全,极其容易卡死路由器和其他问题;

——最初是为各种设备,后来发展为一般都是为电驴等软件配置某一个外部端口的时候开启,而自己写的某种程序能否做到端口映射问题很大,且开源多基于C;

——这种方法受到不同网络状况和设备的影响很大;

——多用于家庭内的树莓派或者设备连接外部公司里电脑这种情况;

关于UPnP和NAPT的解释:
https://www.zhihu.com/question/52383627/answer/130588578
主要用到的是其中IGD这个协议。

方案三

STUN协议和TURN协议

STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信。

stun
如图,在N层NAT后面的client向Server询问自己的外网IP和端口号,然后直接用于连接,这样就可以直接使用外部端口和IP,避免使用私网IP和端口无法被访问的问题。

网上开源项目也很多:

显然pystun支持的是python2.7之前的版本,现在版本需要的是pynat。

pynat:https://github.com/arantonitis/pynat
pynat
这里附上书上的描述:
book1
book2
book3
book4


http://www.ppmy.cn/news/300734.html

相关文章

【Protobuf】Protobuf中的Message语法规范

Protobuf中的Message语法规范 Protobuf快速使用 Java版、Python版 基本语法 标识号 包 选项 字段类型 枚举、数组、Map 消息嵌套的几种写法 消息嵌套的调用 Protobuf快速使用 Java版、Python版 参考上一篇:点击查看 基本语法 syntax "proto3"…

2612硒鼓拆装加粉

好久没有写文章了,和之前年初的时候说要在这里记录所以一些知识文档有一点了违被了,都过这么久了也该把我09年03月到09月所发生,所了解的知识做一记录. 3月17日 拆装2612硒鼓型号 先发个图上来吧. 结构:分为两边. 一边: 鼓芯,橡胶棒,废粉仓. 另一边: 粉盒,充电辊. 拆装…

清除三星SCX4200硒鼓上的计数器

注意4200机器分英文版机器和中文版机器2种,芯片里的资料也是不一样的,二种不能互换.附件里提供的是中文版用的,英文版机器的朋友不要用. 下面的线路板拆开硒鼓后就可以看见,如果不拆鼓只能看到 GND,CLK,DATA,VCC四个触点(外边只能看到3段金属丝,隐约可以看到板子上印的字) 记数…

三星SCX-4521F 4725F内存接收墨粉用尽问题

三星传真机SCX-4521F硒鼓粉终于耗尽,加粉后,还是提示“粉墨耗尽”,打印/复印正常,但是传真机功能不能使用,只处于内存接收状态。查看了一下,保险丝是85mA的,手头没这规格的,就没换&a…

java的内部类

1.内部类的概念 内部类表示的事物是外部类的一部分,内部类单独出现没有任何意义。如发动机是汽车的一部分。 内部类的访问特点: (1)内部类可以直接访问外部类的成员,包括私有; (2)外…

仿真用计算机配置,需要进行仿真,选什么配置的电脑比较好

满意答案 yang851221 2019.10.18 采纳率:40% 等级:8 已帮助:309人 楼主你好,你没说预算不敢给你配太贵的…不多说,请看配置:主板:映泰th616.x价格:¥599要稳定和性价比…

iphone11各机型对比_iPhone 11系列配置规格对比 快来看看哪款最适合你

【手机中国新闻】日前,苹果正式宣布,将于美国当地时间9月10日上午举办秋季新品发布会,发布全新iPhone产品。不出意外的话,就是之前曝光的iPhone 11系列,至少有iPhone 11、iPhone 11 Pro、iPhone 11 Pro MAX三款新品。9…

荣耀x10和荣耀20pro哪个好?参数配置对比介绍

荣耀x10和荣耀20pro哪个好? 屏幕尺寸的话,荣耀x10比较大,单手难操控,荣耀20pro单手握持感比较好;最大的不同就是x10是升降摄像头,而20pro是挖孔,从屏幕观感来讲x10会更好,但是整台机器会更重; 来源&#…