当前位置: 首页 > news >正文

【计算机网络】NAT技术

文章目录

  • 1. NAT技术简介
  • 2. 使用NAT技术转换IP的过程
  • 3. NAPT
  • 4. NAT技术的缺陷
  • 5. NAT和代理服务器

1. NAT技术简介

NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效避免外部网络的攻击,隐藏并保护网络内部的计算机。

在IPv4协议中,IP地址数量不足是一个大问题,而NAT技术就是当前解决IP地址不足的重要手段,是路由器的一个重要功能。

  • 在对外进行通信时,NAT能够将私有IP经过一系列替换操作最终转换为全局IP,也就是说,NAT是一种将私有IP和全局IP相互转化的技术方法。
  • 装有NAT软件的路由器叫做NAT路由器,所有使用私有IP的主机在和外界进行通信时,都要在NAT路由器上将其私有IP转换为全局IP。
  • 很多学校、家庭、公司内部每个终端设置的IP都是私有IP,而只在路由器或必要的服务器上设置全局IP。
  • 全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是允许的。

2. 使用NAT技术转换IP的过程

假设某个局域网当中有A、B、C三台主机,在公网当中有一台服务器,以主机A访问公网中的这台服务器为例,我们来看数据包在传输过程中IP地址的转换过程。

数据包从局域网到公网的过程

在这里插入图片描述
主机A向服务器发起数据请求的过程中,数据包中IP地址的转换如下:

  • 刚开始,该数据包当中的源IP地址就是主机A的私有地址,目的IP地址就是服务器的公网IP地址。
  • 当数据包经过NAT服务器时,路由器会将该数据包的源IP地址替换成自己的WAN口IP地址,此时该数据包的源IP地址和目的IP地址都是公网IP了。
  • 该数据包在网络中经过各种转发,最终到达服务器主机。

服务器收到主机A的数据请求并处理之后,就会对主机A发来的请求进行响应。

数据包从公网到局域网的过程

在这里插入图片描述
服务器对主机A进行响应的过程中,数据包中IP地址的转换如下:

  • 刚开始,该数据包当中的各种源IP地址就是服务器的公网IP地址,目的IP地址就是路由器的WAN口IP地址。
  • 数据包在互联网中经过各种路由转发,到达主机A所在局域网的NAT路由器,此时路由器会将数据包的目的IP地址转换为主机A的私有IP地址。
  • 最终路由器就会将该数据包转发给局域网当中的主机A。

需要注意的是,因为主机A向服务器发起数据请求时,该数据包当中的源IP地址被替换成了NAT路由器的WAN口IP地址,相当于是该路由器代替主机A向服务器发起了数据请求,因此服务器发出的响应数据包的目的IP地址应该是NAT路由器的WAN口IP地址。

3. NAPT

  • 当局域网当中的主机要访问外网时,NAT路由器会将这些数据包的源IP地址替换成自己的WAN口IP地址。
  • 当外网发来响应数据时,NAT路由器又会将响应数据包的目的IP地址替换为局域网中对应主机的IP地址。

那NAT路由器是如何判断,应该将从外网收到的响应数据包发给局域网中哪一台主机呢?

  • 实际在NAT路由器内部,有一张自动生成的、用于地址转换的表。
  • 该转换表中维护的就是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系。
  • 局域网中的主机第一次向外网发起数据请求时,就会生成表中的映射关系。
  • 比如在TCP连接建立时,会建议对应的映射关系,在TCP连接断开后,就会删除对应的映射关系。

在刚才的例子中,主机A第一次向服务器发起数据请求时,路由器中就会建立以下映射关系:
在这里插入图片描述
当NAT路由器收到服务器向主机A发来的响应数据时,就可以通过查表得知该响应数据是发送给局域网当中的主机A的。

但如果转换表中维护的只是局域网当中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系,那么就会出现某些问题。

比如,如果局域网中的主机A和主机B同时都在访问该服务器,那么此时转换表中就会建立以下两队映射关系:
在这里插入图片描述
这时这张表就只能保证从左到右的唯一性,而不能保证从右到左的唯一性,当服务区发来数据时,该数据包中的IP地址都是服务器的WAN口IP,此时NAT路由器就无法判断该数据包应该转发给主机A还是主机B,此时NAT路由器就无法判断数据包应该转发给主机A还是主机B,那么就需要用到NAPT技术。

