NAT网络地址转换与内网穿透

一、背景

        前一篇文章提到PCDN, 也就是p2p技术+CDN技术进行融合。 P2P技术有利于文件的快速分发。我们的CDN在控制节点分发数据的时候,向边缘节点传输数据,也是一种分发,还有各边缘节点强制同步数据等等,如果结合P2P技术进行整合,能更灵活,同时还降低了控制节点的压力。

        在研究PCDN的时候就发现了P2P技术中肯定绕不开的技术就是NAT网络地址转换技术,所以专门写一篇来回顾NAT的作用和内网穿透实现。

二、NAT技术

1、简介

        NAT 技术允许将一个 IP 地址域(如私有网络中的 IP 地址)转换为另一个 IP 地址域(如公有网络中的 IP 地址)。其主要作用是解决 IPv4 地址空间不足的问题,使得多个私有网络中的设备能够通过少数几个公有 IP 地址访问互联网,同时还能隐藏内部网络的拓扑结构,增强网络的安全性。

        早期NAT的出现是为了防止IPV4枯竭的一种延缓手段。 现在IPV4已经全部分配耗尽了。 我们上网不可能每个人都拿到一个IPV4, 所以需要将我们内网IP转换为一个公网IP才能上互联网,这里做转换工作的就是NAT。

2、地址转换方式和映射关系-分类

NAT(网络地址转换)主要有以下三种类型:

  • 静态 NAT
    • 原理:将内部网络中的每个私有 IP 地址与一个外部公有 IP 地址进行一对一的静态映射。这种映射关系是固定的,不会随着时间或网络流量的变化而改变。
    • 应用场景:适用于需要对外提供固定 IP 地址服务的设备,如企业内部的服务器,需要让外部用户能够通过固定的公网 IP 地址访问。
  • 动态 NAT
    • 原理:从一个公有 IP 地址池中动态地为内部网络中的设备分配公有 IP 地址。当内部设备需要访问外部网络时,NAT 设备会从地址池中选取一个未被使用的公有 IP 地址进行映射,并在使用完毕后将其释放回地址池,以便其他设备使用。
    • 应用场景:适用于内部网络中设备数量较多,但同时访问外部网络的设备数量相对较少的情况,通过动态分配可以有效地利用有限的公有 IP 地址资源。
  • 网络地址端口转换(NAPT)
    • 原理:也称为端口映射,它将内部网络中多个私有 IP 地址映射到同一个公有 IP 地址的不同端口上。通过端口号来区分不同的内部设备,使得多个内部设备可以共享一个公有 IP 地址同时访问外部网络。
    • 应用场景:这是最常见的 NAT 类型,广泛应用于家庭网络和小型企业网络中,以满足多个设备同时通过一个宽带连接访问互联网的需求。

此外,还有一些扩展的 NAT 类型,如静态 NAPT、动态 NAPT 等,它们都是在上述三种基本类型的基础上进行组合或优化,以满足不同的网络需求。

3、数据包地址转换的方向和目的-分类

1、基于数据包地址转换方向
  • SNAT:主要针对数据包的源地址进行转换。当内部网络中的设备访问外部网络时,SNAT 会将数据包的源 IP 地址从内部私有 IP 地址转换为外部公有 IP 地址,使得外部网络设备看到的是转换后的公有 IP 地址,从而实现内部设备对外部网络的访问。例如,在企业内部网络中,员工的电脑通过公司的防火墙访问互联网,防火墙就会使用 SNAT 将员工电脑的私有 IP 地址转换为公司申请的公有 IP 地址。
  • DNAT:侧重于对数据包的目的地址进行转换。当外部网络的设备想要访问内部网络的特定设备或服务时,DNAT 会将数据包的目的 IP 地址从外部可访问的公有 IP 地址转换为内部网络中实际提供服务的设备的私有 IP 地址,引导外部流量准确到达内部目标设备。比如,企业对外提供 Web 服务的服务器部署在内部网络,外部用户通过访问企业的公有 IP 地址来访问该 Web 服务,这时防火墙就会使用 DNAT 将外部用户请求的目的地址转换为内部 Web 服务器的私有 IP 地址。
2、基于地址转换目的
  • SNAT:目的主要是实现内部网络中多个设备共享少量公有 IP 地址访问外部网络,解决 IPv4 地址短缺问题,同时隐藏内部网络的拓扑结构和设备信息,增强网络安全性。因为外部网络只能看到经过 SNAT 转换后的公有 IP 地址,无法直接得知内部设备的真实 IP 地址和网络结构。
  • DNAT:主要目的是让外部网络能够访问内部网络中的特定服务器或服务。通过在边界设备(如防火墙、路由器)上配置 DNAT 规则,将外部的访问请求引导到内部相应的服务器上,使得内部网络的服务器可以对外提供服务,如 Web 服务、邮件服务等。

4、内网主机与外部网络通信的限制程度和映射规则-分类

