【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连接也都会断开;

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

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

相关文章

Seata - 入门笔记

1、事务 访问并可能更新数据库中数据库中各种数据线的一个程序执行单元 原子性:事务是一个不可分割的工作单位,一个事务要么都做要么都不做 一致性:必须是使数据库从一个一致性到另一个一致性的状态,中间状态不能被观察到 隔离…

Vector - CAPL - 诊断模块函数(流控制帧续)

目录 CanTpGetFirstSequenceNumber & CanTpSetFirstSequenceNumber 代码示例 CanTpIsUseFlowControlSTmin & CanTpIsUseFlowControlSTmin & CanTpUseFlowControlSTmin CanTpIsUseFlowControlFrames & CanTpUseFlowControlFrames 代码示例 CanTpSetFlowC…

京东秋招攻略,备考在线测评和网申笔试

京东秋招简介 伴随着社会竞争越来越激烈,人们投递简历的岗位也变得越来越多元,而无论人们的选择面变成何样,那些知名度较高的企业,永远都备受关注,只要其一发布招聘公告,总有人第一时间踊跃报名。而作为这…

动力节点|Spring6框架学习教程,从基础到手撕源码一套打通

Spring框架已广泛应用于诸多Java应用程序的开发中,它提供了很多解决方案及最佳实践,简化了Java应用程序的开发过程并加速了开发。 Spring6.0版本是下一个十年的新开端,动力节点老杜精心打造全新升级版Spring6教程,手把手教学&…

网络安全进阶学习第十五课——Oracle SQL注入

文章目录 一、Oracle数据库介绍二、Oracle和MySQL的语法差异:三、Oracle的数据库结构四、Oracle的重点系统表五、Oracle权限分类1、系统权限2、实体权限3、管理角色 六、oracle常用信息查询方法七、联合查询注入1、order by 猜字段数量2、查数据库版本和用户名3、查…

【框架类】—Vue3的生命周期

一、生命周期的相关函数 onBeforeMount 页面渲染之前 和 onMounted渲染之后 示例 <template><div class"test"><div ref"el">组件初始化</div></div> </template> <script> //按需引入所需方法 import { ref,…

Android Camera预览画面变形问题

csdn 问题 安卓camera1在预览时&#xff0c;预览画面看起来被拉伸了&#xff0e; 如图&#xff0c;圆形的盖子&#xff0c;变成椭圆形了&#xff0e; 代码 默认流程&#xff0c;如下为大致的打开摄像头并进行预览显示的代码 private Camera mCamera null; private Surfa…

一文盘点 Zebec 生态的几个利好预期

Zebec Protocol 是目前商业进展最快的流支付体系&#xff0c;也是推动流支付向 Web2 世界发展的主要生态。目前&#xff0c;其已经与包括 Visa、Master 等支付巨头展开了合作&#xff0c;以推出银行卡的方式进一步向金融发达地区推出 Zebec Card 以拓展业务&#xff0c;前不久其…

Docker安装 Kibana

目录 前言安装Kibana步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2&#xff1a;拉取 kibana 镜像拉取镜像查看已拉取的镜像 步骤3&#xff1a;创建容器创建容器方式1&#xff1a;快速创建容器 步骤…

1.物联网IWIP网络

一。以太网 1.nc模拟UDP &#xff08;1&#xff09;COMMBOX通信调试工具 &#xff08;2&#xff09; 控制台输入nc -u 127.0.0.1 8000,此时串口也可以获得数据 &#xff08;3&#xff09;串口调试程序发送字符串&#xff0c;电脑控制台也会展示同样字符串&#xff08;说明UDP…

Java基础篇--运算符

目录 算术运算符 赋值运算符 比较运算符 逻辑运算符 条件运算符&#xff08;?:&#xff09; instanceof 运算符 Java运算符优先级 在程序中经常出现一些特殊符号&#xff0c;如、-、*、、>等&#xff0c;这些特殊符号称作运算符。运算符用于对数据进行算术运算、赋值…

39 printf 的输出到设备层的调试

前言 在前面 printf 的调试 我们只是调试到了 glibc 调用系统调用, 封装了参数 stdout, 带输出的字符缓冲, 以及待输出字符长度 然后内核这边 只是到了 write 的系统调用, 并未向下细看 我们这里 稍微向下 细追一下, 看看 到达设备层面 这里是怎么具体的 impl 的 测试用例…

利用logstash将graylog日志传输到kafka中

1.graylog配置输出 在System-outputs&#xff0c;选择GELF Output&#xff0c;填写如下内容&#xff0c;其它选项默认 在要输出的Stream中&#xff0c;选择Manage Outputs 选择GELF Output&#xff0c;右边选择刚才创建好的test。 2.安装logstash&#xff0c;作为中间临时…

《Java-SE-第三十四章》之Optional

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

C#小轮子:Visual Studio自动编译Sass文件

文章目录 前言插件安装插件使用compilerconfig.jsonsass输入和css输出&#xff08;自动生成&#xff09;默认配置&#xff08;我不懂就不去动他了&#xff09; 前言 我们知道css文件用起来太麻烦&#xff0c;如果样式一多&#xff0c;嵌套起来用css样式就眼花缭乱。Sass使用层…

Kafka的下载和安装

一、Kafka下载和安装 下载地址&#xff1a;https://kafka.apache.org/downloads 下载完毕解压即可 linux解压命令tar -zxvf kafka_2.13-3.5.1.tgz&#xff0c;linux环境下指令是在\kafka_2.13-3.5.1\bin目录。 windows直接解压即可&#xff0c;windows环境下指令是在kafka_2.…

强化学习-信任区域策略优化和近端策略优化(第7章)

来源书籍&#xff1a; TENSORFLOW REINFORCEMENT LEARNING QUICK START GUIDE 《TensorFlow强化学习快速入门指南-使用Python动手搭建自学习的智能体》 著者&#xff1a;[美]考希克巴拉克里希南&#xff08;Kaushik Balakrishnan&#xff09; 译者&#xff1a;赵卫东 出版…

Rust 编程小技巧摘选(7)

目录 Rust 编程小技巧(7) 1. 交换变量 2. 翻转数组 3. for_each() 用法 4. 结构体 Display trait 5. HashMap 和 BTreeMap 6. 遍历输出哈希表 7. 分离奇数和偶数 8. 判断素数&#xff08;质数&#xff09; Rust 编程小技巧(7) 1. 交换变量 与python, go等语言用法类…

计算机网络:网络字节序

目录 一、字节序1.字节序概念2.字节序的理解&#xff08;1&#xff09;大端模式存储数据&#xff08;2&#xff09;小端模式存储数据 二、网络字节序 一、字节序 1.字节序概念 字节序&#xff1a;内存中存储多字节数据的顺序。 难道存储数据还要看顺序吗&#xff1f; yes。内…

【将回声引入信号中】在语音或音频文件中引入混响或简单回声,以研究回声延迟和回波幅度对生成的回波信号感知的影响(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…