5.4.2 网络地址转换NAT

5.4.2 网络地址转换NAT

我们知道为了缓解IPv4地址紧缺的问题,相继出现了一系列缓解地址耗尽的解决方案,比如通过子网划分(5.2.8 子网编址)实现网络地址在多个物理网络之间的复用,通过无分类编址(5.2.9 无分类编址和CIDR)消除了地址类别,按照网络规模、按照实际需要分配地址块,通过专用网络内部使用本地地址(5.4.1 虚拟专用网VPN)从而节约地址空间,这里我们就需要思考一个问题如果一个内部网络采用本地地址,是如何与外网进行通信呢?

如图

NAT

我们在5.4.1 虚拟专用网VPN中知道两个部门网络之间的通信是可以利用隧道传输来实现的,但是如果说部门A网络的主机X,要访问因特网上的百度服务器,又会是什么情形?这是我们面临新的问题。当然,从X到服务器的传输当然没有问题,因为目的地址是百度服务器的IP地址,属于全球地址,但是反过来呢?也就是百度服务器在返回数据报时却遇到问题了,由于数据报的目的地址属于私有地址,是无法通过因特网进行传输的,那么我们是如何解决呢?请注意,在内部网络A与因特网相连接的路由器R1上必须要分配一个合法的全球IP地址,图中所示的是218.2.216.24,否则的话内外网之间是无法互联互通的。我们就可以利用这个全球地址,为内网内的所有主机进行服务,通过在路由器R1上安装NAT软件来实现地址的转换。

一、网络地址转换NAT

网络地址转换NAT(Network Address Translation),装有NAT软件的路由器被称为NAT路由器,它至少会有一个全球的IP地址,所有使用本地地址的主机在和外界通信的时候都要在NAT路由器上将它的本地地址转换成全球地址才能和因特网连接。

  • 网络地址转换NAT方法于1994年提出,用来解决本地编址的内部网络与外网通信的问题。
  • 需要在专用网连接到因特网的路由器上安装NAT软件,装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球地址IP。
  • 所有使用本地地址的主机与外界通信时都要在NAT路由器上将其本地地址转换成全球地址才能和因特网连接。

二、NAT实现地址转换工作原理

如图

发送

为了便于理解,我把网络连接图简化如上图所示,左边是一台内部网络的主机,分配了本地地址10.10.138.174,它想要访问百度的服务器www.baidu.com,服务器地址是115.239.211.110。显然由内网主机产生的请求报文先到达安装NAT软件的路由器,然后在通过互联网传送到达百度的服务器,这里我们就来说明一下内部主机产生的数据报在传输的过程中地址是如何发生变化的,源端发出的IP数据报携带的源IP地址10.10.138.174,目的地址115.239.211.110,该数据报传送到达NAT路由器后,运行在路由器上的NAT软件会将原始的内部地址替换成NAT路由器配置的全球IP地址218.2.216.24,并将替换前后的这对地址以及外网主机地址记录在映射表中,映射表包括三项信息分别是专用地址、NAT全球地址、外部地址经过地址转换后请求报文,就能够经过因特网传送给外部的服务器。

服务器返回数据如图

返回

服务器接收并且解析请求报文以后产生应答报文,在应答报文的首部中源IP地址填写的是115.239.211.110,目的IP地址填写的是218.2.216.24,应答报文传输到NAT路由器,NAT软件将根据目标地址以及服务器地址在映射表里去查找对应的内部IP地址10.10.138.174,对目的地址进行替换,也就是把全球地址218.2.216.24替换成10.10.138.174,然后就可以完成数据报的交付。

从转换过程看,地址转换发生在两个方向上。从内网到外网在源地址字段中将私有的地址转换成全球的地址,从外网到内网传输的时候将目的IP地址从全球的地址再转换成私有地址,虽然说转换的思想是很容易理解,当然这里地址的转换很受限制,也就是说如果NAT路由器仅仅配置一个合法的全球地址,内网内将不允许两台或者多台主机同时访问百度服务器,当然在网络运行过程中这种是很不现实的。因此我们仅仅进行IP地址转换是不够的。实际的NAT软件还需要借助于传输层的地址转换,传输层的地址转换我们后面再聊,**这里我们只需要知道传输层地址叫做端口号。**用来代表发送或者接收数据的应用进程的标识。下面我们就来看一下引入了端口转换过以后NAT软件是如何来工作的。

如图

