【网络原理】网络地址转换----NAT技术详解
💐个人主页:初晴~
📚相关专栏:计算机网络那些事
我们在 IP协议 一文中介绍过,由于IPv4协议中 IP地址只有32位,导致最多只能表示 42亿9千万个IP地址。但我们需要通过IP地址来标识网络上的每一个设备,因此我们期望 IP地址是唯一的。这样,42亿9千万放在现在这个万物互联的时代已经捉襟见肘了。为了缓解这一问题,NAT协议就应运而生了。
一、NAT技术是什么?
NAT(Network Address Translation,网络地址转换)是一种用于重新映射一个IP地址空间到另一个IP地址空间的技术,通常用于将多个私有或内部IP地址转换为单一的公有或外部IP地址。这使得使用私有IP地址的设备可以连接到互联网上。
即以一当千,通过一个 IP 代表一大波设备
将 IP地址分为两大类:
- 内网IP/私网IP
- 外网IP/公网IP
要求公网 IP必须是唯一的,但是私网 IP在不同的局域网中是允许重复的
这样运营商的公网 IP,不是服务一个设备,而是服务一个片区,可能有上万个设备。此时一个 IP 就代表了上万个设备,此时 IP 的利用率就大大提高了。
二、NAT IP转换过程
- NAT路由器将源地址从 10.0.0.10 替换成全局的IP 202.244.174.37
- NAT路由器收到外部的数据时,⼜会把⽬标IP从 202.244.174.37 替换回 10.0.0.10
- 在NAT路由器内部,有⼀张⾃动⽣成的,⽤于地址转换的表
- 当 10.0.0.10 第⼀次向 163.221.120.9 发送数据时就会⽣成表中的映射关系
这里NAT路由器为其内部网络分配IP地址时有两种分配方式:
静态NAT:为内部网络中的每个主机固定分配一个全球唯一的 IP地址。这意味着内部主机总是映射到相同的全局IP地址。
动态NAT:为内部网络中的主机提供一组全球唯一 IP地址池。当内部主机需要与外部网络通信时,会从这个池中分配一个全局IP地址给它。
三、NAPT/PAT
但这样还是出现很多问题的,如果局域⽹内,有多个主机都访问同⼀个外⽹服务器,那么对于服务器返回的数据中,⽬的IP都是相同的。NAT路由器该如何判定将这个数据包转发给哪个局域⽹的主机?
这时候 NAPT 来解决这个问题了。
这是最常用的NAT形式之一,它不仅改变了IP地址,还改变了传输层的端口号。NAPT允许大量的内部主机共享同一个或少数几个公网IP地址,通过跟踪每个会话的端口号来区分不同的内部主机。使⽤IP+port来建⽴这个关联关系:
这种关联关系也是由NAT路由器⾃动维护的。
例如在TCP的情况下,建⽴连接时,就会⽣成这个表项;在断开连接后,就会删除这个表项
四、NAT技术的优缺点
由于NAT依赖这个转换表,所以有诸多限制:
- ⽆法从NAT外部向内部服务器建⽴连接
这也是为什么我们在自己电脑上开发的网站,别人无法直接进行访问的原因。因为我们设备处于一个私网,处于其它私网的设备也就无法直接使用了。需要将我们的网站部署在公网上,获得一个公网IP,其它用户才能正常进行访问
- 装换表的⽣成和销毁都需要额外开销
- 通信过程中⼀旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开
NAT 的优势:
- 解决IP地址短缺问题:
NAT通过允许内部网络使用私有IP地址(如10.x.x.x, 172.16.x.x至172.31.x.x, 或192.168.x.x),然后在这些地址和有限的公共IP地址之间进行转换,有效地缓解了IPv4地址的耗尽问题。
- 节省公网IP地址资源:
由于NAT可以允许多个设备共享一个或少数几个公网IP地址,因此它有助于节省宝贵的公网IP地址资源。
- 提高网络安全性:
NAT隐藏了内部网络的结构,因为外部观察者只能看到转换后的IP地址,而看不到内部网络的实际地址。这种隐蔽性增加了黑客攻击内部网络的难度。
- 简化网络管理:
使用私有地址段意味着组织可以自由地重新配置其内部网络,而无需担心外部影响。此外,当内部主机的数量增加或减少时,管理员只需要管理较少数量的公网IP地址。
- 易于扩展:
由于内部地址是私有的并且不会与其他网络冲突,所以可以轻松地添加或更改内部网络结构,而不会影响外部连接。
- 支持服务发布:
通过端口地址转换(PAT),NAT可以用来将特定的服务发布到互联网,例如Web服务器、邮件服务器等,同时仍然保持内部网络的安全性。
并且 NAT 有⼀个最⼤的优点:
- 不需要更新硬件设备,只更新软件,就可以解决 IP 地址不够⽤的问题!
也正是这一优点,几乎阻断了 IPv6 协议的发展。因为IPv6与IPv4并不兼容,需要重新部署硬件设备,更新成本更高,也就迟迟不能得到普及了。
那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊
相关文章:

【网络原理】网络地址转换----NAT技术详解
💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 我们在 IP协议 一文中介绍过,由于IPv4协议中 IP地址只有32位,导致最多只能表示 42亿9千万个IP地址。但我们需要通过IP地址来标识网络上的每一个设备&#x…...

React怎么创建虚拟dom和挂载到页面
1、🍟你可以直接下载本节配套的资源代码,然后导入vscode看效果,也可以跟着教程一点一点敲,都是没问题的。 2、🤔怎么运行本节代码? 很简单,随便找个浏览器打开index.html即可。💕 代…...

