计算机网络:网络层 —— 网络地址转换 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.rhkb.cn/news/464716.html

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

相关文章

C++进阶:unordered_map和unordered_set的使用

目录 一.unordered_set系列 1.1unordered_set类的介绍 1.2unordered_set与set的差异 二.unordered_map的系列 三.unordered_multimap/unordered_multiset 一.unordered_set系列 1.1unordered_set类的介绍 • unordered_set的声明如下,Key就是unordered_set底层…

【6G 需求与定义】ITU(国际电联)对全球6G标准的愿景

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…

java:题目:用Java实现简单的自取取款操作

import java.util.Scanner; public class ATM {public static void main(String[] args){//自主取款主类Scanner scnew Scanner(System.in);System.out.println("请输入账户号码:");String BankAccoutsrsc.nextLine();/BankAccout3 newBankAccoutnew Bank…

Windows 部署非安装版Redis

1.下载Redis https://github.com/microsoftarchive/redis/releases 选择下载zip包,如Redis-x64-3.0.504.zip,并解压 2.启动非安装版redis服务 进入到redis目录,打开cmd 执行命令 redis-server.exe redis.windows.conf 3.登录redis客户端…

【连续多届检索,ACM出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17)--冬季主会场

第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 会议官网:www.icbar.net 2024 4th International Conference on Big Data, Artificial I…

HTML 基础概念:什么是 HTML ? HTML 的构成 与 HTML 基本文档结构

文章目录 什么是 HTML ?HTML 的构成 ?什么是 HTML 元素?HTML 元素的组成部分HTML 元素的特点 HTML 基本文档结构如何打开新建的 HTML 文件代码查看 什么是 HTML ? HTML(超文本标记语言,HyperText Markup L…

网络编程 TCP编程 Linux环境 C语言实现

所有基于数据传输通信的程序,都会被分成两种角色: 1. 服务端:又称为服务器 server 提供一种通信服务的进程 基本工作过程是:1> 接收请求数据 2> 处理请求数据 3> 发送处理结果 2. 客户端:client 使用一种通…

第二十九章 Vue之插槽

目录 一、引言 二、默认插槽 2.1. 默认插槽基本语法 2.2. 完整代码 2.2.1. main.js 2.2.2. App.vue 2.2.3. MyDialog.vue 2.3. 运行效果 三、插槽后备内容(默认值) 3.1. 插槽后备内容基本语法 3.2. 完整代码 3.2.1. main.js 3.2.2. App.vu…

宠物领养救助管理软件有哪些功能 佳易王宠物领养救助管理系统使用操作教程

一、概述 佳易王宠物领养救助管理系统V16.0,集宠物信息登记、查询,宠物领养登记、查询, 宠物领养预约管理、货品进出库库存管理于一体的综合管理系统软件。 概述: 佳易王宠物领养救助管理系统V16.0,集宠物信息登记…

【ESP32+MicroPython】开发环境部署

本教程将指导你如何在Visual Studio Code(VSCode)中设置ESP32的MicroPython开发环境。我们将涵盖从安装Python到烧录MicroPython固件的整个过程,以及如何配置VSCode以便与ESP32进行交互。 准备工作 安装Python 确保你的计算机上安装了Pyth…

前端Nginx的安装与应用

目录 一、前端跨域方式 1.1、CORS(跨域资源共享) 1.2、JSONP(已过时) 1.3、WebSocket 1.4、PostMessage 1.5、Nginx 二、安装 三、应用 四、命令 4.1、基本操作命令 4.2、nginx.conf介绍 4.2.1、location模块 4.2.2、反向代理配置 4.2.3、负载均衡模块 4.2.4、通…

mysql之命令行基础指令

一:安装好mysql后,注册好账号密码。 二:在命令行进行登录的指令如下 mysql -u用户名 -p 例如:mysql -uroot -p; 然后按下回车,进入输入密码。 三:基本指令: 1:查看当前账户的所有…

小白直接冲!BiTCN-BiLSTM-Attention双向时间卷积双向长短期记忆神经网络融合注意力机制多变量回归预测

小白直接冲!BiTCN-BiLSTM-Attention双向时间卷积双向长短期记忆神经网络融合注意力机制多变量回归预测 目录 小白直接冲!BiTCN-BiLSTM-Attention双向时间卷积双向长短期记忆神经网络融合注意力机制多变量回归预测效果一览基本介绍程序设计参考资料 效果一…

论文概览 |《IJGIS》2024.09 Vol.38 issue9

本次给大家整理的是《International Journal of Geographical Information Science》杂志2024年第38卷第9期的论文的题目和摘要,一共包括9篇SCI论文! 论文1 A movement-aware measure for trajectory similarity and its application for ride-sharing …

青少年编程能力等级测评CPA Python编程(一级)

青少年编程能力等级测评CPA Python编程(一级) (考试时间90分钟,满分100分) 一、单项选择题(共20题,每题3.5分,共70分) 下列语句的输出结果是( )。 print(35*2) A&a…

Linux网络命令:它用于实时监控网络接口的状态变化的命令 ip monitor详解

目录 一、概述 二、使用 1、语法 2、对象类型 3、常用选项 4、获取帮助 三、 示例 1. 监视链路层变化 2. 监视所有的网络变化 3. 仅监视路由表的变化 4. 监视特定网络接口的状态变化: 5. 监视网络接口地址的变化 四、实际应用 五、其他事项 一、概述 …

从APP小游戏到Web漏洞的发现

一、前因: 在对一次公司的一个麻将游戏APP进行渗透测试的时候发现,抓到HTTP请求的接口,但是反编译APK后发现没有在本身发现任何一个关于接口或者域名相关的关键字,对此感到了好奇。 于是直接解压后everything搜索了一下&#xff…

【JavaSE】(2) 方法

一、认识方法 1. 方法的定义 修饰符 返回类型 方法名(形参类型 形参名, ......){......return 返回值; } 示例代码: 2. 方法的作用 增强代码的可复用性。(避免重复造轮子)增强代码的易管理性。(改方法就行,不用到处…

柯桥零基础学日语日语培训中为什么不说「ご客様」而是「お客様」?

宝子们是不是经常会看到,很多日语单词前面都有假名「お」或「ご」。 但是又总弄不明白为什么要用「お」、「ご」,用哪个更合适? 今天我们就来好好地扒一扒吧~ 在日语中「お・ご」这样的接头词很常见,一般用来表示美化。 美化语的…

【Linux】简易版shell

文章目录 shell的基本框架PrintCommandLineGetCommandLineParseCommandLineExecuteCommandInitEnvCheckAndExecBuildCommand代码总览运行效果总结 shell的基本框架 要写一个命令行我们首先要写出基本框架。 打印命令行获取用户输入的命令分析命令执行命令 基本框架的代码&am…