端口发送

同样源端主机产生请求报文,携带的源和目的地址与前面一样,标识客户进程的源端口号是21043,目的服务器端口号是80,请求分组到达了NAT路由器后在源IP地址中更换为全球地址218.2.216.224同时源端口号也发生了变化(这里要注意),由原来的21043变成了14013,这两对地址的对应关系连同目的端口号和协议号也被记录在了映射表中,由于引入了端口号的转换,此时的映射表与前面的映射表就不同了,除了专用地址和NAT全球地址外部地址之外又增加了内部端口、NAT端口、外部端口、协议四个字段。

服务器接收返回数据如图

端口返回

服务器接收并且解析请求分组以后返回了一个应答分组,其中源IP地址115.239.211.110目的IP地址218.2.216.24,源端口号80,目的端口号1403,应答分组到达了NAT服务器,NAT软件同样根据两对地址信息去查找映射表,找到匹配表项之后并且对目的IP地址和目的端口号完成相应的替换工作也就是用内部的端口去替换NAT端口,用内网地址替换路由器的全球地址,经过地址转换过之后,更改过的数据报就能够顺利的传输到达目的主机。

通过这几个示例我们对NAT的工作原理有了基本的认识,这里大家一起来讨论一下如果NAT路由器仅仅配置一个全球IP地址,内网的两台主机可以同时ping外网的同一台主机么?我们可以用NAT地址转换的过程进行分析,欢迎大家评论区参与讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android PagerSnapHelper改造RecyclerView为ViewPage,kotlin

Android PagerSnapHelper改造RecyclerView为ViewPage&#xff0c;kotlin <?xml version"1.0" encoding"utf-8"?> <androidx.recyclerview.widget.RecyclerView xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tool…

端午节粽子(python)

目录 前言 正文 粽叶绘制 粽叶绳绘制 祝福语绘制 源代码 总结 前言 今天端午节&#xff0c;然后昨天也学习一下绘图的相关知识&#xff0c;然后就想看一下能不能画一下&#xff0c;结果还是有点困难的&#xff0c;用CharAI生成简直一言难尽了。后面是找了一个改了一下。 …

【剑指offer刷题记录 java版】数组双指针 之 其它题目

本系列文章记录labuladong的算法小抄中剑指offer题目 【剑指offer刷题记录 java版】数组双指针 之 其它题目 剑指 Offer II 018. 有效的回⽂剑指 Offer 58 - I. 翻转单词顺序剑指 Offer 21. 调整数组顺序使奇数位于偶数前⾯剑指 Offer 57. 和为s的两个数字剑指 Offer II 007. 数…

STM32单片机LED显示屏驱动原理与实现

STM32单片机驱动LED显示屏的原理与实现方法与Arduino类似&#xff0c;但涉及到的具体硬件资源和库函数可能会有所不同。下面是一个详细的介绍&#xff1a; 原理&#xff1a; STM32单片机驱动LED显示屏的原理是通过控制GPIO引脚的电平状态来控制LED的亮灭。通过设置引脚的输出电…

Mybatis源码分析_Mapper接口是如何实例化的 (2)

我们在使用Springmybatis的时候&#xff0c;经常都是直接写一个接口和一个对应的 ***Mapper.xml文件&#xff0c;然后业务代码就可以直接注入这个接口了。它是如何做到的呢&#xff1f; 接口&#xff1a; xml 想搞清楚这个问题&#xff0c;那还是要从Mybatis底层源码进行分析的…

轻量级的深度学习框架Tinygrad

Tinygrad是一个轻量级的深度学习库&#xff0c;它提供了一种简化和直观的方法来理解和实现神经网络。在本文中&#xff0c;我们将探讨Tinygrad及其主要功能&#xff0c;以及它如何成为那些开始深度学习之旅的人的有价值的工具。 什么是Tinygrad? Tinygrad是一个开源的深度学习…

Redis 通用命令

通用命令介绍 Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令&#xff0c;比如删除键、对键进行改名、判断键是否存在等。简单说&#xff0c;就是 keys 分类的命令&#xff0c;如下图。 上图中圈中的部分&#xff0c;就是所谓的通用的命令…

【C语言初阶】带你轻松玩转所有常用操作符(1)

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_&#xff0c;最近要准备期末复习了&#xff0c;可能更新的就不会那么频繁了&#xff0c;下个星期回复正常更新。 操作符详解1 前言一.操作符的分类二.算数操作符三.移位操作符1.二进制表示的三种形式2.…

