NAT转换是怎么工作的?

news2024/7/5 0:32:26

前言

对象: 服务器S,NAT设备,用户设备C1,用户设备C2

用户C1向服务器S发起一个HTTP请求,经过NAT转化,服务器收到并作出响应,用户C1收到响应。

问题来了,NAT是怎么知道这个响应是给用户C1而不是C2的呢?

NAT工作原理

IP 地址中预留了 3 个私有地址网段,在私有网络内,可以任意使用。

在这里插入图片描述
其余的 IP 地址可以在互联网上使用,由 IANA 统一管理,称为公网地址

在这里插入图片描述
NAT 解决了 IPv4 地址不够用的问题,另外 NAT 屏蔽了私网用户真实地址,提高了私网用户的安全性。

典型的 NAT 组网模型,网络通常是被划分为私网和公网两部分,各自使用独立的地址空间。私网使用私有地址 10.0.0.0/24 ,而公网使用公网地址。为了让主机 AB 访问互联网上的服务器 Server ,需要在网络边界部署一台 NAT 设备用于执行地址转换。NAT 设备通常是路由器防火墙

在这里插入图片描述

基本 NAT

基本 NAT 是最简单的一种地址转换方式,它只对数据包的 IP 层参数进行转换,它可分为静态 NAT动态 NAT

静态 NAT 是公网 IP 地址和私有 IP 地址有一对一的关系,一个公网 IP 地址对应一个私有 IP 地址,建立和维护一张静态地址映射表。

动态 NAT 是公网 IP 地址和私有 IP 地址有一对多的关系,同一个公网 IP 地址分配给不同的私网用户使用,使用时间必须错开。它包含一个公有 IP 地址池和一张动态地址映射表。

举个动态 NAT 栗子

私网主机 A( 10.0.0.1 )需要访问公网的服务器 Server( 61.144.249.229 ),在路由器 RT 上配置 NAT ,地址池为 219.134.180.11 ~ 219.134.180.20 ,地址转换过程如下:

在这里插入图片描述
A 向 Server 发送报文,网关是 10.0.0.254 ,源地址是 10.0.0.1 ,目的地址是 61.144.249.229 。

在这里插入图片描述
RT 收到 IP 报文后,查找路由表,将 IP 报文转发至出接口,由于出接口上配置了 NAT ,因此 RT 需要将源地址 10.0.0.1 转换为公网地址。

在这里插入图片描述
RT 从地址池中查找第一个可用的公网地址 219.134.180.11 ,用这个地址替换数据包的源地址,转换后的数据包源地址为 219.134.180.11 ,目的地址不变。同时 RT 在自己的 NAT 表中添加一个表项,记录私有地址 10.0.0.1 到 公网地址 219.134.180.11 的映射。RT 再将报文转发给目的地址 61.144.249.229 。

在这里插入图片描述
Server 收到报文后做相应处理。
Server 发送回应报文,报文的源地址是 61.144.249.229 ,目的地址是 219.134.180.11 。

在这里插入图片描述
RT 收到报文,发现报文的目的地址 219.134.180.11 在 NAT 地址池内,于是检查 NAT 表,找到对应表项后,使用私有地址 10.0.0.1 替换公网地址 219.134.180.11,转换后的报文源地址不变,目的地址为 10.0.0.1 。RT 在将报文转发给 A 。

在这里插入图片描述
A 收到报文,地址转换过程结束。

在这里插入图片描述
如果 B 也要访问 Server ,则 RT 会从地址池中分配另一个可用公网地址 219.134.180.12 ,并在 NAT 表中添加一个相应的表项,记录 B 的私有地址 10.0.0.2 到公网地址 219.134.180.12 的映射关系。

在这里插入图片描述

NAPT

在基础 NAT 中,私有地址和公网地址存在一对一地址转换的对应关系,即一个公网地址同时只能分配给一个私有地址。它只解决了公网和私网的通信问题,并没有解决公网地址不足的问题。

在这里插入图片描述
**NAPT( Network Address Port Translation )**对数据包的 IP 地址、协议类型、传输层端口号同时进行转换,可以明显提高公网 IP 地址的利用率。

在这里插入图片描述
举个栗子

