首页 > 其他分享 >什么是NAT?NAT类型有哪些?

什么是NAT?NAT类型有哪些?

时间:2024-01-29 18:32:42浏览次数:18  
标签:哪些 报文 IP地址 私网 地址 NAT 公网 类型

晚上好,我的网工朋友。
NAT是一种地址转换技术,它可以将IP数据报文头中的IP地址转换为另一个IP地址,并通过转换端口号达到地址重用的目的。
在大多数网络环境中,我们都需要通过 NAT 来访问 Internet。
NAT作为一种缓解IPv4公网地址枯竭的过渡技术,由于实现简单,得到了广泛应用。
今天就和你聊一聊NAT,从NAT的作用到类型,再到它的工作原理和使用方法,这篇文章都给你说清楚。

今日文章阅读福利:《网工最全技术图谱(2024最新版)》
私信我,发送暗号“网络技术”,领取这份2024最新版网工经典技术思维导图,替你理清技术思路,拨开技术迷雾。


01 NAT解决了什么问题?


随着网络应用的增多,IPv4地址枯竭的问题越来越严重。

尽管IPv6可以从根本上解决IPv4地址空间不足问题,但目前众多网络设备和网络应用大多是基于IPv4的;

因此,在IPv6广泛应用之前,使用一些过渡技术(如CIDR、私网地址等)是解决这个问题的主要方式,NAT就是这众多过渡技术中的一种。


当私网用户访问公网的报文到达网关设备后,如果网关设备上部署了NAT功能,设备会将收到的IP数据报文头中的IP地址转换为另一个IP地址,端口号转换为另一个端口号之后转发给公网。

在这个过程中,设备可以用同一个公网地址来转换多个私网用户发过来的报文,并通过端口号来区分不同的私网用户,从而达到地址复用的目的。

早期的NAT是指Basic NAT,Basic NAT在技术上实现比较简单,只支持地址转换,不支持端口转换。

因此,Basic NAT只能解决私网主机访问公网问题,无法解决IPv4地址短缺问题。

后期的NAT主要是指网络地址端口转换NAPT(Network Address Port Translation),NAPT既支持地址转换也支持端口转换,允许多台私网主机共享一个公网IP地址访问公网,因此NAPT才可以真正改善IP地址短缺问题。


02 NAT的类型


根据NAT转换是对报文中的源地址进行转换还是对目的地址进行转换,NAT可以分为源NAT、目的NAT和双向NAT,下面我分别给你说说这三种NAT类型。


01 源NAT

源NAT在NAT转换时,仅对报文中的源地址进行转换,主要应用于私网用户访问公网的场景。

当私网用户主机访问Internet时,私网用户主机发送的报文到达NAT设备后,设备通过源NAT技术将报文中的私网IPv4地址转换成公网IPv4地址,从而使私网用户可以正常访问Internet。

根据转换时是否同时转换源端口号,源NAT可以细分为如下几种类型,详见下图。

什么是NAT?NAT类型有哪些?_端口号


02 目的NAT

目的NAT在NAT转换时,仅对报文中的目的地址和目的端口号进行转换,主要应用于公网用户访问私网服务的场景。

当公网用户主机发送的报文到达NAT设备后,设备通过目的NAT技术将报文中的公网IPv4地址转换成私网IPv4地址,从而使公网用户可以使用公网地址访问私网服务。@网 络 工 程 师 俱 乐 部

根据转换前后的地址是否存在一种固定的映射关系,目的NAT可以细分为如下几种类型,详见下图。

什么是NAT?NAT类型有哪些?_NAT_02


03 双向NAT

双向NAT指的是在转换过程中同时转换报文的源信息和目的信息。双向NAT不是一个单独的功能,而是源NAT和目的NAT的组合。

双向NAT是针对同一条流,在其经过设备时同时转换报文的源地址和目的地址。

双向NAT主要应用在同时有外网用户访问内部服务器和私网用户访问内部服务器的场景。


04 STUN中定义的NAT类型

在STUN标准中,根据私网IP地址和端口到NAT出口的公网IP地址和端口的映射方式,把NAT分为如下四种类型,详见下图。

什么是NAT?NAT类型有哪些?_NAT_03

· Full Cone NAT(完全锥型NAT)

所有从同一个私网IP地址和端口(IP1:Port1)发送过来的请求都会被映射成同一个公网IP地址和端口(IP:Port)。

并且,任何外部主机通过向映射的公网IP地址和端口发送报文,都可以实现和内部主机进行通信。

这是一种比较宽松的策略,只要建立了私网IP地址和端口与公网IP地址和端口的映射关系,所有的Internet上的主机都可以访问该NAT之后的主机。


· Restricted Cone NAT(限制锥型NAT)