matlab实现语音信号的频域分析及应用

1.语音信号本质上是非平稳信号。但我们可以假设语音信号在一个短时间内是平稳的&#xff0c;这样我们用稳态分析方法处理非平稳信号。应用在傅立叶分析就是短时傅立叶变换。 语音的频域分析&#xff1a;包括语音信号的频谱、功率谱、倒频谱、频谱包络等. 常用频域分析方法&am…

mySql和VSC++

确认主机服务里的mysql服务已打开 使用组合键“winR”运行“services.msc”&#xff0c;进入本地服务窗口&#xff1b; 2.进入本地服务窗口后&#xff0c;在右侧服务列表中&#xff0c;查找到“ mysql ”服务选项&#xff1b; 3.查找到mysql服务选项后&#xff0c;双击打开mysq…

linux安装anaconda

linux安装anaconda 1、下载anaconda&#xff1a; Conda 是一个强大的包管理器和环境管理器&#xff0c;您可以在 Windows 的 Anaconda Prompt 或 macOS 或 Linux 的终端窗口中与命令行命令一起使用。 换句话说&#xff0c;我把Conda理解为前端的npm或yarn&#xff0c;后端的…

二进制部署k8集群(上)搭建单机matser和etcd集群

1. 单机matser预部署设计 组件部署&#xff1a; 2.操作系统初始化配置 注意&#xff1a;该操作在所有node节点上进行&#xff0c;为k8s集群提供适合的初始化部署环境 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld iptables -F && iptables -t n…

Java-三种基本控制结构及相关面试题

文章目录 前言一、 顺序控制结构1.1 概念1.2 代码1.3 NS图中体现 二、分支控制结构2.1 概念2.2 if语句2.3 switch语句2.4 NS图中的体现 三、循环控制结构3.1 概念3.2 for循环3.3 while循环3.4 do-while循环3.5 增强 for 循环NS图中的体现 四、相关面试题什么是控制流语句&#…

从零开始:如何用Python建立你的第一个人工智能模型

1. 摘要&#xff1a; 在这篇文章中&#xff0c;我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手&#xff0c;还是有经验的开发者想进一步探索人工智能领域&#xff0c;这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处…

macOS Monterey 12.6.7 (21G651) Boot ISO 原版可引导镜像

macOS Monterey 12.6.7 (21G651) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Lin…

2023年大学计算机专业实习心得14篇

2023年大学计算机专业实习心得精选篇1 20__年已然向我们挥手告别而去了。在20__年初之际&#xff0c;让我们对过去一年的工作做个总结。忙碌的一年里&#xff0c;在领导及各位同事的帮助下&#xff0c;我顺利的完成了20__年的工作。为了今后更好的工作&#xff0c;总结经验&…

《Java黑皮书基础篇第10版》 第17章【笔记】

第十七章 二进制I/O 17.1 引言 文件可以不严谨的分类为文本文件和二进制文件。文本文件指的是可以用文件编辑器进行查看和修改的&#xff0c;二进制文件则不可以使用文本编辑器查看和修改。 例如&#xff0c;Test.java文件储存在文本文件中&#xff0c;因此可以用文本编辑器…

Web安全测试中常见逻辑漏洞解析(实战篇)

前言&#xff1a; 越权漏洞是比较常见的漏洞类型&#xff0c;越权漏洞可以理解为&#xff0c;一个正常的用户A通常只能够对自己的一些信息进行增删改查&#xff0c;但是由于程序员的一时疏忽&#xff0c;对信息进行增删改查的时候没有进行一个判断&#xff0c;判断所需要操作的…

leetcode188. 买卖股票的最佳时机 IV.动态规划-java

买卖股票的最佳时机 IV leetcode188. 买卖股票的最佳时机 IV题目描述 动态规划代码演示 动态规划专题 leetcode188. 买卖股票的最佳时机 IV 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-st…

从零构建后端项目-创建SpringBoot项目配置MyBatis

目录 主体介绍 创建SpringBoot项目主要步骤 配置MyBatis 整合高级功能 创建SpringBoot项目 配置Tomcat 配置MySQL数据源 配置Redis数据源 配置MongoDB数据源 运行项目&#xff0c;检测配置 配置MyBatis 创建IDEA数据库连接 生成MyBatis各种文件 配置MyBatis 配…