私网主机 A( 10.0.0.1 )需要访问公网的服务器 Server 的 WWW 服务( 61.144.249.229 ),在路由器 RT 上配置 NAPT ,地址池为 219.134.180.11 ~ 219.134.180.20 ,地址转换过程如下:

A 向 Server 发送报文,网关是 RT( 10.0.0.254 ),源地址和端口是 10.0.0.1:1024 ,目的地址和端口是 61.144.249.229:80 。

在这里插入图片描述
RT 收到 IP 报文后,查找路由表,将 IP 报文转发至出接口,由于出接口上配置了 NAPT ,因此 RT 需要将源地址 10.0.0.1:1024 转换为公网地址和端口。

RT 从地址池中查找第一个可用的公网地址 219.134.180.11 ,用这个地址替换数据包的源地址,并查找这个公网地址的一个可用端口,例如 2001 ,用这个端口替换源端口。转换后的数据包源地址为 219.134.180.11:2001 ,目的地址和端口不变。同时 RT 在自己的 NAT 表中添加一个表项,记录私有地址 10.0.0.1:1024 到 公网地址 219.134.180.11:2001 的映射。RT 再将报文转发给目的地址 61.144.249.229 。

在这里插入图片描述
Server 收到报文后做相应处理。

Server 发送回应报文,报文的源地址是 61.144.249.229:80 ,目的地址是 219.134.180.11:2001 。

在这里插入图片描述
RT 收到报文,发现报文的目的地址在 NAT 地址池内,于是检查 NAT 表,找到对应表项后,使用私有地址和端口 10.0.0.1:1024 替换公网地址 219.134.180.11:2001,转换后的报文源地址和端口不变,目的地址和端口为 10.0.0.1:1024 。RT 再将报文转发给 A 。

在这里插入图片描述
A 收到报文,地址转换过程结束。

如果 B 也要访问 Server ,则 RT 会从地址池中分配同一个公网地址 219.134.180.11 ,但分配另一个端口 3001 ,并在 NAT 表中添加一个相应的表项,记录 B 的私有地址 10.0.0.2:1024 到公网地址 219.134.180.12:3001 的映射关系。

在这里插入图片描述

Easy IP

在标准的 NAPT 配置中需要创建公网地址池,也就是必须先知道公网 IP 地址的范围。而在拨号接入的上网方式中,公网 IP 地址是由运营商动态分配的,无法事先确定,标准的 NAPT 无法做地址转换。要解决这个问题,就要使用 Easy IP

Easy IP 又称为基于接口的地址转换。在地址转换时,Easy IP 的工作原理与 NAPT 相同,对数据包的 IP 地址、协议类型、传输层端口号同时进行转换。但 Easy IP 直接使用公网接口的 IP 地址作为转换后的源地址。Easy IP 适用于拨号接入互联网,动态获取公网 IP 地址的场合。

在这里插入图片描述
Easy IP 无需配置地址池,只需要配置一个 ACL(访问控制列表),用来指定需要进行 NAT 转换的私有 IP 地址范围。

NAT Server

从基本 NAT 和 NAPT 的工作原理可知,NAT 表项由私网主机主动向公网主机发起访问而生成,公网主机无法主动向私网主机发起连接。因此 NAT 隐藏了内部网络结构,具有屏蔽主机的作用。但是在实际应用中,内网网络可能需要对外提供服务,例如 Web 服务,常规的 NAT 就无法满足需求了。

为了满足公网用户访问私网内部服务器的需求,需要使用 NAT Server 功能,将私网地址和端口静态映射成公网地址和端口,供公网用户访问。

在这里插入图片描述
举个栗子

A 的私网地址为 10.0.0.1 ,端口 8080 提供 Web 服务,在对公网提供 Web 服务时,要求端口号为 80 。在 NAT 设备上启动 NAT Server 功能,将私网 IP 地址和端口 10.0.0.1:8080 映射成公网 IP 地址和端口 219.134.180.11:80 ,这样公网主机 C 就可以通过 219.134.180.11:80 访问 A 的 Web 服务。

NAT ALG

基本 NAT 和 NAPT 只能识别并修改 IP 报文中的 IP 地址和端口号信息,无法修改报文内携带的信息,因此对于一些 IP 报文内携带网络信息的协议,例如 FTP 、DNS 、SIP 、H.323 等,是无法正确转换的。