NAPT

NAPT(Network Address Port Tranlation,网络地址端口转换),可以将多个内部地址映射为一个合法公网地址。

  • NAPT在建立转换表的映射关系时,除了建立局域网中私有IP与其对应访问的公网IP的映射关系之外,还会加上一个由NAT路由器选定的端口号。
  • 此时局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+port的方式来区分发给不同主机的数据包。

比如局域网中的主机A和主机B都在访问同一个服务器,并且它们访问服务器时采用的端口号都是1025。

  • 假设主机A发送的数据包先到达路由器,此时路由器将数据包的源IP地址替换成自己的WAN口IP地址,由于路由器用于访问该服务器的1025号端口没有被使用,因此该数据包的源端口号可以不变。
  • 当主机B发来的数据包到达路由器时,路由器同样将数据包的源IP地址替换为自己的WAN口IP地址,但此时路由器用于访问该服务器的1025号端口已经被主机A使用了,因此路由器会重新选定一个端口号对数据包的源端口号进行替换。

此时转换表就有两对映射关系:
在这里插入图片描述
此时这张转换表既能保证从左到右的唯一性,也能保证从右到左的唯一性。

  • 当服务器发来的响应数据到达路由器时,虽然服务器发给主机A和主机B的数据包对应的目的IP地址是一样的。
  • 但路由器用1025端口号代替主机A进行数据请求,用1026端口号代替主机B进行数据请求。
  • 因此现在路由器可以根据数据包中的端口号,判断将数据包转发给主机A还是主机B,进行对数据包中的目的IP地址和目的端口号之间的转换,然后转发给局域网中对应的主机。

谈谈路由器

路由器是工作在网络层的一个设备,负责将数据包从一个网络转发到另一个网络,但不能狭义地认为路由器只能工作在网络层。

  • NAT路由器再进行数据转发时,不仅有能力替换数据包的源IP地址和目的IP地址,而且在必要的情况下还可能会替换数据包的源端口号和目的端口号,而端口号其实是传输层的概念。
  • 为了对IP地址进行动态管理,大部分路由器都带有DHCP功能,而DHCP实际是应用层的一个协议。

4. NAT技术的缺陷

NAT技术进行私有IP和公网IP之间的替换,主要就是依赖NAT路由器当中维护的网络地址转换表,但这张转换表也体现出来NAT的一些缺陷:

  • 无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立建立。
  • 转换表的生成和销毁都需要额外开销。
  • 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。

5. NAT和代理服务器

代理服务器(Proxy Server)的功能就是代理网络用户是获取网络信息,代理服务器又分为正向代理和反向代理。

  • 正向代理

正向代理,是一个位于客户端和目标服务器之间的服务器,客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端。
在这里插入图片描述
比如公司内部一般都会有自己的服务器,当我们使用公司内网上网时。

  • 我们对外网发起的数据请求,首先会转发到公司的这台服务器上,然后由公司的这台服务器代替你对外网进行访问。
  • 当公司的服务器收到对应外网的响应数据后,再由公司的这台服务器将数据转发给你。

正向代理的好处:

  • 正向代理的一个最大好处就是可以加速资源访问。
  • 比如公司中大量员工都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他人要访问资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。

反向代理

反向代理,也是一个位于客户端和目标服务器之间的服务器,对于客户端而言,反向代理服务器就相当于目标服务器,用户不需要知道目标服务器的地址,用户只需要访问反向代理服务器就可以获得目标服务器提供的服务。

反向代理,也是一个位于客户端和目标服务器之间的服务器,客户端直接向反向代理服务器发起数据请求,然后再由反向代理服务器将客户端的数据请求转发给真正的目标服务器进行处理,数据处理完毕之后反向代理服务器再将数据结构返回给客户端。在这里插入图片描述
比如域名www.baidu.com对应的服务器实际就是一个反向代理服务器。

  • 百度内部其实并不是只有一台服务器,但不同地区的人们都可以通过访问www.baidu.com享受到百度提供的服务,实际上我们访问的就是百度的反向代理服务器。
  • 当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据代理,然后再将数据处理的结果返回给客户端。

