NAT技术详解

2023-10-26

前言

        我们知道现在流行的IPv4的IP地址是32位的。那说明IP地址总数是2^32次方个。但是随着互联网的发展,现在的入网设备早就超过了2^32次方个了。拿为什么我们现在的主机IP还够用呢?

        这里用到了NAT技术来解决。

一.NAT技术概念

        在博客网络层IP协议,有介绍到,我们的的IP分为两大类,私网IP地址和公网IP地址。

  • 当主机跨网络通信时,NAT技术可以将报文的目的IP地址转换为路由器的WAN口IP地址。也就是可以将私有IP和公有IP转化的过程。
  • 公网IP是唯一的,使用NAT技术后,可以使得不同局域网内的主机的IP地址可以一样。但是同一局域网内的主机IP地址不能一样。

二.IP地址转化过程

那么这里会有一个问题:由于主机A的IP地址已经被替换,服务器要响应数据给主机A时,怎么发送回去呢?

        在NAT路由器内部会自动生成一张地址转换表。保存了被替换的目的IP地址和替换的IP的映射关系,可以找回上一次被替换的IP地址。

        在客户端发送数据给服务器时建表,在服务器响应客户端时查表。

        这种映射关系是由NAT路由器自动维护的,例如在TCP建立连接时,就会生成这个表,在断开连接后,会删除这个表。

三.地址转换表分类

        3.1 静态NAT

        一个路由器只有一个WAN口IP地址,当一个主机A通信时,经过该路由器,源IP地址被替换成了WAN口IP地址,此时,这个在路由器中生成一张转换表,保存了主机A数据源IP地址和路由器WAN口IP地址的映射关系。此时是一对一的关系,如果另外一主机B也要通过这个路由器通信时,由于WAN口IP地址已经被占用,需要等待主机A通信完。

        3.2 动态NAT

        路由器中有一个外网IP池,里面有多个未使用的IP地址。

        当一个主机A通信时,经过该路由器,路由器会在外网IP池中,去出一个IP地址,替换数据IP报文的源IP地址,然后在转换表中建立,源IP地址和外网IP池使用的地址。其它主机来通信时,也会在外网IP池中,取出一个IP地址,进行替换,建立映射关系,直到使用完。这是一种多对多的关系。

        3.3 NAPT端口多路复用方式

        我们发现静态NAT在一个主机占用路由器的WAN口IP地址后,其它主机都需要等待主机通信完,效率很低。而动态NAT,需要有足够的IP地址。

        NAPT采用端口多路复用方式。使用IP+port来建立映射关系。因为IP+port是唯一的。

         当多台主机经过一个路由器对外通讯时,路由器的WAN口IP地址不变,只需要改变端口号就可以了

         在实际生活中,NAPT技术是用得最多的。

         在转换表中,源IP地址和替换后的IP地址是互相为Key值的,当主机发送数据给服务器,可以通过源IP地址查要替换的IP地址,服务器响应主机,可以通过目的IP地址查要发送的主机地址。

四.NAT技术的缺陷

  • 无法从NAT外部向内部主机建立连接。

        由于转换表的建立需要私网向公网发送数据时建立的,当公网服务器想和私网主机建立连接,由于路由器没有转换表,找不到要建立连接的主机。

        所以两不同局域网主机,不经过公网不能通讯。

  • 转换表的生成和销毁需要额外开销
  • 通讯过程中一旦NAT设备异常,即使存在热备,所有TCP连接也会断开,找不到连接的主机和服务器了。

NAT穿越:为了避免NAT设备故障,转换表不存在,导致连接断开。网络协议的设计者们想让NAT设备自动可以建立转换表,而不需要主机建立连接时触发。

比如:在NAT设备上装载一个软件,不断检测局域网主机的某个端口号是否存在,存在的话,就建立转换表。

但是很遗憾的是,现在解决的每一种方法都不完美,还需要在内部主机、应用程序或者NAT网关上增加额外的处理。