ALG 能够识别应用层协议内的网络信息,在转换 IP 地址和端口号时,也会对应用层数据中的网络信息进行正确的转换。

举个栗子:ALG 处理 FTP 的 Active 模式

FTP 是一种基于 TCP 的协议,用于在客户端和服务器间传输文件。FTP 协议工作时建立 2 个通道:Control 通道和 Data 通道。Control 用于传输 FTP 控制信息,Data 通道用于传输文件数据。

私网 A( 10.0.0.1 )访问公网 Server( 61.144.249.229 )的 FTP 服务,在 RT 上配置 NAPT,地址池为 219.134.180.11 ~ 219.134.180.20 ,地址转换过程如下:

在这里插入图片描述
A 发送到 Server 的 FTP Control 通道建立请求,报文源地址和端口为 10.0.0.1:1024 ,目的地址和端口为 61.144.249.229:21 ,携带数据是 “ IP = 10.0.0.1 port=5001 ”,即告诉 Server 自己使用 TCP 端口 5001 传输 Data。

在这里插入图片描述
RT 收到报文,建立 10.0.0.1:1024 到 219.134.180.11:2001 的映射关系,转换源 IP 地址和 TCP 端口。根据目的端口 21 ,RT 识别出这是一个 FTP 报文,因此还要检查应用层数据,发现原始数据为 “ IP = 10.0.0.1 port=5001 ”,于是为 Data 通道 10.0.0.1:5001 建立第二个映射关系:10.0.0.1:5001 到 219.134.180.11:2002 ,转换后的报文源地址和端口为 219.134.180.11:2001 ,目的地址和端口不变,携带数据为 “ IP = 219.134.180.11 port=2002 ”。

在这里插入图片描述
Server 收到报文,向 A 回应 command okay 报文,FTP Control 通道建立成功。同时 Server 根据应用层数据确定 A 的 Data 通道网络参数为 219.134.180.11:2002 。

A 需要从 FTP 服务器下载文件,于是发起文件请求报文。Server 收到请求后,发起 Data 通道建立请求,IP 报文的源地址和端口为 61.144.249.229:20 ,目的地址和端口为 219.134.180.11:2002,并携带 FTP 数据。

在这里插入图片描述

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

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

相关文章

配电室实现智能化用电管理平台的搭建构思

1 宝安区水务现状 河流基本情况:宝安区共有66条河涌,66条河涌分属茅洲河及珠江口沿海河涌两大水系,总长254km,流域总面积532km2。全区水环境状况有以下几个特点:一是水质污染严重,主要污染物为氨氮、总磷和阴离子表面…

利用虚拟机建ITtools

