计算机网络:网络层 —— 网络地址转换 NAT

文章目录

    • 网络地址转换 NAT 概述
    • 最基本的 NAT 方法
      • NAT 转换表的作用
    • 网络地址与端口号转换 NAPT
    • NAT 和 NAPT 的缺陷

网络地址转换 NAT 概述

尽管因特网采用了无分类编址方法来减缓 IPv4 地址空间耗尽的速度,但由于因特网用户数量的急剧增长,特别是大量小型办公室和家庭网络接入因特网的需求不断增加,IPv4地址空间即将耗尽的危险仍然没有解除(实际上,因特网号码分配管理局 IANN 于 2011 年 2 月 3 日宣布,IPv4 地址已经分配完毕)。

网络地址转换(NetworkAddress Translation,NAT)技术于 1994 年被提出,用来缓解 IPv4 地址空间即将耗尽的问题。

NAT 能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。

这种方法需要在专用网络连接到因特网的路由器上,安装 NAT 软件。装有 NAT 软件的路由器称为NAT路由器,它至少要有一个有效的外部全球地址 I P G IP_G IPG。所有使用内部专用地址的主机在和外部因特网通信时,都要在NAT路由器上将其内部专用地址转换成 I P G IP_G IPG

最基本的 NAT 方法

在这里插入图片描述

基本流程:

  1. 主机A 向 主机B 发起连接请求

    • 主机A 有一个专用地址 I P A IP_A IPA,它试图与具有全球地址 I P B IP_B IPB 的主机B建立连接。
    • 主机A 生成一个 IP 数据报,该数据报的源地址为 I P A IP_A IPA,目标地址为 I P B IP_B IPB
  2. NAT路由器修改源地址

    • 当IP数据报通过NAT路由器时,路由器将其源地址由 I P A IP_A IPA​ 修改为全局可访问的地址 I P G IP_G IPG

    • 修改后的IP数据报的源地址变为 I P G IP_G IPG,而目标地址仍然是 I P B IP_B IPB

  3. IP 数据报通过因特网到达 主机B:修改后的 IP 数据报通过因特网传递给主机B。

  4. 主机B 响应:主机B收到请求后,生成一个响应的IP数据报,源地址为 I P B IP_B IPB​,目标地址为 I P A IP_A IPA​。

  5. NAT路由器再次修改目标地址

    • 当响应的 IP 数据报返回并通过 NAT 路由器时,路由器将其目标地址由 I P A IP_A IPA​ 修改回 I P G IP_G IPG
    • 修改后的IP数据报的目标地址变为 I P G IP_G IPG,而源地址仍然是 I P B IP_B IPB
  6. IP 数据报返回至 主机A:修改后的 IP 数据报通过因特网返回至 主机A。

上述最基本的 NAT 方法有一个缺点:如果 NAT 路由器拥有 n(n比较小) 个全球 IP 地址,那么专用网内最多可以同时有 n 台主机接入因特网。若专用网内的主机数量大于 n,则需要轮流使用 NAT 路由器中数量较少的全球 IP 地址。

NAT 转换表的作用

  • NAT 路由器维护一张转换表,记录内网地址 I P A IP_A IPA​ 和外网地址 I P G IP_G IPG​ 的对应关系。
  • 当数据报通过 NAT 路由器时,路由器会查询此表来确定如何修改 源/目标地址

通过这种机制,NAT 允许多台拥有专用地址的计算机共享同一个全球可访问的 IP 地址,从而节省了公网 IP 资源,并且增加了内网的安全性,因为外部网络看不到内网的真实地址。

网络地址与端口号转换 NAPT

由于目前绝大多数基于 TCP/IP 协议栈的网络应用,都使用运输层的传输控制协议 TCP 或用户数据报协议 UDP,为了更加有效地利用NAT路由器中的全球 IP 地址,现在常将NAT转换和运输层端口号结合使用

这样就可以使内部专用网中使用专用地址的大量主机共用NAT路由器上的1个全球IP地址,因而可以同时与因特网中的不同主机进行通信。