所有从同一个私网IP地址和端口(IP1:Port1)发送过来的请求都会被映射成同一个公网IP和端口号(IP:Port)。

与完全锥型NAT不同的是,当且仅当内部主机之前已经向公网主机发送过报文,此时公网主机才能向私网主机发送报文。


· Port Restricted Cone NAT(端口限制锥型NAT)

与限制锥型NAT很相似,只不过它包括端口号。

也就是说,一台公网主机(IP2:Port2)想给私网主机发送报文,必须是这台私网主机先前已经给这个IP地址和端口发送过报文。


· Symmetric NAT(对称NAT)

所有从同一个私网IP地址和端口发送到一个特定的目的IP地址和端口的请求,都会被映射到同一个IP地址和端口。

如果同一台主机使用相同的源地址和端口号发送报文,但是发往不同的目的地,NAT将会使用不同的映射。

此外,只有收到数据的公网主机才可以反过来向私网主机发送报文。

这和端口限制锥型NAT不同,端口限制锥型NAT是所有请求映射到相同的公网IP地址和端口,而对称NAT是不同的请求有不同的映射。


03 NAT是如何工作的?


根据前面的分类,我们分别从源NAT和目的NAT中各选一种NAT为代表,说说其工作原理。

其他类型的NAT虽然在转换时,转换的内容有细微差别,但是工作原理都相似,不再重复介绍。

此外,双向NAT是源NAT和目的NAT的组合,双向NAT的工作原理也不再重复介绍。


01 NAPT工作原理

NAPT在进行地址转换的同时还进行端口转换,可以实现多个私网用户共同使用一个公网IP地址上网。

NAPT根据端口来区分不同用户,真正做到了地址复用。

什么是NAT?NAT类型有哪些?_NAT_04


当Host访问Web Server时,设备的处理过程如下:

  • 设备收到Host发送的报文后查找NAT策略,发现需要对报文进行地址转换。
  • 设备根据源IP Hash算法从NAT地址池中选择一个公网IP地址,替换报文的源IP地址,同时使用新的端口号替换报文的源端口号,并建立会话表,然后将报文发送至Internet。
  • 设备收到Web Server响应Host的报文后,通过查找会话表匹配到步骤2中建立的表项,将报文的目的地址替换为Host的IP地址,将报文的目的端口号替换为原始的端口号,然后将报文发送至Intranet。


02 NAT Server工作原理

使用NAT Server时,需要先在设备上配置公网地址和私网地址的固定映射关系。配置完成后,设备将会生成Server-Map表项,存放公网地址和私网地址的映射关系。

该表项将一直存在除非NAT Server的配置被删除。

什么是NAT?NAT类型有哪些?_NAT_05

内部Server的私网IPv4地址为192.168.1.2/24,对外的公网IPv4地址为1.1.1.10,端口号都为80,它们之间的映射关系在设备上已提前配置好。


当Host访问Server时,设备的处理过程如下:

  • 设备收到Internet上用户访问1.1.1.10的报文的首包后,查找并匹配到Server-Map表项,将报文的目的IP地址转换为192.168.1.2。
  • 设备建立会话表,然后将报文发送至Intranet。
  • 设备收到Server响应Host的报文后,通过查找会话表匹配到步骤2中建立的表项,将报文的源地址替换为1.1.1.10,然后将报文发送至Internet。
  • 后续Host继续发送给Server的报文,设备都会直接根据会话表项的记录对其进行转换,而不会再去查找Server-map表项。


04 如何使用NAT?


前面已经给你说了不同的NAT类型适用于不同的应用场景。下面给你说说几种典型的NAT应用,帮助你使用NAT。


01 私密用户通过NAPT访问Internet

在许多小区、学校和企业的私网规划中,由于公网地址资源有限,通常给私网用户分配私网IPv4地址。

此时,可以配置源NAT来实现私网用户访问Internet。用户可以根据自己拥有的公网IPv4地址的个数,选择使用NAPT或者Easy IP。

当用户拥有的公网IP地址个数较多时,配置了NAT设备出接口的IP地址和其他应用之后,还有可用的空闲公网IP地址时,可以选择NAPT。

NAPT使用地址池内的IPv4地址作为私网主机转换后的公网IPv4地址。

如下图所示,在设备上配置NAPT,实现私网主机访问Internet功能。

什么是NAT?NAT类型有哪些?_NAT_06


02 私网用户通过Easy IP访问Internet

当用户拥有的公网IPv4地址个数较少时,配置了NAT设备出接口的IPv4地址和其他应用之后,没有可用的空闲公网IPv4地址时,可以选择Easy IP。

Easy IP使用出接口的IPv4地址作为私网主机转换后的公网IPv4地址。