kafka-console-ui的简介及安装使用
kafka-console-ui的简介及安装使用 一、kafka-console-ui的简介二、安装kafka-console-ui2.1 源码安装2.2 docker安装 三、kafka-console-ui功能使用3.1、功能特性3.2、 功能介绍3.2.1 集群3.2.2 topic3.2.3 消费组3.2.4 Acl3.2.5 运维 一、kafka-console-ui的简介 kafka-cons…...
git 的分支管理详解
Git 的分支管理是其强大功能之一,允许开发者在同一代码库中并行开发多个特性或修复 bug,而不干扰主分支的代码。下面是对 Git 分支管理的详解: 1. 查看分支 查看所有分支 git branch # 查看本地分支 git branch -r # 查看远程分支 git br…...

w003基于Springboot的图书个性化推荐系统的设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...

医院信息化与智能化系统(6)
医院信息化与智能化系统(6) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的…...
前端学习---(6)js基础--4
Promise Promise 是异步编程的一种新的解决方案和规范。 Promise优点: 1、可以很好地解决ES5中的回调地狱的问题(避免了层层嵌套的回调函数)。 2、统一规范、语法简洁、可读性和和可维护性强。 3、Promise 对象提供了简洁的 API,使得管理异步…...

241026-RHEL如何以root身份卸载Docker
在 RHEL 8.8 中,以 root 身份卸载 Docker 可以通过以下步骤完成: 停止 Docker 服务(如果已启动): sudo systemctl stop docker删除 Docker 包: 运行以下命令卸载 Docker 引擎及其依赖包(docker-…...

iPhone当U盘使用的方法 - iTunes共享文件夹无法复制到电脑怎么办 - 如何100%写入读出
效果图 从iPhone复制文件夹到windows电脑 步骤windows 打开iTunes通过USB连接iPhone和电脑手机允许授权iTunes中点击手机图标,进入到点击左边“文件共享”,在右边随便选择一个App(随意...)写入U盘:拖动电脑的文件&am…...

jenkins ssh 免密报错Host key verification failed.
jenkins 发布项目,ssh连接远程服务器时报错:Host key verification failed. 解决: 原因是生成的sshkey不是用的jenkins用户,所以切换用户到:jenkins重新生成sshkey su jenkins ssh-keygen -t rsa ssh-copy-id -i ~/…...
智能科学与技术(一级学科)介绍
智能科学与技术:探索智能的边界与未来 智能科学与技术的起源与发展学科定位与内涵学科范围与研究方向培养目标相关学科 在当今这个信息爆炸的时代,人工智能(AI)已经成为科技创新的重要驱动力。随着技术的不断进步,智能…...

iOS调试真机出现的 “__llvm_profile_initialize“ 错误
一、错误形式: app启动就崩溃,如下: Demo__llvm_profile_initialize:0x1045f7ab0 <0>: stp x20, x19, [sp, #-0x20]!0x1045f7ab4 <4>: stp x29, x30, [sp, #0x10]0x1045f7ab8 <8>: add x29, sp, #0x100x1…...
Android SELinux——neverallow问题处理(十六)
上一篇我们介绍了通过添加允许策略处理问题,这里我们主要来看一些 neverallow 策略问题该怎么处理。 一、neverallow介绍 遇到 neverallow 规则问题,千万别急着去注释/剔除里面原有的规则(原生的尽量别动)。增加 allow 规则是常见的解决办法,但是随着 android 版本的升级…...
Vue 关于路由
关于路由 路由的模式与区别 路由的两种模式: hashhistory 区别: 表象不同 hash 模式中,在地址里以 /#/ 分隔;history 模式中,地址里以 / 分隔。关于找不到当前页面发送请求的问题 history 模式会给后端发送一次请…...
香港海洋投资启动创新海洋牧场,领航全球海洋经济
香港,这座国际大都市,以其独特的地理位置和深厚的海洋文化底蕴,再次站在了全球海洋经济发展的前沿。近日,香港海洋投资发展有限公司(以下简称“香港海洋投资”)在万众瞩目中,正式宣布启动其创新…...
C/C++ 每日一练:二分查找
二分查找是一种高效的查找算法,用于在有序数组中定位目标元素的位置。它的核心思想是每次查找时将范围缩小一半。 题目要求 实现一个二分查找算法。给定一个递增排序的整型数组 arr 和一个目标值 target,编写一个函数 binarySearch,若 targe…...

Linux基础IO--重定向--缓冲区
1,为什么语言喜欢做封装? 我们先知道一个概念,显示器叫做字符设备,根据ACSLL码来打印数据,所以我们从键盘输入的 1234,在显示器看来就是一个一个的字符(1,2,3,4)而不是一千两百三十四: 下图输入字符类型数…...
Conda 安装与使用指南
Conda 是一个开源的软件包管理和环境管理系统,主要解决一个系统上同时要使用python2,python3等等多个python环境的切换问题,支持多种编程语言(如 Python、R 等),可以在 Windows、macOS 和 Linux 上运行。它…...
C++中获取硬盘ID的方法
在C++中,直接获取硬盘的ID(通常是硬盘的序列号或唯一标识符)并不是一项简单的任务,因为这通常涉及到低级的硬件访问,这通常是由操作系统或特定的硬件驱动程序管理的。标准C++库并没有提供直接访问硬盘ID的功能。 然而,可以通过以下几种方法来获取硬盘的ID: 操作系统特定…...

OpenRTP 传输增加OpenRTPServer
开源地址 最近增加了OpenRTPServer, 已经修改完成一版放在了目录下,window和linux下编译都成功了,不过由于修改代码CMakefile 需要修改,先放放 OpenRTP开源地址 vlc得纠错传输方式 我发现我代码写错以后,vlc 依然能…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...