NAT技术原理、使用场景

news2024/9/21 18:52:39

随着Internet的发展和网络应用的增多,有限的IPv4公有地址已经成为制约网络发展的瓶颈。为解决这个问题,NAT(Network Address Translation,网络地址转换)技术应需而生。
NAT技术主要用于实现内部网络的主机访问外部网络。一方面NAT缓解了IPv4地址短缺的问题,另一方面NAT技术让外网无法直接与使用私有地址的内网进行通信,提升了内网的安全性。
我们将了解NAT的技术背景, 学习不同类型NAT的技术原理、使用场景。

私网IP地址

公有地址:由专门的机构管理、分配,可以在Internet上直接通信的IP地址。
私有地址:组织和个人可以任意使用,无法在Internet上直接通信,只能在内网使用的IP地址。
A、B、C类地址中各预留了一些地址专门作为私有IP地址:
A类:10.0.0.0 ~ 10.255.255.255
B类:172.16.0.0 ~ 172.31.255.255
C类:192.168.0.0 ~ 192.168.255.255

图片

NAT技术原理

NAT:对IP数据报文中的IP地址进行转换,是一种在现网中被广泛部署的技术,一般部署在网络出口设备,例如路由器或防火墙上。

NAT的典型应用场景:在私有网络内部(园区、家庭)使用私有地址,出口设备部署NAT,对于“从内到外”的流量,网络设备通过NAT将数据包的源地址进行转换(转换成特定的公有地址),而对于“从外到内的”流量,则对数据包的目的地址进行转换。

通过私有地址的使用结合NAT技术,可以有效节约公网IPv4地址。

图片

静态NAT原理

静态NAT:每个私有地址都有一个与之对应并且固定的公有地址,即私有地址和公有地址之间的关系是一对一映射。
支持双向互访:私有地址访问Internet经过出口设备NAT转换时,会被转换成对应的公有地址。同时,外部网络访问内部网络时,其报文中携带的公有地址(目的地址)也会被NAT设备转换成对应的私有地址。

图片

静态NAT转换示例
图片

静态NAT配置介绍
1.方式一:接口视图下配置静态NAT

[Huawei-GigabitEthernet0/0/0] nat static global { global-address} inside {host-address }

2.方式二:系统视图下配置静态NAT

[Huawei] nat static global { global-address} inside {host-address }

配置命令相同,视图为系统视图,之后在具体的接口下开启静态NAT。

[Huawei-GigabitEthernet0/0/0] nat static enable

在接口下使能nat static功能。

静态NAT配置示例
图片

动态NAT原理
动态NAT:静态NAT严格地一对一进行地址映射,这就导致即便内网主机长时间离线或者不发送数据时,与之对应的公有地址也处于使用状态。为了避免地址浪费,动态NAT提出了地址池的概念:所有可用的公有地址组成地址池。

当内部主机访问外部网络时临时分配一个地址池中未使用的地址,并将该地址标记为“In Use”。当该主机不再访问外部网络时回收分配的地址,重新标记为“Not Use”。

图片

动态NAT转换示例 (1)
图片

动态NAT转换示例 (2)
图片

动态NAT配置介绍
1.创建地址池

[Huawei] nat address-group group-index start-address end-address

配置公有地址范围,其中group-index为地址池编号,start-address、end-address分别为地址池起始地址、结束地址。

2.配置地址转换的ACL规则

Huawei] acl number

[Huawei-acl-basic-number ] rule permit source source-address source-wildcard

配置基础ACL,匹配需要进行动态转换的源地址范围。

3.接口视图下配置带地址池的NAT Outbound

[Huawei-GigabitEthernet0/0/0] nat outbound acl-number address-group group-index [ no-pat ]

接口下关联ACL与地址池进行动态地址转换,no-pat参数指定不进行端口转换。

动态NAT配置示例
图片

NAPT原理
动态NAT选择地址池中的地址进行地址转换时不会转换端口号,即No-PAT(No-Port Address Translation,非端口地址转换),公有地址与私有地址还是1:1的映射关系,无法提高公有地址利用率。

NAPT(Network Address and Port Translation,网络地址端口转换):从地址池中选择地址进行地址转换时不仅转换IP地址,同时也会对端口号进行转换,从而实现公有地址与私有地址的1:n映射,可以有效提高公有地址利用率。

图片

NAPT转换示例 (1)
图片

NAPT转换示例 (2)
图片

NAPT配置示例
图片

Easy IP
Easy IP:实现原理和NAPT相同,同时转换IP地址、传输层端口,区别在于Easy IP没有地址池的概念,使用接口地址作为NAT转换的公有地址。

Easy IP适用于不具备固定公网IP地址的场景:如通过DHCP、PPPoE拨号获取地址的私有网络出口,可以直接使用获取到的动态地址进行转换。

图片

NAT Server使用场景
NAT Server:指定[公有地址:端口]与[私有地址:端口]的一对一映射关系,将内网服务器映射到公网,当私有网络中的服务器需要对公网提供服务时使用。

外网主机主动访问[公有地址:端口]实现对内网服务器的访问。

图片

NAT Server转换示例
图片

NAT Server配置示例
图片

在私有网络内使用私有地址,并在网络出口使用NAT技术,可以有效减少网络所需的IPv4公有地址数目,NAT技术有效地缓解了IPv4公有地址短缺的问题。

动态NAT、NAPT、Easy IP为私网主机访问公网提供源地址转换。

NAT Server实现了内网主机对公网提供服务。

静态NAT提供了一对一映射,支持双向互访。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDK8 新特性之新增的Optional类