NAT 和运输层端口号结合使用,称为网络地址与端口号转换(Network Address and Port Translation,NAPT

现在很多家用路由器将家中各种智能设备(手机、平板、笔记本电脑、台式电脑、物联网设备等)接入因特网,这种路由器实际上就是一个NAPT路由器,但往往并不运行路由选择协议。

主机A、主机B 向服务器发送 IP 数据报

![[网络地址与端口号转换1.png]]

  • 修改后的源端口号是由 NAPT 路由器动态分配的

  • 主机 B 与主机 A 选择的源端口号相同,这纯属巧合(端口号仅在本主机中才有意义)。特意这样举例,就是为了能更好地说明NAPT路由器还会对源端口号重新动态分配

  1. 设备A 和 设备B 分别尝试连接到 服务器C:

    • 设备A 的本地 IP 地址是 192.168.0.6,它尝试连接到 服务器C 的 IP 地址 218.75.230.30 上的端口 80。

    • 设备B 的 本地IP 地址是 192.168.0.9,也尝试连接到同一 服务器C 的相同端口80。

  2. NAPT 路由器修改源地址和源端口号:

    • 对于 设备A 的数据包,NAPT 路由器将其源地址从 192.168.0.6 修改为 113.218.175.235,并为其分配一个新的源端口号 50001

    • 对于 设备B 的数据包,NAPT 路由器同样将其源地址从 192.168.0.9 修改为 113.218.175.235,但为其分配不同的源端口号 50002

  3. 数据包通过因特网到达服务器C:修改后的数据包通过因特网传递给 服务器C。

![[网络地址与端口号转换2.png]]

  1. 服务器C 响应:服务器C 接收到请求后,生成响应的数据包,源地址为 218.75.230.30,目标地址为 113.218.175.235,目标端口号分别为 5000150002

  2. NAPT 路由器再次修改目标地址和目标端口号:当响应的数据包返回并通过 NAPT 路由器时,路由器会根据之前保存的映射表,将目标地址和目标端口号还原为各自的本地地址和端口号。

这样,NAPT 就完成了双向的地址和端口转换,使内网设备能够通过有限的公有IP地址访问互联网。

NAT 和 NAPT 的缺陷

尽管 NAT(和NAPT) 的出现在很大程度上缓解了 IPv4 地址资源紧张的局面,但 NAT(和NAPT) 对网络应用并不完全透明,会对某些网络应用产生影响

NAT(和NAPT) 的一个重要特点就是通信必须由专用网内部发起,因此拥有内部专用地址的主机不能直接充当因特网中的服务器

![[NAT和NAPT的缺陷.png]]

对于目前 P2P 这类需要外网主机主动与内网主机进行通信的网络应用,在通过 NAT 时会遇到问题,需要网络应用自身使用一些特殊的NAT穿透技术来解决。

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

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

相关文章

leetcode 633. 平方数之和 中等

给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a*ab*bc 。 示例 1: 输入:c 5 输出:true 解释:1 * 1 2 * 2 5示例 2: 输入:c 3 输出:false提示&#…

Qt第三课 ----------容器类控件

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

运放进阶篇-多种波形可调信号发生器-产生方波-三角波-正弦波

引言:前几节我们已经说到硬件相关基础的电路,以及对于运放也讲到了初步的理解,特别是比较器的部分,但是放大器的部分我们对此并没有阐述,在这里通过实例进行理论结合实践的学习。而运放真正的核心,其实就是…

蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票:::非常典型的比刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵!!! 关注博主,更多蓝桥杯nice题目静待更新:) 枚举与模拟 一、卡片: 【问题描述】 …

使用Netty实现一个简单的聊天服务器

✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:Netty 🥭本文内容&a…

用discuz开发一款网站自动秒收录源码功能更强悍更安全

用discuz开发一款网站自动秒收录源码功能更强悍更安全 在当今数字化时代,网站的曝光率和访问量是衡量其成功与否的重要指标。为了提升网站的曝光率,自动秒收录技术应运而生。而Discuz平台作为知名的社区管理系统,为开发者提供了丰富的功能和…

绿色能源发展关键:优化风电运维体系

