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

【网络原理】网络地址转换----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地址时有两种分配方式:

  1. 静态NAT:为内部网络中的每个主机固定分配一个全球唯一的 IP地址。这意味着内部主机总是映射到相同的全局IP地址。

  2. 动态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“ 错误

一、错误形式&#xff1a; app启动就崩溃&#xff0c;如下&#xff1a; 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 关于路由

关于路由 路由的模式与区别 路由的两种模式&#xff1a; hashhistory 区别&#xff1a; 表象不同 hash 模式中&#xff0c;在地址里以 /#/ 分隔&#xff1b;history 模式中&#xff0c;地址里以 / 分隔。关于找不到当前页面发送请求的问题 history 模式会给后端发送一次请…...

香港海洋投资启动创新海洋牧场,领航全球海洋经济

香港&#xff0c;这座国际大都市&#xff0c;以其独特的地理位置和深厚的海洋文化底蕴&#xff0c;再次站在了全球海洋经济发展的前沿。近日&#xff0c;香港海洋投资发展有限公司&#xff08;以下简称“香港海洋投资”&#xff09;在万众瞩目中&#xff0c;正式宣布启动其创新…...

C/C++ 每日一练:二分查找

二分查找是一种高效的查找算法&#xff0c;用于在有序数组中定位目标元素的位置。它的核心思想是每次查找时将范围缩小一半。 题目要求 实现一个二分查找算法。给定一个递增排序的整型数组 arr 和一个目标值 target&#xff0c;编写一个函数 binarySearch&#xff0c;若 targe…...

Linux基础IO--重定向--缓冲区

1&#xff0c;为什么语言喜欢做封装&#xff1f; 我们先知道一个概念&#xff0c;显示器叫做字符设备&#xff0c;根据ACSLL码来打印数据&#xff0c;所以我们从键盘输入的 1234&#xff0c;在显示器看来就是一个一个的字符(1,2,3,4)而不是一千两百三十四: 下图输入字符类型数…...

Conda 安装与使用指南

Conda 是一个开源的软件包管理和环境管理系统&#xff0c;主要解决一个系统上同时要使用python2&#xff0c;python3等等多个python环境的切换问题&#xff0c;支持多种编程语言&#xff08;如 Python、R 等&#xff09;&#xff0c;可以在 Windows、macOS 和 Linux 上运行。它…...

C++中获取硬盘ID的方法

在C++中,直接获取硬盘的ID(通常是硬盘的序列号或唯一标识符)并不是一项简单的任务,因为这通常涉及到低级的硬件访问,这通常是由操作系统或特定的硬件驱动程序管理的。标准C++库并没有提供直接访问硬盘ID的功能。 然而,可以通过以下几种方法来获取硬盘的ID: 操作系统特定…...

OpenRTP 传输增加OpenRTPServer

开源地址 最近增加了OpenRTPServer&#xff0c; 已经修改完成一版放在了目录下&#xff0c;window和linux下编译都成功了&#xff0c;不过由于修改代码CMakefile 需要修改&#xff0c;先放放 OpenRTP开源地址 vlc得纠错传输方式 我发现我代码写错以后&#xff0c;vlc 依然能…...

一键部署生产力:星图平台OpenClaw+Qwen3.5-9B体验

一键部署生产力&#xff1a;星图平台OpenClawQwen3.5-9B体验 1. 为什么选择云端沙盒方案 上周我在本地尝试部署OpenClaw时&#xff0c;经历了Python版本冲突、CUDA驱动不兼容等一系列典型环境问题。当看到星图平台提供预装OpenClawQwen3.5-9B的完整镜像时&#xff0c;第一反应…...

毕业设计实战:基于SpringBoot+Vue+MySQL的校园一卡通管理系统设计与实现指南

毕业设计实战&#xff1a;基于SpringBootVueMySQL的校园一卡通管理系统设计与实现指南 在开发“基于SpringBootVueMySQL的校园一卡通管理系统”毕业设计时&#xff0c;曾因器材借用表未通过学生ID与器材ID双外键关联踩过关键坑——初期仅单独设计借用表的编号字段&#xff0c;…...

SuperSplat:零安装的浏览器端3D高斯点云编辑器,重塑三维数据处理体验

SuperSplat&#xff1a;零安装的浏览器端3D高斯点云编辑器&#xff0c;重塑三维数据处理体验 【免费下载链接】super-splat 3D Gaussian Splat Editor 项目地址: https://gitcode.com/gh_mirrors/su/super-splat 在当今三维重建和计算机视觉领域&#xff0c;处理大规模3…...

PDF补丁丁实战指南:从文档难题到高效解决方案的全流程掌握

PDF补丁丁实战指南&#xff1a;从文档难题到高效解决方案的全流程掌握 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱&#xff0c;可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档&#xff0c;探查文档结构&#xff0c;提取图片、转成图片等等 项目地址: https:…...

从8小时到15分钟:feishu-doc-export如何重构飞书文档管理流程

从8小时到15分钟&#xff1a;feishu-doc-export如何重构飞书文档管理流程 【免费下载链接】feishu-doc-export 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export feishu-doc-export是一款基于.NET框架开发的飞书文档批量导出工具&#xff0c;通过封装飞…...

『NAS』在NAS部署简易版PS-miniPaint

点赞 关注 收藏 学会了 &#x1f4a1;整理了一个 NAS 专属玩法专栏&#xff0c;感兴趣的工友可以戳这里关注 &#x1f449; 《NAS邪修》 miniPaint 是一款开源的在线图片编辑器。你可以把它理解为**“运行在浏览器里的轻量级 Photoshop”**。 打开飞牛的「文件管理」应用&am…...

IntelliJ+Tomcat部署draw.io开发环境避坑指南(含乱码解决方案)

IntelliJTomcat深度定制draw.io开发环境实战手册 作为一款开源的流程图设计工具&#xff0c;draw.io因其轻量级和高度可定制性受到开发者青睐。但将其源码导入本地开发环境时&#xff0c;不少Java开发者会在IntelliJ与Tomcat的配置环节遭遇"水土不服"。本文将系统梳理…...

Kotlin协程flow缓冲buffer任务流,批次任务中选取优先级最高任务最先运行(十)

Kotlin协程flow缓冲buffer任务流&#xff0c;批次任务中选取优先级最高任务最先运行&#xff08;十&#xff09; 在 https://blog.csdn.net/zhangphil/article/details/159286201 基础上改进&#xff0c;简化LoadMgr提交简单任务的方法 。 Kotlin协程Flow结合缓冲(buffer)实现…...

别再死磕监督学习了!用Python从零搭建一个强化学习智能体(附完整代码)

用Python实战强化学习&#xff1a;从CartPole到自主决策智能体 在机器学习领域&#xff0c;监督学习长期占据主导地位&#xff0c;但当我们面对需要与环境持续交互、通过试错获取反馈的复杂任务时&#xff0c;强化学习展现出独特优势。本文将带您用Python构建一个能玩转OpenAI …...

Llama-3.2V-11B-cot部署教程:bf16精度下双卡4090吞吐量实测

Llama-3.2V-11B-cot部署教程&#xff1a;bf16精度下双卡4090吞吐量实测 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡RTX 4090环境优化。本教程将带您完成从环境准备到实际推理的全流程部署&#…...