【Linux 网络】NAT技术——缓解IPv4地址不足
NAT技术
- NAT 技术背景
- NAT IP转换过程
- NAPT
- NAT 技术的缺陷
NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
NAT 技术背景
在IPv4协议中,IP地址数量不足是一个大问题,而NAT技术就是当前解决IP地址不够用的主要手段,是路由器的一个重要功能。
- 在进行对外通信时,NAT能够将私有IP经过一系列替换操作最终转为全局IP,也就是说,NAT是一种将私有IP和全局IP相互转化的技术方法。
- 装有NAT软件的路由器叫做NAT路由器,所有使用私有IP的主机在和外界通信时,都要在NAT路由器上将其私有IP转换成全局IP。
- 很多学校、家庭、公司内部每个终端设置的IP都是私有IP,而只在路由器或必要的服务器上设置全局IP。
- 全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是完全不影响的。
NAT IP转换过程
假设某个局域网当中有三个客户端,在公网中有一台服务器,以客户端A访问服务器为例,让我们看一下IP地址的变换过程。
注意: 这里仅考虑的是只有一台客户端给服务器发报文的情况。

数据包从局域网到公网过程
- 首先 数据包当中的源IP地址就是主机A的IP地址,目标地址为服务器的地址。
- 然后数据包经过NAT路由器器时,其中的源IP地址会被转换。也就是由LAN口IP地址转换为WAN口IP地址,此时源IP地址和目的IP地址都是公网的IP地址。
- 最后该数据包可能经过各种路由转发,最终到达服务器主机
Lan口的IP地址是你本地的(局域网)的IP地址,一般由路由器自动分配
wan口的 IP 地址是你的服务运营商在你联通Internet后,分配给你的IP地址
数据包从公网到局域网的过程
服务器向主机A进行响应的过程也要进行相应的IP地址转换,不过这次转换的是目的IP地址。

- 首先,数据包当中包含了源IP地址和目的IP地址,目的IP地址是WAN口IP地址
- 然后,可能经过互联网中的各种路由转发,到达主机A所在局域网的NAT路由器时,目的IP地址被转换,由WAN口IP转换成了LAN口IP,也就是主机A的私有IP地址。
- 最后,路由器就会将该数据包转发给局域网当中的主机A
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 发送数据时就会生成表中的映射关系;
NAPT
NAPT(Network Address Port Translation),即网络地址端口转换,可以将多个内部地址映射为一个合法公网地址。
上面的情况都是局域网内只有一台主机访问外网的服务器,如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系

比如局域网中主机A和主机B都在访问同一个服务器,并且它们访问服务器时采用的端口号都是1025.
- 假设主机A发送的数据包先到达路由器,此时路由器将数据包的源IP地址转化成WAN口IP地址,由于端口号1025没有被使用,所以在转换表中,维护了源IP地址和端口号所对应的映射关系。
- 当主机B发送的数据包也到达路由器后,路由器将数据包的源IP地址转化成WAN口IP地址,由于端口号1025被主机A使用了,所以端口号使用1026,转换表中,维护了源IP地址和端口号所对应的映射关系。

