网络地址转换NAT

2023-11-01

1、局域网内主机如何与互联网上主机通信

  假设局域网内主机分配到本地IP地址,但想和互联网上的主机通信。那么应当采取什么措施呢?
  最简单的办法就是设法申请一些全球IP地址。但这几乎无法做到,因为IPv4地址资源很早就被列强瓜分完毕(ipv4地址满打满算只有42.9亿,去掉保留地址,组播地址,能用的只有36亿分。据说我们全国的全球IPv4不及美国一所大学的IPv4 地址数量)。目前使用得最多的方法是采用网络地址转换。
  网络地址转换NAT(Network Address Translation)方法是在1994年提出。这种方法需要在局域网连接到互联网的路由器上安装NAT软件(目前大部分路由器都有此功能)。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接。
在这里插入图片描述

如上图,局域网内主机 A 的 IP 地址为 192.168.0.3,NAT 路由器有一个全球 IP 地址 172.38.1.5。NAT路由器收到从局域网内主机 A 发往互联网上主机 B 的数据报:源 IP 地址是 192.168.0.3,目的 IP 地址是 213.18.2.4。NAT 路由器把IP数据报的源IP地址192.168.0.3,转换为新的源IP地址 172.38.1.5(即NAT路由器的全球IP地址),然后转发出去。因此 B 收到这个IP数据报时,以为 A 的IP地址是 172.38.1.5 。当 B 给 A 发送应答时,IP 数据报的 目的 IP 地址就是NAT路由器的IP 地址。

NAT地址转换表举例

方向 字段 旧的IP地址 新的IP地址
源IP地址 192.168.0.3 172.38.1.5
目的IP地址 172.38.1.5 192.168.0.3

2、网络地址转换与端口号转换

  上述的案例只是一个内网IP对应一个公网ip的转换方法,当一个子网内有很多主机需要连入互联网,就需要加入端口号才能对新旧IP形成映射关系。
NAPT地址转换举例

方向 字段 旧的IP地址和端口号 新的IP地址和端口号
源IP地址:源端口 192.168.0.3:3000 172.38.1.5:4001
源IP地址:源端口 192.168.0.4:3000 172.38.1.5:4002
目的IP地址:目的端口 172.38.1.5:4001 192.168.0.3:3000
目的IP地址:目的端口 172.38.1.5:4002 192.168.0.4:3000

  从表中可以看出192.168.0.3主机向互联网发送IP数据报,其传输层端口号选择为3000。NAT路由器把源IP和端口号都进行转换(TCP,UDP原理一样,此处不分是哪种端口号)。另一台主机192.168.0.4也选择了通用的传输层端口3000。与另一台主机使用的端口号相同,纯属巧合(端口仅在本主机有意义)。NAT路由器把内网中不同的源IP地址都转换为相同的全球IP地址。但对源主机所采用的端口号(不管相同或者不同),则转换为不同的新的端口号。当收到应答报文时,就可以从IP数据报的数据部分找出传输层端口号,然后根据不同的端口号从转换表中找到真正的目的主机。

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

网络地址转换NAT 的相关文章

  • 在 execl 在输出中不可见之前打印

    include
  • linux新手关于嵌入式linux设备驱动的问题

    最近在研究linux驱动 正如我读过的那些文章所说 设备驱动程序模块很可能会根据内核的需要自动加载 因此我想知道内核如何确定为特定设备 声卡 I2C spi 设备 等 我也无法彻底想象内核如何在启动时检测每个硬件设备 与嵌入式linux相关
  • Xvfb 冻结初始化 GLX 扩展

    我正在尝试运行无头 Xvfb 服务器来捕获 Amazon EC2 micro 上的屏幕截图 但它在 GLX 上陷入了困境 我使用此脚本安装了 GLX Xvfb 和所有库 https gist github com joekiller 414
  • 我们如何在使用循环时调用 ansible playbook 中的变量

    我有两个文件 其中这些文件包含server names and server IP s 我想更改 替换一些特定的server names and IP addressees根据要求在两个文件中 这与这篇文章 因为它被要求开设一个新职位 ht
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N