五.NAT设备和代理服务器

        路由器往往具备NAT技术,在网络通信过程中,路由器对数据起到了中转的作用,完成了主机和其它局域网主机的通信。

        代理服务器将客户端发来的请求转化给服务器,服务器返回结果后,代理服务器又将结果返回给客户端。

        NAT设备的功能看起来和代理服务器的功能有点相似。但是它们有很大的区别。

  • 从应用上来讲,NAT设备时网络基础设备之一,解决的时IP地址不足的问题,代理服务器根贴近于具体应用。
  • 从底层实现上。NAT工作在网络层,代理服务器工作在应用层。
  • 从使用上,NAT一般工作在局域网的出口,代理服务器可以工作在局域网,也可以工作在广域网。也可以跨网。
  • 从部署上,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器是一款软件,部署在服务器上。

代理服务器是一种应用比较广泛的应用:可以用来翻墙(广域网中的代理),负载均衡(局域网中的代理)

代理服务器由分为:

  • 正向代理:主机要求代理服务器向目的服务器要某种资源。
  • 反向代理:主机向代理服务器要某种资源。主机不关心资源时从哪台服务器来的,当代理服务器检测到该资源请求很多,会向目标服务器请求大量该资源,缓存再代理服务器中。

用途:

  • 正向代理用于请求的转发。
  • 反向代理往往用作一个缓存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NAT技术详解 的相关文章