网上给的虚拟机多数都是VMX格式的封包,而我这次用的是ovf 我先把虚拟机在导出为ovf 生成了三个文件 去服务器上创建虚拟机,选择从OVF或OVA文件部署虚拟机,点下一页 给虚拟机起个名字 把相应的文件扡到里面去(这里生成的四个文件中…

(React生命周期)前端八股文修炼Day8

一 React的生命周期有哪些 React组件的生命周期可以分为三个主要阶段:挂载(Mounting)、更新(Updating)和卸载(Unmounting)。React类组件的生命周期方法允许你在组件的不同阶段执行代码。 挂载…

第十二天--二维数组的彻底解刨--地址

1.二维数组我们用父子的地址来称呼二维数组的地址 比如arr[3][4] 这里的arr是二维数组的首地址,也是父数组的首地址,也是子数组的首地址 arr1父数组的地址偏移1,实际上是偏移了4*416个字节 arr[0]是子数组的首地址,arr[0]1是子数…

Vue3---基础2(component)

主要讲解 component 的创建 以及vue插件的安装 Vue.js Devtools 为谷歌浏览器的Vue插件,可以在调试工具内查看组件的数据等 下载 有两种下载方式 1. 谷歌应用商店 打开Chrome应用商店去下载,这个方法需要魔法 2. 极简插件 极简插件官网_Chrome插件下载_…

OpenC910 datasheet 2.0 翻译

概述 C910是由THEAD半导体有限公司开发的一款RISC-V兼容的64位高性能处理器。它通过架构和微架构创新,在控制流、计算和频率方面提供行业领先的性能。C910处理器基于RV64GC指令集,并实现了XIE(XuanTie指令扩展)技术。C910采用先进…

Python自动化测试怎么去学习?熬夜7天整理出这一份3000字学习指南!

一、Python常用领域 Python用于简单脚本编程,如编写2048小游戏或12306的自动抢票软件;Python用于系统编程,如开发系统应用;Python用于开发网络爬虫;网络爬虫的用途是进行数据采集,也就是将互联网中的数据采…

OSPF中配置静态路由负载分担实验简述

OSPF中配置静态路由负载分担 实验简述 在静态路由负载分担中,多个路由器被配置为共享负载的目标,以实现流量的均衡分配。 到达目的地有N条相同度量值的路径,默认值60,N条路由是等价路由,数据报文在N条链路上轮流发送。…

力扣刷题 二叉树遍历的统一迭代法

题干 给定一个二叉树的根节点 root ,返回 它的 前中后序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入:root […

C++设计模式:构建器模式(九)

1、定义与动机 定义:将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化) 动机: 在软件系统中,有时候面临着“一个复杂对象”的创建工作&#x…

基于SSM的课程进度管理系统的设计与实现

摘要: 在信息技术飞速发展的当下, 借助互联网平台以及功能性系统的支持,人们获取信息以及信息整合的通道越来越多元化。系统和平台帮助人们实现了信息的共享,同时帮助人们更加直观的看到成果和过程的变动。以课程进度管理为例&…

python使用uiautomator2操作雷电模拟器9找图

接上篇文章python使用uiautomator2操作雷电模拟器9并遇到解决adb 连接emulator-5554 unauthorized问题-CSDN博客 搭建好uiautomator2后,主要就是使用了。 本文就利用uiautomator2的截屏、模拟点击和aircv的找图功能,实现对指定寻找的图片的位置的点击。…

HikariPool-1 - jdbcUrl is required with driverClassName.

文章目录 前言一、问题提示二、如何改进1.原来配置2.应该修改成 总结 前言 这是在配置数据库发生多数据源产生的错误 一、问题提示 二、如何改进 1.原来配置 2.应该修改成 总结 以上就是今天要讲的内容,本文仅仅简单介绍了springboot多数据源报错问题

Leetcode算法训练日记 | day17

一、平衡二叉树 1.题目 Leetcode:第 110 题 给定一个二叉树,判断它是否是 平衡二叉树 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2: 输入:root [1,2,2,3,3,null,null,4,4]…

旋转链表--快慢指针思想

相似题型:删除链表的第倒数第n个节点,建议先做,有利于理解 class Solution {public ListNode rotateRight(ListNode head, int k) {ListNode prehead;ListNode firsthead;ListNode secondhead;ListNode lenpre;int length1;if(headnull)retu…

Linux——fork复制进程

1)shell: 在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令&…

R数据分析:网状meta分析的理解与实操

meta分析之前有给大家写过,但是meta分析只能比较两个方法。经常是被用来证明在现有研究中显示矛盾结果的干预方法到底有没有效的时候使用,通过证据综合得到某种干预到底有没有用的结论。但是如果我要证明好几种方法到底哪个最优,这个时候meta…

谈谈功率IC巨头—士兰微

大家好,我是砖一。 今天给大家分享一下士兰微电子公司,,有做功率元器件&开关电源和IC的朋友可以了解一下,希望对你有用~ 1 公司介绍 士兰微电子成立于1997年,于2003年上市,总部位于杭州,…

智能面试——录音及播放下载js-audio-recorder — post请求,formdata传参

录音插件 js-audio-recorder bug&#xff1a;本地调试调取不起来麦克风 浏览器配置安全域名 chrome://flags/Insecure origins treated as secure输入域名即可电脑需要连接上耳机 <template><div class"BaseRecorder"><div class"BaseRecorder-r…

seo调优

SEO 网站地图&#xff1a;sitemap.xmlrobots.txtxxx.com/www.xxx.com 解析到服务器&#xff0c;xxx.com 301 到 www.xxx.comhttps百度站点管理标题描述关键词标签语义化内链外链死链链接html结尾友情链接前端架构 注意&#xff1a;已收录链接&#xff0c;禁止改变链接地址 ro…