1、NAT1(全锥形 , Full Cone

        属于限制最少的类型。内网主机使用一个固定的公网 IP 和端口进行所有外部通信,任何外部主机只要知道这个公网 IP 和端口,就能向内网主机发送数据

2、NAT2(IP 限制锥形 , IP - restricted ConeNAT)

        相比 NAT1 增加了请求源IP地址限制。内网主机使用一个固定的公网 IP 和端口进行所有外部通信,但只有内网主机曾向某外部主机发送过数据,该外部主机才能向内网主机发送数据,端口不受限。

        NAT2情况下,只有注册中心的这个公网IP才能往110.0.1.1:3389访问或者写入数据,注册中心请求的端口无限制。 其它IP一律拒绝 

3、NAT3(端口限制锥形, Port - restricted Cone NAT

        在 NAT2 的基础上又增加了端口限制。内网主机使用一个固定的公网 IP 和端口进行所有外部通信,只有内网主机曾向某外部主机的特定 IP 和端口发送过数据,该外部主机才能向内网主机发送数据,即 IP 和端口都受限。

        在NAT2的基础之上,限定了源客户端的端口, 只接受注册中心的9000传来的数据,就算是这个注册中心的IP, 不是9000端口都不行!

4、NAT4(对称型 NAT, Symmetric NAT

        限制最为严格。内网主机与每个外部主机通信时,会分配不同的公网 IP 和端口。外部主机只能在收到内网主机的数据后才能回传数据,内部地址每一次请求一个特定的外部地址,都可能会绑定到一个新的端口号,即请求不同的外部地址映射的端口号可能不同。

        NAT4最为严格,首先每当和不同外部主机通信都会使用不同端口(公网IP可能相同、可能不同) ,  端口和IP是动态分配的、不是固定的

        其次在NAT3的基础上,你只能与外部主机连接的端口进行通信,限制外部主机IP、端口。 并且还做了更为严格的数据过滤,例如会话绑定。

        NAT4基本就是只能源主机和目标外部主机的严格通信,第三方完全都插不进来。 安全性最高,开放性最低。

三、总结

        P2P需要解决的前提就是内网穿透问题, 也是难点问题, 因为大家上网都在局域网,正常情况下你是无法直接穿透内网与其它节点进行数据交互和通信的, 那必须要穿透内网才是发挥P2P的优势。

        因为现在运营商对P2P, PCDN管控很严格,很多地方都直接把上网的NAT改为NAT4级别,基本上你都无法来穿透内网或者说你要花费的成本变高了很多。

        之前用PCDN一些盒子来挂闲置流量赚取收益,现在越来越难。但是上有政策下有对策,还是有人能想出一些办法绕过这个被降为NAT4的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39940.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源宝藏】30天学会CSS - DAY9 第九课 牛顿摆动量守恒动画

以下是一份逐步拆解教程,带你从零理解并复刻这个牛顿摆(Pendulum of Newton)动画效果,这是一个经典的物理演示模型,现在通过纯 HTML 和 CSS 实现出来,视觉效果炫酷、结构简洁。 🎯 动画效果说明…

Chat2DB:一款强大的数据库管理工具,AI助力高效查询与分析

AI技术可谓是日新月异,其已经融入到社会的方方面面,今天就给大家分享一款数据库SQL客户端工具:Chat2DB。 1 简介 Chat2DB是一款开源的数据库管理工具,集成了AI 智能辅助功能,支持自然语言生成 SQL,帮助开发…

安全上网沙箱:多方面解决政企私的上网问题

在数字化的浪潮中,网络已成为我们工作与生活不可或缺的一部分。然而,网络的便捷也伴随着诸多安全隐患,尤其是对于企业、个人以及政企机构而言,安全上外网成为了至关重要的课题。 隔离保护:构建安全堡垒 沙箱技术在内网…

【react18】react项目使用mock模拟后台接口

前后端分离项目,后端还没有接口的时候,前端可以使用mockjs的技术实行假数据的模拟。这里使用的是mock的库msw实现这个业务. MSW msw是mock的工具,官网地址是在这里 使用步骤 1.安装msw npm install mswlatest --save-dev2.新建存放mock接…

2、pytest核心功能(进阶用法)

目录 1、标记(Markers): 自定义插件 内置标记 2、夹具(Fixtures): 夹具得用法 夹具作用域 3、钩子(hook): 这篇是最重要的 测试文件中需要用到的 总的来说 有以下…

《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型同步与异步同步异步对比同步 I/O 的缺点异步 I/O 的优点 理解异步通知 I/O 模型实现异步通知 I/O 模型WSAEventSelect 函数和通知…

【2025】基于springboot+vue的医院在线问诊系统设计与实现(源码、万字文档、图文修改、调试答疑)

基于Spring Boot Vue的医院在线问诊系统设计与实现功能结构图如下: 课题背景 随着互联网技术的飞速发展和人们生活水平的不断提高,传统医疗模式面临着诸多挑战,如患者就医排队时间长、医疗资源分配不均、医生工作压力大等。同时,…

报错 standard_init_linux.go:228: exec user process caused: exec format error

docker logs 容器名 报错: standard_init_linux.go:228: exec user process caused: exec format error 或者 standard_init_linux.go:228: exec user process caused: input/output error 排查思路 1、检查源镜像的框架是否正确,是否amd64&#x…

26考研——图_图的存储(6)

408答疑 文章目录 二、图的存储图的存储相关概念邻接矩阵存储方式邻接矩阵的定义顶点的度计算邻接矩阵的特点邻接矩阵的局限性 应用场景邻接矩阵的幂次意义(了解即可) 邻接表存储方式邻接表定义邻接表结构邻接表的特点 邻接矩阵和邻接表的适用性差异十字…

机器学习(八)

一,基于协同过滤的推广算法: 算法原理: 基于用户的协同过滤(计算用户相似度→找出相似用户→根据相似用户的喜好推荐物品) 基于物品的协同过滤(计算物品相似度→找出用户喜欢的物品→推荐相似物品) 构造矩阵进行分解(将用户-物品评分矩阵分解…

云原生算力引擎:分布式推理的流体动力学

引言:算力黑洞的引力扰动 OpenAI推理集群日处理4.5亿次请求,CUDA 12.3实现μs级张量切换。特斯拉Dojo超算芯片间延迟0.5ns,阿里巴巴PAI平台节省58%训练时长。HuggingFace模型库下载量突破3亿次,AWS Inferentia芯片能效比提升8倍。…

流量分析2

一,webshell流量 [GKCTF 2021]签到 先看协议分级,大部分是tcp,里面有http的基于的行文本数据占了很大的比重,看看里面有什么 过滤http的流量 点击一条流量,里面的内容进去后面有基于行的文本数据, 先解he…

解锁智能协作:蓝耘平台如何打破应用壁垒,实现无缝联动

在当今快速发展的数字化时代,企业面临着越来越复杂的应用架构与系统集成挑战。传统的孤立系统已无法满足现代企业对于高效协作与数据共享的需求,因此,如何实现不同应用系统间的无缝联动,成为了数字化转型的关键课题。蓝耘平台作为…

3月25号

添加图片的一些例子: // 创建一个二维数组,用来管理数据int[][] data new int[4][4]; // 记录空白方块的位置int x0;int y0; // 定义一个变量,记录当前展示图片的路径String path"E:\\java\\jigsawgame\\路飞\\路飞"; // 加载图片细节: // …

单片机和微控制器知识汇总——《器件手册--单片机、数字信号处理器和可编程逻辑器件》

目录 四、单片机和微控制器 4.1 单片机(MCU/MPU/SOC) 一、定义 二、主要特点 三、工作原理 四、主要类型 五、应用领域 六、选型与设计注意事项 七、发展趋势 4.2 数字信号处理器(DSP/DSC) ​编辑​编辑 一、定义 二、工作原理 三、结构特点 四、应用领域 五、选型与设计注…

迷宫问题——(java)(bfs)

2.走迷宫 - 蓝桥云课 bfs :我的理解就是按层数便利,便利完一层再遍历下一层 bfs:一般用来求解权相等的最短路径和最小操作数的问题 一般使用队列来实现 1.初始化队列 先将起始节点放入队列中 2.从队列中取出一个没有访问过的节点,将该节点的访问状态…

Axure大屏可视化模板:赋能多领域,开启数据展示新篇章

在当今这个数据爆炸的时代,数据已经成为各行各业的核心资产。然而,如何高效、直观地展示数据,并将其转化为有价值的决策依据,成为了许多企业和组织面临的共同挑战。Axure大屏可视化模板,作为一款强大的数据展示工具&am…

Linux--进程控制

ok&#xff0c;我们今天学习Linux中的进程控制&#xff08;进程创建、终止、等待、替换&#xff09; 进程创建 fork函数 在linux中fork函数是⾮常重要的函数&#xff0c;它从已存在进程中创建⼀个新进程。新进程为子进程&#xff0c;⽽原进程为父进程。 #include <unist…

【开源宝藏】用 JavaScript 手写一个丝滑的打字机动画效果

你当前项目实现了一个非常丝滑的 打字机文字效果动画&#xff0c;使用的是自定义的 typical.js 脚本。下面我将给出一份逐步拆解的中文教程&#xff0c;帮你或其他初学者快速上手并自定义这个打字效果。 ✨ 最终效果 打开页面后&#xff0c;中央会逐字显示&#xff1a; Hello…

UE4学习笔记 FPS游戏制作17 让机器人持枪 销毁机器人时也销毁机器人的枪 让机器人射击

添加武器插槽 打开机器人的Idle动画&#xff0c;方便查看武器位置 在动画面板里打开骨骼树&#xff0c;找到右手的武器节点&#xff0c;右键添加一个插槽&#xff0c;重命名为RightWeapon&#xff0c;右键插槽&#xff0c;添加一个预览资产&#xff0c;选择Rifle&#xff0c;根…