目录 一:以前对null的处理方式 二:Optional类介绍 三:Optional的基本使用 Optional的高级使用 小结 一:以前对null的处理方式 Test public void test01() { String userName "凤姐"; // String userName null; …

十八、Gtk4-Stateful action

有些动作action有状态。状态的典型值是布尔值或字符串。但是,如果你愿意,也可以使用其他类型的状态。 具有状态的动作称为有状态的。 Stateful action without a paramete 有些菜单被称为切换菜单。例如,全屏菜单有一个状态,它…

在甲骨文云容器实例(Container Instances)上部署edge

甲骨文云推出了容器实例,这是一项无服务器计算服务,可以即时运行容器,而无需管理任何服务器。 今天我们尝试一下通过容器实例部署edge。 Step1. 创建容器实例 在甲骨文容器实例页面,单击"创建容器实例", …

审批工作流—ccflow

审批工作流—ccflow目录概述需求:设计思路实现思路分析1.java 代码分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challen…

LeetCode[547]省份数量

难度:中等题目:有 n个城市,其中一些彼此相连,另一些没有相连。如果城市 a与城市 b直接相连,且城市 b与城市 c直接相连,那么城市 a与城市 c间接相连。省份 是一组直接或间接相连的城市,组内不含其…

Leetcode:93. 复原 IP 地址(C++)

目录 问题描述: 实现代码与解析: 回溯: 原理思路: 问题描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。…

leetcode刷题记录总结-2.链表

文章目录一、重排列表[1. 奇偶链表](https://leetcode.cn/problems/odd-even-linked-list/solutions/)题解二、链表的增、删、改、查[203. 移除链表元素](https://leetcode.cn/problems/remove-linked-list-elements/)题解不简洁代码简洁代码707.设计链表题解不简洁代码优化后的…

mysql主从复制配置(windows和linux操作都有)

我是目录主从复制是什么?操作实践验证主从设置主从复制是什么? mysql主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台mysal数据库(slave,即从库)从另一台mysql数…

macOS Big Sur 11.7.3 (20G1116) 正式版 ISO、PKG、DMG、IPSW 下载

本站提供的 macOS Big Sur 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。 请访问原文链接:https://sysin.org/blog/macOS-Big-Sur/&#xff0…

【Python百日进阶-Web开发-Linux】Day236 - Win11安装Windows Subsystem for Android(WSA)

文章目录一、Win11运行安卓app前提条件二、Win11运行安卓app支持以下新特性三、Win11运行安卓app操作步骤3.1 修改定位3.2 开启VT虚拟化3.3 开启电脑的Hyper-V和虚拟机平台四、WSA下载4.1 百度网盘下载4.2 store.rg-adguard.net下载五、WSA安装(没有成功&#xff0c…

C++初阶--继承

目录 继承的概念 继承定义 继承基类成员访问方式 基类和派生类对象的赋值转换 继承中的作用域 派生类的默认成员函数 友元关系不能继承 基类static成员 菱形继承与菱形虚拟继承 虚拟继承解决数据冗余和二义性的原理 继承和组合 继承的概念 继承是类层次的复用。 继…

Golang 泛型学习

Golang 泛型 今天来学习下Golang中泛型的基础知识。使用泛型,开发者可以声明一个函数来适应不同类型的参数,避免由于参数类型不一致而声明多个处理逻辑类似的函数。在本教程中,将声明两个简单的非泛型函数,然后在单个泛型函数中实…

这些实体店直播必备技巧,新手直接套用就能火!

随着直播的受众越来越广、门槛越来越低,入局服装直播的实体店越来越多。对于服装厂商来说,服装产业链越靠下游毛利率越高,品牌商和销售商利润远高于加工生产商,约在40-50%,而服装制造商的毛利率仅在15%左右。而对于本土…

JDK8 新特性之收集Stream流中的结果

目录 一:Stream流中的结果到集合中 二:Stream流中的结果到数组中 三:对流中数据进行聚合计算 四:对流中数据进行分组 五:对流中数据进行多级分组 六:对流中数据进行分区 七:对流中数据进行拼接…

8.Java循环高级综合练习-无限循环和跳转控制语句,逢七过,平方根,判断是否为质数,猜数字小游戏

文章目录前言一、无限循环1.这三种循环中哪一种无限循环是最常用的呢?2.注意事项:二、跳转控制语句三、逢七过四、平方根五、判断该整数是否为一个质数六、猜数字小游戏保底机制总结前言 一、无限循环 1.这三种循环中哪一种无限循环是最常用的呢? 当然是右上角的while循环啦…

【若依】若依字典管理页面中列表按钮功能的实现

0. 功能实现描述 1. 代码实现 ScStfController.java /*** 查询员工证书* param stfId* param modelMap* return*/ RequiresPermissions("sc:stf:cert") GetMapping("/cert/{stfId}") public String detail(PathVariable("stfId") Long stfId, …

结构型模式-组合模式

1.概述 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树…

谷粒学院——Day19【项目部署】

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

Java中的hashCode,真的很容易弄懂

写这篇文章是因为在看hashMap源码时遇到有什么hashcode值,然后就去查,脑袋里面是有印象的,不就是在Object中有equals和hashcode方法嘛,这在学java基础的时候就遇到过,不过那时候无所谓,囫囵吞枣&#xff0c…

三、python基础语法进阶篇(黑马程序猿-python学习记录)

黑马程序猿的python学习视频:https://www.bilibili.com/video/BV1qW4y1a7fU/ 目录 一、文件操作 一、 文件的读取 1. 打开文件open() 2. 读取文件10个字节read(10) 3. 读取文件全部信息read() 4. 读取文件readLines() 5. 读取文件readLine() 6. for循环读取…