关于“内网穿透”的一些知识

内网穿透的示意图:(下图引自:https://www.cnblogs.com/thinkingmore/p/15550667.html

 

 

-------------------------------------------

 

 

关于NAT的补充阅读(引自:https://www.cnblogs.com/thinkingmore/p/14317505.html

当联机的双方NAT类型有一方为Cone NAT时(以下前三种)才有机会建立P2P连接,如果双方都是Symmetric NAT,必然无法成功建立P2P连接
几种常见的NAT类型:

  1. Full Cone
  2. Restricted Cone
  3. Port Restricted Cone
  4. Symmetric NAT

结合上面的P2P条件,当两台设备所处网络的NAT类型均为 Symmetric NAT,所以无法建立P2P连接,只能通过服务器中转通信
基本总结如下:

    1. 双方中只要有一方是Full Cone,可以P2P直连;
    2. 双方都是Restricted Cone或Port Restricted Cone,这种情况可以打洞,通过服务器握手以后,双方的数据不再经过中继服务器;
    3. 一方为Restricted Cone,另一方为Symmetric NAT,可以打洞,通过N2N服务器握手以后,双方的数据不再经过服务端;
    4. 一方为端口Port Restricted Cone,另一方为Symmetric NAT,这种情况无法打洞,数据要走服务器中转;
    5. 双方都为Symmetric NAT,这种情况也是无法打洞的,数据要走服务器中转;

 

 

-------------------------------------------

 

 

 

需要进行内网穿透设备可以是NAT设备也可能是NAT设备+防火墙,当然也可能是其他的类型,比如:NAT设备+均衡负载+防火墙

上面给出了几种常见的NAT类型:

  1. Full Cone
  2. Restricted Cone
  3. Port Restricted Cone
  4. Symmetric NAT

但是在实际的NAT类型中除了上面这四个类型还有在这四个基础上的其他改进类型,但是上面的这四个类型基本是主要的类别了。

上面的这四个类型也被叫做:

  1. 完全锥型
  2. IP限制锥形
  3. 端口限制锥形
  4. 对称型

 

1. 完全锥型

 (示意图引自:https://zhuanlan.zhihu.com/p/457866704

 

上图中内网主机X,A、B、C是公网主机。

该种NAT设备NAT的地址映射表中包含4个关键的数据:
{ ‍ ‍   
  内网IP
  内网端口号
  映射的公网IP              
  映射的公网端口号
}

也就是说在该种NAT设备下,内网X主机只要使用某个内网端口号给外网主机发送过数据后,那么就可以在NAT设备的地址映射表中保存上面的四个数据,于是其他的外网主机都可以通过这四个数据中的“映射的公网IP+映射的公网端口号”来给内网的X主机对应的“内网IP+内网端口号”发送数据。

 

 

 

2. IP限制锥型NAT

 (示意图引自:https://zhuanlan.zhihu.com/p/457866704

 

上图中内网主机X,A、B、C是公网主机。

该种NAT设备NAT的地址映射表中包含5个关键的数据:
{
    内网IP
    内网端口号
    映射的公网IP
    映射的公网端口号
    被访问的外网IP地址
}

也就是说在该种NAT设备下,内网X主机使用某个内网端口号给外网主机发送过数据后,那么就可以在NAT设备的地址映射表中保存上面的5个数据,只有映射表记录中存在的被访问过的外网IP才可以通过这5个数据中的“映射的公网IP+映射的公网端口号”来给内网的X主机对应的“内网IP+内网端口号”发送数据。

 

 

 

 

3. 端口限制锥型

 (示意图引自:https://zhuanlan.zhihu.com/p/457866704

上图中内网主机X,A、B、C是公网主机。

该种NAT设备NAT的地址映射表中包含6个关键的数据:
{
  内网IP
  内网端口号
  映射的公网IP
  映射的公网端口号
  被访问的外网主机的IP地址
  被访问的外网主机的端口号
}
也就是说在该种NAT设备下,内网X主机使用某个内网端口号给外网主机发送过数据后,那么就可以在NAT设备的地址映射表中保存上面的6个数据,只有映射表记录中存在的“被访问过的外网IP+被访问过的外网IP对应的端口号”才可以通过这6个数据中的“映射的公网IP+映射的公网端口号”来给内网的X主机对应的“内网IP+内网端口号”发送数据。
 
 
 
 
 
 

4. 对称型NAT

 (示意图引自:https://zhuanlan.zhihu.com/p/457866704

 

上图中内网主机X,A、B、C是公网主机。

该种NAT设备NAT的地址映射表中包含6个关键的数据:
{
  内网IP
  内网端口号
  映射的公网IP
  映射的公网端口号
  被访问的外网主机的IP地址
  被访问的外网主机的端口号
}

对称型NAT和端口限制锥型NAT同样都是会在内网主机的一次对外网的数据发送中在NAT设备的地址映射表中保存6个数据,但是与端口限制锥型NAT不同的是对称型NAT在内网IP和内网端口号不变的情况下对不同的“被访问的外网主机的IP地址”或相同的“被访问的外网主机的IP地址”但是不同的“被访问的外网主机的端口号”都会使用不同的“映射的公网端口号”甚至是不同的“映射的公网IP”。

 

 
 

注意:

  1. NAT设备的地址映射表的记录有效时间大致为2分钟。
  2. “打洞”在NAT中是指内网主机主动对外网的数据发送以使NAT设备的地址映射表中可以保存记录,并通过这种方式使外网主机可以按照这个“地址映射关系”来对内网主机进行数据访问。

 

 

 

关于“NAT的四种类型”给出更加详细的介绍推荐:

NAT的四种类型以及类型探测

地址:

 

 

 

 

利用这些知识我们可以编写内网穿透的代理程序,比如fastnat就是采用下面的编程语言:

C++虚拟网卡、go语言做周边网络的编程、node.js做界面操作

 

 

-------------------------------------------

 

posted on   Angry_Panda  阅读(85)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2022-12-16 在网上买壁纸有多么坑
2018-12-16 如何使用 python3 将RGB 图片转换为 灰度图
2018-12-16 相似图片搜索的原理 (转载)
2018-12-16 相似图片搜索的原理(二) (转载)
2018-12-16 高斯模糊的算法 (转载)
2018-12-16 如何识别图像边缘? (转载)
2017-12-16 2017年6月 六级成绩 有感(致逝去的研究生生活)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示