如下图所示,在设备上配置Easy IP,实现私网主机访问Internet功能。

什么是NAT?NAT类型有哪些?_网络工程师_07


03 公网用户通过NAT Server访问私网服务器

在某些场合,私网中有一些服务器需要向公网用户提供服务,比如私网中部署的一些Web服务器、FTP服务器等,NAT支持这样的应用,此时可以配置NAT Server来实现公网用户访问私网服务器。

如下图所示,在设备上配置NAT Server,固定“公网IP地址+端口号”与“私网IP地址+端口号”间的映射关系,实现公网主机通过该映射关系访问私网服务器功能。

什么是NAT?NAT类型有哪些?_华为认证_08


整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

标签:哪些,报文,IP地址,私网,地址,NAT,公网,类型
From: https://blog.51cto.com/u_15281548/9471796

相关文章

  • 视频号的互动类型、引流与变现
    视频号的互动类型:1、引导型互动:影响搜索排名的关键在于账号发布的视频数、点赞数和评论数。通过在动态内容中使用引导性话语或提问,可以激发粉丝的互动积极性,增加评论和点赞的几率。2、主动与评论用户互动:当用户评论了你的视频/图文时,挑选优质评论进行回复,以增加粉丝粘性。主动回复......
  • vmware nat模式详解
    vmwarenat模式主机和虚拟机是怎么联系,怎么上网的?关于natnat主要解决虚拟机上外网问题,虚拟机通过nat服务将内网地址和主机的wan口地址进行转换当虚拟机需要上网的时候,nat就会将数据包nat转换,然后从主机的wan口出去,和vm8虚拟网卡无光,关闭vm8虚拟机还是可以上网,只是无法进行内网......
  • OpenHarmony—ArkTS限制throw语句中表达式的类型
    规则:arkts-limited-throw级别:错误ArkTS只支持抛出Error类或其派生类的实例。禁止抛出其他类型(例如number或string)的数据。TypeScriptthrow4;throw'';thrownewError();ArkTSthrownewError();限制省略函数返回类型标注规则:arkts-no-implicit-return-types级别:错......
  • 面相对象之多态和鸭子类型
    面相对象之多态和鸭子类型多态指的是一类事物有多种形态一、多态动态绑定(多态性)多态动态绑定在继承的背景下使用时,有时也称为多态性多态性是指在不考虑实例类型的情况下使用实例在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息不同的对象在接收......
  • [Typescript] Native ES module support
    Node.js13.2.0introducedsupportfornativeESmodules.Thismeansyoucannativelyruncodecontainingthinglike import{Foo}from'bar',usetop-level await andmore!Howtounambiguouslyindicatewhichtypeofmoduleyou’reauthoringFil......
  • 四、python数据类型的性能
    四、python数据类型的性能比较列表list和字典dict两种内置数据类型上各种操作大O数量级两种都属于容器,都是可变类型。类型listdict索引自然数i不可变类型值key添加append/extend/insertb[k]=v删除pop/removepop更新a[i]=vb[k]=v正查a[i]/a[i......
  • 保温杯到欧洲需要哪些认证
    保温杯出口欧洲需要做CE认证保温杯CE认证的流程:1.申请咨询:(1)填写申请表(2)申请公司信息表(3)提供保温杯产品资料。2.费用报价:根据所提供的资料确定执行指令标准及相关测试项目给客户以合理的报价。3.客户付款:申请人确认报价后,签订立案申请表及服务协议并交付收款。4.工厂审核及测试:根据......
  • Jenkins的部署过程,从输入分支名开始,后台都经历了哪些步骤?
    前言大家好,我是chowley,Jenkins是我们QA常用的环境部署工具,今天我来总结一下,从我们输入分支名开始,它都经历了哪些流程?本文将深入探讨Jenkins的部署过程,从分支输入到后台处理的每个关键步骤。整体流程Jenkins作为一个流行的开源持续集成和持续交付工具,它的部署过程涉及多个关键步......
  • js在fori循环中根据索引删除元素时,应该注意哪些问题
    在for循环中根据索引删除数组元素时,应当特别注意以下问题:直接修改循环变量:在JavaScript或其他一些语言中,如果你直接使用for循环遍历数组并删除当前迭代的元素,将会导致索引错乱。因为当你删除一个元素后,数组的长度会减小,但循环的索引并不会因此自动调整。索引越界:......
  • [转]TypeScript类型编程中的extends和infer示例解析
    转自;https://www.jb51.net/javascript/294261vgi.htm TypeScript类型编程中的extends和infer示例解析 −目录引文extends条件判断约束参数类型约束infer推导的局部变量类型类型转换infer组合使用ReturnTypeParameters引文在刚接触TypeScript的时候,......