根据QYResearch调研团队最新发布的《全球风电运维市场报告2023-2029》显示,预计到2029年,全球风电运维市场的规模将攀升至307.8亿美元,并且在接下来的几年里,其年复合增长率(CAGR)将达到12.5%。 上述图表及…

ER图的规范画法

ER图相较其他结构化分析方法和面向对象分析方法的图结构来说,还是相对容易不少,不过各位也要注重细节的严谨性。 entity,实体;relationship,关系;相信各位的英语水平不难理解ER图的功能,椭圆代表…

【静态页面】尚品汇 1、设计稿分析及资源准备

目录 1. 准备工作2. 理解设计3. 规划项目结构 1. 准备工作 安装必要的工具:确保你的开发环境已经准备好,包括文本编辑器(如 VSCode)、浏览器等。获取设计文件:获取UI设计稿或者设计文件链接,并确保可以访问…

基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真。本系统包括PV模块,电池模块,电池控制器模块,MPPT模块,PWM模…

nginx代理 proxy_pass

一、location 包含 location /api/ {proxy_pass http://127.0.0.1:85;} 二、location 不包含 location /api/ {proxy_pass http://127.0.0.1:85/;} 三、locaion 包含 location /api {proxy_pass http://127.0.0.1:85;}四、location 包含 location /api {proxy_pass http://127.…

MongoDB笔记01-概念与安装

文章目录 前言一、MongoDB相关概念1.1 业务应用场景具体的应用场景什么时候选择MongoDB 1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 二、本地单机部署2.1 Windows系统中的安装启动第一步:下载安装包第二步:解压安装启动1.命令行参数方式…

IMS高压发生器维修高压电源维修XRG100/1000

IMS高压发生器的硬件组成: 高压控制发生器主要由高压发生器和高压控制器两部分组成。高压控制器是控制调节X射线管管电压和管电流的机构,高压发生器是管电压和管电流产生的执行机构,通过高压控制器对高压发生器进行控制调节,通过高压电缆将高压发生器与X射线管连接…

133.鸿蒙基础01

鸿蒙基础 1.自定义构建函数1. 构建函数-[Builder ](/Builder )2. 构建函数-传参传递(单向)3. 构建函数-传递参数(双向)4. 构建函数-传递参数练习5. 构建函数-[BuilderParam ](/BuilderParam ) 传递UI 2.组件状态共享1. 状态共享-父子单向2. 状态共享-父子双向3. 状态共享-后代组…

MybatisPlus入门(八)MybatisPlus-DQL编程控制

一、字段映射与表名映射 数据库表和实体类名称一样自动关联,数据库表和实体类有部分情况不一样。 问题一:表名与编码开发设计不同步,表名和实体类名称不一致。 解决办法: 在模型类上方,使用TableName注解&#xf…

RNN中的梯度消失与梯度爆炸问题

梯度消失与梯度爆炸问题 循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络.在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有…

Trimble X12三维激光扫描仪正在改变游戏规则【上海沪敖3D】

Trimble X12 三维激光扫描仪凭借清晰、纯净的点云数据和亚毫米级的精度正在改变游戏规则。今天的案例我们将与您分享,X12是如何帮助专业测量咨询公司OR3D完成的一个模拟受损平转桥运动的项目。 由于习惯于以微米为单位工作,专业测量机构OR3D是一家要求…

从分析Vue实例生命周期开始,剖析Vue页面跳转背后执行过程

文章目录 1.概要2.Vue实例生命周期3.生命周期函数解释4.存在父子组件情况页面执行过程5. 分析路由跳转页面执行过程6.扩展补充7.小结 1.概要 本文旨在分析Vue页面进行路由切换时,Vue背后的运行过程,旨在让大家更加清晰地明白Vue页面运行过程中钩子方法的…

git提交冲突的原因及解决方案

一、场景一 1.冲突原因 提交者的版本库 < 远程库 要保障提交者的版本库信息和远程仓库是一致的 2.解决方案 实现本地同步git pull,再提交代码&#xff08;最好每次git push之前都git pull一下&#xff0c;防止这种情况的出现&#xff09; 场景二 1.冲突原因 别人跟你…

【LeetCode】【算法】142. 环形链表II

142环形链表II 题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#x…