反向代理的好处

  • 反向代理可以起到负载均衡的作用。比如不设置反向代理服务器,用户在访问百度的时候,就会大量随机访问百度内部的服务器,此时就可能导致某些服务器压力太大,而某些服务器却处于闲置状态。而设置了反向代理服务器之后,我们就能够通过某些方法让用户的数据请求较为平均地落到每台服务器上。
  • 反向代理还能起到安全防护的作用。有了反向代理服务器之后,我们不需要将提供服务的服务器对应的信息暴露出去,此外,当由非法请求发送到反向代理服务器时,反向代理服务就相当于一层软件屏障,可以在反向代理服务器当中部署一些防护措施,让这些非法请求在反向代理服务器这里就被过滤掉,而不会影响内部实际提供服务的服务器。

正向代理和反向代理的异同

正向代理和反向代理的相同点:

  • 正向代理服务器和反向代理服务器都是位于客户端和服务器之间的。
  • 正向代理服务器和反向代理服务器的主要工作,都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端。

正向代理和反向代理的不同点:

  • 正向代理是客户端的代理,帮助客户端访问其无法访问的服务器资源的,而反向代理则是服务端的代理,帮助服务器做负载均衡、安全防护等工作的。
  • 正向代理一般是客户端架设的,比如公司的正向代理服务器是公司作为客户端架设的,而反向代理服务一般是服务端架设的,比如百度的反向代理服务器是百度作为服务端架设的。
  • 正向代理中,服务器不知道真正的客户端到底是谁,服务器认为正向代理服务器就算真实的客户端,而反向代理中,客户端不知道真正的服务器是谁,客户端认为反向代理服务器就是真实的服务器。

NAT和代理服务器的区别

NAT和代理服务器都是代替我们向服务器发起数据请求的,但它们有以下区别:

  • 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题,而代理服务器则是更贴近具体应用,迅游这样的加速器,用的就是代理服务器。
  • 从底层实现上讲,NAT工作在网络层,直接对IP地址进行替换,而代理服务器往往工作在应用层。
  • 从使用范围上将,NAT一般在局域网的出口部署,而代理服务器可以在局域网代理,也可以在广域网代理,也可以跨网代理。
  • 从部署位置上看,NAT一般集成在防火墙、路由器等硬件设备上,而代理服务器则是一个软件程序(比如Nginx和Apache),需要部署在服务器上。

相关文章:

【计算机网络】NAT技术

文章目录 1. NAT技术简介2. 使用NAT技术转换IP的过程3. NAPT4. NAT技术的缺陷5. NAT和代理服务器 1. NAT技术简介 NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效避免外…...

Jenkins工具系列 —— 插件 实现用户权限分配与管理

文章目录 安装插件 Role-based Authorization Strategy添加用户注册配置权限查看当前使用者,获取user id配置管理员权限配置普通用户权限(非管理员权限) 小知识 安装插件 Role-based Authorization Strategy 点击 左侧的 Manage Jenkins —&…...

智能文件批量改名工具,自定义重命名,格式转换一步到位!

每当你需要将大量视频文件进行重命名,改变格式时,是不是总感觉手动操作费时费力,让你抓狂不已?别担心!我们的文件批量改名高手将会解决你的困扰 首先,我们要打开文件批量改名高手,在“文件批量重…...

Python | threading

Python | threading 1. 简介 Python的threading模块是用于创建和管理线程的标准库。线程是在同一进程中执行的多个执行路径,使程序可以同时执行多个任务。 threading模块提供了Thread类,通过创建Thread对象,可以轻松地在Python中启动和管理…...

Unity数字可视化学校_昼夜(二)

1、时间设置: 2、新建夜晚 3、新建侧置球(BOX),测试灯光强度 降低亮度 色调:冷色调 4、自发光 新建shader 灯光控制 道路线: 建筑: 夜晚加灯光: 玻璃: 加大灯光数量: 边缘…...

嘉楠勘智k230开发板上手记录(二)

上次成功在k230上烧录sdk,这次准备实现hello world和ssh scp远程k230 一、PC连接k230 1. 初步准备 首先下载串口工具PuTTY,这个我个人感觉比较方便。 准备两根USB type-C数据线,一根连电源,一根连串口调试。还有Type C公头转网…...

flex 弹性布局