随机推荐

  • Qt中的窗口类

    文章目录 1 QWidget 1 QWidget 2 QDialog 2 1 QMessageBox 2 2 QFileDialog 2 3 QFontDialog 2 4 QColorDialog 2 5 QInputDialog 2 6
  • 三星被曝因ChatGPT泄露芯片机密!韩媒惊呼数据「原封不动」直传美国,软银已禁止员工使用......

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt 计算机视觉 微信技术交流群 明敏 萧箫 发自 凹非寺转载自 量子位 QbitAI 三星引入ChatGPT不到20天 就发生3起数据外泄事件 其中2次和半
  • 不贴代码能说明白Jetpack LiveData原理吗(一)

    LifecycleOwner如何提供周期生命周期的变化 LifecycleObserver如何得知生命周期的变化 LiveData的背后隐藏了多少不为人知的秘密 这一切都要从观察者模式说起 起源 何为观察者模式 在代码中最直接的表现就是在事
  • Arcgis andoid开发之应用百度地图接口实现精准定位与显示

    怀着激动 兴奋的心情 在这个漫天柳絮的季节写下了这片博文 为什么呢 因为困扰我很久的一个技术性的问题得到了解决 发次博文 供大家参观 学习 同时 也以慰藉我长期困扰的心情 好了 废话不再 言归正传 看看这到底是个什么东西 首先 简单地介绍一
  • 设计模式---适配器模式

    适配器模式 基本介绍 适配器模式 Adapter Pattern 将某个类的接口转换成客户端期望的另一个接口表示 主的目的是兼容性 让原本因接口不匹配不能一起工作的两个类可以协同工作 其别名为包装器 Wrapper 适配器模式属于结构型模式
  • 基于Keras_bert模型的Bert使用与字词预测

    基于Keras bert模型的Bert使用与字词预测 学习参考杨老师的博客 请支持原文 一 Keras bert 基础知识 1 1 kert bert库安装 1 2 Tokenizer文本拆分 1 3 训练和使用 构建模型 模型训练 使用模
  • 计算机二级C语言题库(44套真题+刷题软件)第二套

    刷题软件 gongzhonghao 露露IT 1 某带链栈的初始状态为top bottom NULL 经过一系列正常的入栈与退栈操作后 top bottom 20 该栈中的元素个数为 A 1 B 0 C 20 D 不确定 本题的考查知识点是
  • 【Seaborn】绘图工具的魅力

    文章目录 1 seaborn简介 2 seaborn风格 3 seaborn调色板及颜色设置 4 seaborn绘图方式 1 单变量分析绘图 2 绘制双变量联合分布图 3 多变量关系分布图 1 seaborn简介 Seaborn在 Matp
  • pacemaker+corosync中crm命令用法

    注 本文来自 http www 111cn net sys linux 73074 htm 一 crm有两种工作方式 1 批处理模式 就是在shell命令行中直接输入命令 2 交互式模式 crm live 进入到crmsh中交互执行 二 命
  • DHCP协议的运行过程

    DHCP协议的运行过程 预热知识 DHCP协议是使用C S模式 DHCP服务器运行DHCP服务器进程 在用户主机上运行DHCP客户进程 简称为DHCP客户 DHCP协议是TCP IP应用层的协议 使用的是传输层的UDP所提供的服务 DHCP
  • 2022团体程序设计天梯赛题解 Python

    p1 签到题 print I m gonna win Today print 2022 04 23 p2 L1 2 种钻石 5 分 n v list map int input split print n v p3 L1 3 谁能进图书馆
  • Python三维绘图——Matplotlib

    菜鸡的第一篇博客 学习一下大佬的笔记 1 创建三维坐标轴对象Axes3D 方法一 利用关键字 projection 3D 来实现 方法一 利用关键字 objection 3d from matplotlib import pyplot as
  • JAVA【设计模式】开闭原则

    开闭原则 一 设计模式的规范 二 开闭原则 三 示例 开闭原则设计 UML关系图 一 设计模式的规范 设计模式遵循六 原则 单 职责 个类和 法只做 件事 替换 多态 类可扩展 类 依赖 倒置 细节依赖抽象 下层依赖上层 接 隔离 建 单
  • QT-事件循环机制

    QT事件循环理解 一 常见问题 问题 Qt中常见的事件有哪些 答 鼠标事件 QMouseEvent 键盘事件 QKeyEvent 绘制事件 QPaintEvent 窗口尺寸改变 QResizeEvent 滚动事件 QScrollEvent
  • R语言缺失值探索的强大R包:naniar

    简介 缺失值在数据中无处不在 需要在分析的初始阶段仔细探索和处理 在本次示例中 会详细介绍naniar包探索缺失值的方法和理念 它和ggplot2和tidy系列使用方法非常相似 上手并不困难 有时 解释缺失值出现的原因可能很简单 比如 可能
  • 紧跟产业区块链趋势,杭州米链科技运用区块链科技,赋能实体产业

    近日 2020年全球区块链发展趋势报告 发布 报告中指出 进入2020年之后 疫情倒逼全球各国和各行业的数字化进程加速 进而推动互联网服务也进一步升级 即需从消费互联网发展到 产业互联网 产业互联网的发展 对相关信息基础设施的可信 开放 敏
  • 【待完善】常见更改源操作(ubuntu、centos、pip等等)

    1 pip 临时切换 在进行安装时 加上 i https pypi tuna tsinghua edu cn simple选项 如 pip3 install tensorflow model analysis i https pypi tu
  • VisualStudio Code 安装 及常用插件

    首先检查电脑位数64还是32 在电脑桌面 鼠标右键单击 此电脑 属性 系统类型 官网下载页面 https code visualstudio com Download 一 同意协议 二 选择安装路径 英文路径 默认C盘也可以 默认安装路径为
  • 千年虫”bug归来,新一代程序员将如何解决

    新的十年开始了 二十年前 在千禧之年钟声敲响的时候 诸多 Y2K 应急队的程序员坐在电脑前惴惴不安 他们此前刚刚用最简单易行的 懒人方法 修补了一个被称为 千年虫 Millennium Bug 又称 Y2000 problem 简称 Y2K
  • 网络地址转换NAT

    1 局域网内主机如何与互联网上主机通信 假设局域网内主机分配到本地IP地址 但想和互联网上的主机通信 那么应当采取什么措施呢 最简单的办法就是设法申请一些全球IP地址 但这几乎无法做到 因为IPv4地址资源很早就被列强瓜分完毕 ipv4地址