随机推荐

  • [系统安全] 十七.Windows PE病毒概念、分类及感染方式详解

    您可能之前看到过我写的类似文章 为什么还要重复撰写呢 只是想更好地帮助初学者了解病毒逆向分析和系统安全 更加成体系且不破坏之前的系列 因此 我重新开设了这个专栏 准备系统整理和深入学习系统安全 逆向分析和恶意代码检测 系统安全 系列文章会更
  • Intellij Idea插件开发-创建项目层级的右键菜单

    在使用Android Studio的过程中 发现自带的一些插件无法满足项目的实际需要 便着手自己开发对应的插件 下面是我开发插件过程中的一个记录 会持续和大家分享 分享一 创建Project右键菜单 1 按照项目向导一步一步创建一个Demo
  • 刷脸支付通过人脸识别就可以完成付款

    发展个人码质优价廉所以说 刷脸支付是建立在长达几年的技术积累和市场认可的基础上建立起来的产品 并非是一蹴而就的 刷脸支付的到来 让我们的支付交易手段迈入一个新的阶梯 也可以说是进入了支付的时代 刷脸支付成为新的支付趋势的原因 缓解对外部媒介
  • 最小二乘法

    首先给出公式 最小二乘法的公式 y a x b 其中式中N是数据点的个数 注意 以上两式具有相同的分母 指逐项加法计算 取和 x指对所有的x值求和 y指对所以的y值求和 x 2 指对所有x的平方求和 xy指对所有的积xy进行取和计算 应注意
  • java-es查询

    目录 1 检索ES数据库 2 检索下级数据 3 1 检索多个字段 匹配同一个值 3 2 must 3 3 should 3 3 1 should 一个key多个value 4 java中匹配ES中多个字段查询 为什么加上 keyword反而
  • iis多进程下的全局变量_全局变量初始化顺序探究

    缘起 上一篇文章 调试实战 dll 加载失败之全局变量初始化篇 中 跟大家分享了一个由于全局变量初始化顺序导致的 dll 加载失败的例子 感兴趣的小伙伴儿可以点击阅读 虽然我们知道了是由于全局变量初始化顺序导致的问题 也给出了解决方案 但是
  • 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(四)

    贴接上回 往期FAQ参考 HarmonyOS FAQ HarmonyOS应用开发相关问题解答 一 HarmonyOS FAQ HarmonyOS应用开发相关问题解答 二 HarmonyOS FAQ HarmonyOS应用开发相关问题解答 三
  • 穷举法解锁华为手机bootloader

    理论 理论一次解锁0 025s 穷举要9999999999999999 0 025 60 60 24 365 190258751年 建议大家还是用dc unlocker解锁 shell 脚本 运气好的可以试试 bin bash gt unl
  • 10_react页面跳转方式

    一 声明式导航 react router 6 之前 match
  • 【PCIe】1: PCIe 硬件时序初始化过程

    目录 1 前言 2 PCIe理论带宽 3 PCIe连接器引脚定义 4 关键信号描述 4 1 PERST 4 2 REFCLK 和REFCLK 信号
  • Java运行时动态加载类之ClassLoader加载class及其依赖jar包

    需求场景是 通过ClassLoader动态加载外部class文件 class文件又依赖某个具体jar包 需要动态加载jar包 采用URLClassLoader 1 xml配置文件
  • 封装v-loading全局自定义指令

    当我们刷新页面或者是首次加载的时候 如果后端数据请求比较慢的情况下 页面是会出现白屏情况的 所以我们可以使用 v loading 去优化一下 增加用户的体验性 我们可以有两种方式去实现 1 定义一个 loading 的组件 然后在每一个需要
  • Python---自动生成二维码

    专栏 python 个人主页 HaiFan 专栏简介 本专栏主要更新一些python的基础知识 也会实现一些小游戏和通讯录 学时管理系统之类的 有兴趣的朋友可以关注一下 自动生成二维码 二维码的本质上 就是一段字符串 我们可以把任意的字符串
  • 一位大三学生(准大四)面试网络工程师后的一些想法

    首先声明 这是我面试一家公司的网络工程师后想要表达的一些东西 早就面试完了 但是一直现在才发 以上均为个人想法 本科大学就不说名字了吧 非211 985 是省重点建设高校 省内知名 省外无名 本人专业通信 但是对这个专业无感 所以投身于了网
  • 成为一名黑客(网络安全),需要掌握哪些黑客技能?

    前言 黑客技能是一项非常复杂和专业的技能 需要广泛的计算机知识和网络安全知识 你可以参考下面一些学习步骤 系统自学网络安全 在学习之前 要给自己定一个目标或者思考一下要达到一个什么样的水平 是学完找工作 进大厂 还是兴趣学习提升 成为一个黑
  • Etcd恢复报错:error listing data dir: /var/lib/etcd/default.etcd

    通过systemd托管的etcd数据备份还原无法启动服务并且报错 error listing data dir var lib etcd default etcd 但是单独执行启动命令可以 usr bin etcd debug name d
  • 各种数据结构的时间复杂度分析

    对于同一个数据结构来说 底层实现的不同往往会呈现出不同的时间复杂度 以数组为例 普通数组实现 顺序数组实现 二分搜索树 平衡 插入 O 1 O n O logn 查找 O n O logn O logn 删除 O n O n O logn
  • 青龙面板及使用(拔毛助长)

    提示 码文不易 来源 学习日常 前言 简单说一下这个原理吧 就是把写好的脚本挂在面板上 让他定时运行 得有个服务器 我用的是腾讯的 搭建的问题 直接搜吧 我就不在过多说些什么了 最好有俩种设备 安卓 苹果 知识储备的话 懂点python j
  • c语言中空格算空行吗,1、程序中空格与空行使用规范

    在程序代码中 善用空格与空行 可使程序板式更加优美 空格 使用 1 在C语言的关键字 像if for while switch等 之后要留有空格 以突显出该关键字 在函数之后不要留空格 紧跟左括号 以与关键字作区别 但在函数定义的参数之间
  • NAT技术详解

    前言 我们知道现在流行的IPv4的IP地址是32位的 那说明IP地址总数是2 32次方个 但是随着互联网的发展 现在的入网设备早就超过了2 32次方个了 拿为什么我们现在的主机IP还够用呢 这里用到了NAT技术来解决 一 NAT技术概念 在