这张转换表每一个元素从左到右,从右到左的映射关系都是唯一的。
- 当服务器接收到主机A报文和主机B的报文时,虽然源IP地址都是一样的,但是转换表中的映射的端口号不一样,服务器就能区分哪一个报文是主机A发的,哪一个是主机B发的。
- 当服务器要给客户端进行响应时,虽然再经过路由器转换后,IP地址都是一样的,但是路由器可以端口号的不同,来决定这次响应该转发给谁。
这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项
NAT 技术的缺陷
由于NAT依赖这个转换表, 所以有诸多限制:
-
无法从NAT外部向内部服务器建立连接(NAT穿透技术可以做到);
-
装换表的生成和销毁都需要额外开销;
-
通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;
相关文章:
【Linux 网络】NAT技术——缓解IPv4地址不足
NAT技术 NAT 技术背景NAT IP转换过程NAPTNAT 技术的缺陷 NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算…...
Flink 两阶段提交(Two-Phase Commit)协议
Flink 两阶段提交(Two-Phase Commit)是指在 Apache Flink 流处理框架中,为了保证分布式事务的一致性而采用的一种协议。它通常用于在流处理应用中处理跨多个分布式数据源的事务性操作,确保所有参与者(数据源或计算节点…...
【Docker晋升记】No.2 --- Docker工具安装使用、命令行选项及构建、共享和运行容器化应用程序
文章目录 前言🌟一、Docker工具安装🌟二、Docker命令行选项🌏2.1.docker run命令选项:🌏2.2.docker build命令选项:🌏2.3.docker images命令选项:🌏2.4.docker ps命令选项…...
[OnWork.Tools]系列 00-目录
OnWork.Tools系列文章目录 OnWork.Tools系列 01-简介_末叶的博客-CSDN博客OnWork.Tools系列 02-安装_末叶的博客-CSDN博客OnWork.Tools系列 03-软件设置_末叶的博客-CSDN博客OnWork.Tools系列 04-快捷启动_末叶的博客-CSDN博客OnWork.Tools系列 05-系统工具_末叶的博客-CSDN博…...
Cadvisor+InfluxDB+Grafan+Prometheus(详解)
目录 一、CadvisorInfluxDBGrafan案例概述 (一)Cadvisor Cadvisor 产品特点: (二)InfluxDB InfluxDB应用场景: InfluxDB主要功能: InfluxDB主要特点: (三&#…...
AtcoderABC222场
A - Four DigitsA - Four Digits 题目大意 给定一个整数N,其范围在0到9999之间(包含边界)。在将N转换为四位数的字符串后,输出它。如果N的位数不足四位,则在前面添加必要数量的零。 思路分析 可以使用输出流的格式设…...
架构实践方法
一、识别复杂度 将主要的复杂度问题列出来,然后根据业务、技术、团队等综合情况进行排序,优先解决当前面临的最主要的复杂度问题。对于按照复杂度优先级解决的方式,存在一个普遍的担忧:如果按照优先级来解决复杂度,可…...
点淘的MCN机构申请详细入驻指南!
消费趋势的变化,来自消费人群的变化。 后疫情时代,经济复苏的反弹力度不足,人们开始怀疑我们正从前几年的消费升级,跌入消费降级的时代,但这并不能准确概括消费市场的变化。 仔细翻看各大奢侈品集团的财报࿰…...
事务和事务的隔离级别
1.4.事务和事务的隔离级别 1.4.1.为什么需要事务 事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务&…...
每日一题 34在排序数组中查找元素的第一个和最后一个位置(二分查找)
题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&…...
Spring Boot Admin 环境搭建与基本使用
Spring Boot Admin 环境搭建与基本使用 一、Spring Boot Admin是什么二、提供了那些功能三、 使用Spring Boot Admin3.1搭建Spring Boot Admin服务pom文件yml配置文件启动类启动admin服务效果 3.2 common-apipom文件feignhystrix 3.3服务消费者pom文件yml配置文件启动类control…...
JVM之内存模型
1. Java内存模型 很多人将Java 内存结构与java 内存模型傻傻分不清,java 内存模型是 Java Memory Model(JMM)的意思。 简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据…...
音视频 vs2017配置FFmpeg
vs2017 ffmpeg4.2.1 一、首先我把FFmpeg整理了一下,放在C盘 二、新建空项目 三、添加main.cpp,将bin文件夹下dll文件拷贝到cpp目录下 #include<stdio.h> #include<iostream>extern "C" { #include "libavcodec/avcodec.h&…...
【项目管理】PMP备考宝典-第二章《环境》
第一节:概述 1.项目所处的组织环境 (1)事业环境因素(EEFs) 组织内部的事业环境因素: 企业都会有愿景、使命、价值观,这些决定了企业的发展方向。不忘初心,坚定地走自己的路&#…...
ELK 将数据流转换回常规索引
ELK 将数据流转换回常规索引 现象:创建索引模板是打开了数据流,导致不能创建常规索引,并且手动修改、删除索引模板失败 "reason" : "composable template [logs_template] with index patterns [new-pattern*], priority [2…...
jackson库收发json格式数据和ajax发送json格式的数据
一、jackson库收发json格式数据 jackson库是maven仓库中用来实现组织json数据功能的库。 json格式 json格式一个组织数据的字符文本格式,它用键值对的方式存贮数据,json数据都是有一对对键值对组成的,键只能是字符串,用双引号包…...
ubuntu安装和卸载CLion
安装 在https://www.jetbrains.com/clion/download/#sectionlinux下载相应版本的安装包,解压之后,找到解压文件夹中的bin文件夹运行./clion.sh 卸载 使用sudo rm -rf删除以下内容;并把刚刚解压的文件删掉 ~/.config/JetBrains ~/.local/s…...
Petrel解释二维浅地层数据
Petrel是斯伦贝谢开发的一款地质解释和建模软件,有点像地理信息系统的ArcGIS,主要用于数据分析和展示。它不是用来处理原始数据的,而是集成各种处理后的结果数据进行特征分析和目标拾取。当然,它也能读取原始数据,比如…...
分布式任务调度平台XXL-JOB使用
说明:分布式任务调度平台XXL-JOB,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用(官方语)。 本文介绍使用XXL-JOB实现定时执行代码,可用于项目中…...
自考本科汉语言文学专业真的太难了吗
自考本科汉语言文学专业的难度和就业前景都需要综合考虑。目前,自考汉语言文学专业通过率是比较高的,与其他专业比较,难度会低一些,主要考验考生的记忆能力。 自学考试汉语言文学难度怎么样 本科自学考试汉语言文学难度还是比较简…...
3个步骤彻底告别C盘爆红:Windows Cleaner开源清理工具使用指南
3个步骤彻底告别C盘爆红:Windows Cleaner开源清理工具使用指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否也经历过这样的场景:…...
2026 AI智能体实测:企业落地选型避坑指南
2026年第一季度,AI智能体(AI Agent)市场完成深度洗牌,行业格局趋于清晰。企业对AI的需求已彻底告别“写文案、做问答”的浅层交互,转向跨系统自动化、无侵入式落地、可量化降本增效的实战场景。作为深耕企服数字化测评…...
前端数据标注员的福音:快速生成定制化点阵/数码管图片数据集(Python+浏览器自动化)
前端数据标注员的福音:快速生成定制化点阵/数码管图片数据集(Python浏览器自动化) 在计算机视觉和OCR模型训练中,高质量的数据集是成功的关键。然而,获取特定风格的字符图像——尤其是点阵字体和LED七段数码管字体——…...
UltraRAG:基于MCP的轻量级RAG开发框架,让复杂检索生成像搭积木一样简单
还在为搭建RAG系统写数百行胶水代码?调试复杂流程全靠黑盒试错? 清华大学THUNLP、东北大学NEUIR、OpenBMB和AI9stars联合推出了 UltraRAG ——首个基于 模型上下文协议(MCP) 架构设计的轻量级RAG开发框架。它不仅能让你用 YAML配…...
04-08-02 导师与被导师 (Mentoring)
04-08-02 导师与被导师 (Mentoring) 章节概述 本章探讨导师关系的价值以及如何成为好导师和寻找好导师。导师关系是职业发展的加速器,能够帮助你少走弯路,快速成长。核心概念 导师关系的价值 对被导师者: ├─ 获得经验和智慧 ├─ 避免常见错…...
STM32G474与F334系列HRTIM实战:从CubeMX配置到移相全桥PWM生成
1. HRTIM基础与STM32G474/F334特性解析 HRTIM(High-Resolution Timer)是STMicroelectronics为数字电源和电机控制等应用设计的高精度定时器模块。相比普通定时器,HRTIM最突出的特点是其超高的时钟频率——STM32F334系列可达4.68GHz࿰…...
如何轻松实现跨平台词库迁移:深蓝词库转换工具完整指南
如何轻松实现跨平台词库迁移:深蓝词库转换工具完整指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾因更换输入法而丢失多年积累的词库&#…...
避开这3个坑!GD32 SPI配置CKPH/CKPL时序详解与示波器实测对比
GD32 SPI时序配置实战:从波形分析到避坑指南 调试SPI接口时,最令人头疼的莫过于配置一切正常,但数据就是传不对。上周在调试一个温湿度传感器时,我遇到了类似问题——明明按照手册配置了CPOL和CPHA参数,示波器上的波形…...
LeetCode热题100-在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。思路:找左边…...
设计模式(c++)-结构型模式-适配器模式
设计模式(c)-结构型模式-适配器模式 一、适配器模式概述 适配器模式是一种结构型设计模式,它充当两个不兼容接口之间的桥梁,允许原本由于接口不匹配而无法一起工作的类能够协同工作。 核心思想:是将一个类的接口转换成客户期望的另一个接口。…...
