草庐IT

【每天学习一点新知识】互联网安全--NAT和PAT

RexHarrr 2023-04-03 原文

目录

1、NAT

1.1 为什么要有NAT

1.2 NAT概述

1.3 私有IP地址

1.4 静态NAT/动态NAT

2、PAT

2.1 PAT概述

2.2 静态PAT/动态PAT


1、NAT

1.1 为什么要有NAT

我们都知道IP v4的地址由32位(4个字节)组成,因此地址空间中只有4,294,967,296(2)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。由 IANA 管理的 IPv4 位址,于 2011 年 1 月 31 日完全用尽

所以为了缓解IP地址枯竭,节省地址空间的需要,出现了NAT,即网络地址转换技术。

1.2 NAT概述

出于安全和节省地址空间的需要,内部网络的终端只分配私有IP地址,但私有IP地址无法与公网中的终端进行通信,所以需要为内网终端分配一个公共网络可以识别的全球IP地址以实现内外网的通信。在通信过程中,边界路由器(连接内网和外网的路由器)实现私有IP地址和全球IP地址的转换,这就是NAT技术。

 如图所示,边界路由器R根据内外网的地址转换来实现终端A和终端B的通信。

我们通常将内部网络使用的地址叫做私有地址,将外部网络使用的地址叫全球地址。

  • 内部本地地址:内部网络终端使用的本地地址
  • 内部全球地址:内部网络终端使用的全球地址
  • 外部本地地址:外部网络终端使用的本地地址
  • 外部全球地址:外部网络终端使用的全球地址

1.3 私有IP地址

内部网络使用的私有地址和公共网络使用的全球地址不能重复

  • 10.0.0.0/8,即10.0.0.0~10.255.255.255

  • 172.16.0.0/12,即172.16.0.0~172.31.255.255

  • 192.168.0.0/16 ,即192.168.0.0~192.168.255.255

 为什么不同的内部网络可以使用相同的私有地址?

因为内部网络使用的私有地址对外是透明的,是不可见的,两个使用相同私有地址空间的内部网络相互通信,看到的也都是对方经过转换后的全球IP地址。

1.4 静态NAT/动态NAT

  • 静态NAT:是一对一的,一个私有IP固定对应到一个公网IP上实现地址的转换(直接写死)
  • 动态NAT:提出了地址池的概念,将一个范围内可用的公网IP放进地址池中,当内部主机访问外部网络时为其临时分配一个地址池中未使用的地址,当该主机不再访问外部网络时回收分配的地址。因此,内部网络的私有IP地址转换为公用IP地址时,IP地址对是不确定的。(当地址池中的IP地址已经被分配完之后,内部终端想要与外部通信,路由器会丢弃该数据包)

 动态NAT必须是内部网络终端发起会话请求,只能实现单向会话

静态NAT可以实现双向会话

2、PAT

2.1 PAT概述

如果同时有多个内部网络终端想要访问Internet中的服务器,而全球IP地址只有一个的情况下,我们就使用PAT(端口地址转换)来实现,让这些内部终端使用同一个IP地址,用不同的端口号来区分。 

 边界路由器在用全球IP取代私有IP时,必须用内部网络内唯一的源端口号取代IP分组的原始源端口号,在地址转换表中记录,将源IP地址、源端口号、全球地址、目的端口号绑定在一起。

当服务器的回应IP分组到达路由器时,通过目的端口号查找转换表,找到对应项,再用源IP地址、源端口号替换目的IP地址、目的端口号,将IP分组继续转发给内部网络。

说到底就是内部外部的IP地址及端口号的转换

不同的终端可能用相同的源端口号来标识终端内的进程,所以边界路由器必须用内部网络内唯一的源端口号取代IP分组中的原始源端口号,以此实现用源端口号唯一表示内部网络内终端的目的。

2.2 静态PAT/动态PAT

  • 静态PAT:需要手工配置建立地址转换表实现某个本地IP和内部网络内唯一端口号之间的映射(直接写死)
  • 动态PAT:多个用户同时用一个地址时,路由器用上层的TCP或UDP的端口等唯一标识某个地址。地址转换表中的每一项和某个会话绑定在一起,在会话开始时创立转换项,会话结束时删除该转换项。每一个会话用源和目的IP地址、源和目的端口号作唯一标识。

 

网上搜了很多资料,说PAT是NAT的一部分,就是当只有一个全球IP地址,而内部网络中又有多个终端想要与外网通信时,NAT也无法实现一对一分配IP地址,所以使用PAT,用端口号来进行进一步的区分。 

有关【每天学习一点新知识】互联网安全--NAT和PAT的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  7. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  8. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  9. ruby-on-rails - 使用 Ruby 标准 Logger 每天只创建一个日志 - 2

    我正在使用ruby​​标准记录器,我想要每天轮换一次,所以在我的代码中我有:Logger.new("#{$ROOT_PATH}/log/errors.log",'daily')它运行完美,但它创建了两个文件errors.log.20130217和errors.log.20130217.1。如何强制它每天只创建一个文件? 最佳答案 您的代码对于长时间运行的应用程序是正确的。发生的事情是您在给定的一天多次运行代码。第一次运行时,Ruby会创建一个日志文件“errors.log”。当日期改变时,Ruby将文件重命名为“errors.log

  10. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

随机推荐