Flex 布局的使用 任何一个容器都可以指定为 Flex 布局。 .box{ display: flex; //flex作为display的一个属性使用 } 行内元素也可以使用 Flex 布局。 .box{ display: inline-flex; } 注意:设为 Flex 布局以后,子元素的float、clear和vertical-align…...

【C# 基础精讲】为什么选择C# ?

C#(C Sharp)是由微软开发的一种通用、面向对象的编程语言。它最初于2000年发布,自那时以来逐渐成为开发者的首选之一。C#的设计目标是提供一种简单、现代、可靠且安全的编程语言,使开发者能够轻松构建各种类型的应用程序。 为什么…...

HCIP BGP选路规则总结

选路前提条件 多条BGP路由目标相同,且均可优(下一跳可达、同步关闭),具有相同的优先级(管理距离)。 1、优选Preference_Value值最高的路由(私有属性,仅本地有效)。 不传递 权限最高属性 可…...

UE4 Cesium for unreal 离线加载应用全流程

参考配置:Win10、请保证是在局域网环境下配置 配置IP 右键选择:打开“网络和Internet” 设置 选择更改适配器选项 请保证以太网是处于启用状态并连接线缆,点击右键选择属性 双击选择Internet协议版本4(TCP/IPv4) 将IP地…...

翻转卡片游戏【力扣822】

解题思路 如果卡片上正面和背面的数字相同,都为x,那么x一定不符合要求,将这些数都记录到哈希表hash中。剩下的卡片正反面数字不相同,那么不在hash中的数字中的最小数min一定是答案。因为若min跟现在front数组中的某些数相同&…...

嵌入式开发学习(STC51-5-数码管)

内容 静态数码管:最左端显示0 动态数码管:从左到右,显示0-9 数码管简介 数码管是一种半导体发光器件,其基本单元是发光二极管; 类别: 数码管按段数可分为七段数码管和八段数码管,八段数码管…...

JavaScript |(四)正则表达式 | 尚硅谷JavaScript基础实战

学习来源:尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 📚正则表达式📚正则表达式字面量方式📚字符串&正则表达式🐇split()🐇search()🐇match()🐇replace()…...

docker-compose实现mysql主从复制

利用docker-compose实现mysql主从复制 1.首先创建挂载的目录以及配置信息 1.1 主 mkdir -p /opt/mysql/master/data mkdir -p /opt/mysql/master/config # 编写配置文件 vim /opt/mysql/master/config/my.cnfmy.cnf配置信息 [mysqld] usermysql default-storage-engineINNO…...

hbase基础

hbase安装 tar -zxvf hbase-2.4.11-bin.tar.gz -C . ln -s f hbase-2.4.11-bin hbasemv /export/server/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar /export/server/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bakvim conf/regionser…...

【GitOps系列】如何实施自动化渐进式交付?

文章目录 前言自动渐进式交付概述自动渐进式交付准备创建生产环境创建 AnalysisTemplate访问生产环境安装Prometheus配置 Ingress-Nginx 和 ServiceMonitor验证 Ingress-Nginx 指标 自动渐进式交付实战自动渐进式交付成功自动渐进式交付失败 结语 前言 在实施金丝雀发布的过程中…...

【网络】网络层(IP协议)

目录 一、基本概念 二、协议头格式 三、网段划分 四、特殊的IP地址 五、IP地址的数量限制 六、私有IP地址和公网IP地址 七、路由 一、基本概念 IP协议:提供一种能力, 将数据从A主机送到B主机,(TCP协议:确保IP协议…...

Unity数字可视化学校_昼夜(一)

maya2022:链接:https://pan.baidu.com/s/1cvB438UKsv_tU37NsOaNow 3dmax软件合集:百度网盘 请输入提取码 1180 1、 2、unity3d 导入插件 : (1)UniStorm - Volumetric Clouds Sky 5.3.0.unitypackage (天气&…...

QWidget样式

1、设置边框样式: QWidget {font-family:Microsoft YaHei UI;background:#ffffff;/*border:3px solid rgba(207, 209, 208, 170);设置整体边框*/border-bottom: 3px solid rgba(207, 209, 208, 170);/*设置底部边框*/border-top: 3px solid rgba(207, 209, 208, 1…...

TypeScript基础学习

目录 一、安装 1、下载国内镜像 2、安装 3、查看安装情况 4、使用例子 二、变量声明 1、规则 2、声明的四种方式 3、注意 4、类型断言 5、类型推断 6、变量作用域 三、基础类型(共11种) 1、Any 类型 2、Null 和 Undefined 3、never 类型…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...