当前位置: 首页 > article >正文

【Linux】【网络】NAT-->不同子网下客户端无法通信原因

【Linux】【网络】NAT–>不同子网下客户端无法通信原因

之前发现了这个问题 大概知道是由于公网IP和私网IP的原因 但是具体原因仍然不是很清楚 现在大概有了些浅薄的理解 写一下自己的理解和部分转载的文章。

首先说明一下 网关,NAT和路由器:(前面有提到过什么是公网ip,什么是私网ip)

1. 网关(Gateway)

定义

网关是 连接不同网络的设备,用于数据包在不同网络之间的 转发和转换
当一台设备想要访问不同网络的资源(比如从局域网访问互联网),它需要通过网关进行通信。

作用

  • 充当网络之间的桥梁(例如,家用网络连接到 ISP)。
  • 负责 IP 数据包的转发,帮助设备访问外部网络。
  • 通常是路由器的 IP 地址(如 192.168.1.1)。

示例

  • 你的电脑 IP 地址192.168.1.100
  • 你的 网关(路由器)IP192.168.1.1
  • 你的网关会将你的数据 转发到外部互联网

2. NAT(网络地址转换,Network Address Translation)

定义

NAT 是一种 地址转换技术,用于解决 IPv4 地址短缺问题。它允许多个设备共享一个 公网 IP 访问互联网。

作用

  • 将私有 IP 地址转换为公网 IP,使局域网设备可以访问互联网。
  • 隐藏内网设备的真实 IP 地址,提高安全性
  • 提供端口映射功能,支持外部设备访问内部服务(如端口转发)。

示例

假设你家里的两台设备访问互联网:

设备 1:192.168.1.100 → 通过 NAT 变为 203.0.113.5:50001
设备 2:192.168.1.101 → 通过 NAT 变为 203.0.113.5:50002

外部服务器只能看到 203.0.113.5:50001 和 203.0.113.5:50002,而不知道设备 1 和 2 的内网地址。


3. 路由器(Router)

定义

路由器是 专门用于管理网络流量的设备,用于在多个网络之间 选择最佳路径转发数据包

作用

  • 连接多个网络(如局域网和互联网)
  • 转发数据包到不同的子网(如 192.168.1.0/24192.168.2.0/24)。
  • 通常内置 NAT 功能,允许多个设备共享一个公网 IP。

4. 网关、NAT 和路由器的关系

设备作用是否包含 NAT是否充当网关
网关(Gateway)连接不同网络的设备❌ 不一定有✅ 主要功能
NAT进行 IP 地址转换✅ 核心功能❌ 不是网关
路由器(Router)负责数据包转发✅ 一般都有✅ 通常是网关

总结

概念作用关键特点
网关(Gateway)连接不同网络设备访问外网必须经过网关
NAT(网络地址转换)内网设备共享公网 IP解决 IPv4 地址不足问题
路由器(Router)选择最佳路径、转发数据连接多个网络,通常带有 NAT 功能
  • 路由器是一个包含 NAT 功能的网关,它帮助内网设备访问外网。
  • NAT 负责转换 IP 地址,确保局域网设备可以共享公网 IP。
  • 网关是连接不同网络的桥梁,通常就是你的路由器。

接下来详细说明NAT

NAT

由于全球联网设备越来越多,但 IPv4 地址资源有限
所以,我们需要一种技术,让多个设备「共用」同一个 IP 地址,来缓解 IPv4 地址不够用的问题。

NAT 可用于内网 IP 地址(以下简称为「内网 IP」)和公网 IP 地址(以下简称为「公网 IP」)之间的转换。

例如家庭中的多个联网设备,都拥有各自的内网 IP,无线路由器运行 NAT 功能;家中的设备向外发送数据时,数据中的内网 IP,在无线路由器上会被转换为公网 IP;外部数据发送到家庭设备时,数据中的公网 IP,会被转换为内网 IP。

源端口,目的端口,源IP,目的IP 是我们在网络中能够准确发送数据到对端,对端回复我们的重要要素。
在这里插入图片描述
从下图中可以看出在不考虑NAT的情况下整个的简单流程:
在这里插入图片描述
那么,如果用户的电脑是内网设备,经过了 NAT,使用浏览器访问网站时,的过程是这样的:

  1. 首先,浏览器会发送请求报文,报文的源 IP 为电脑的内网 IP (此处以 192.168.1.126 为例)。
  2. 当报文到达路由器后,路由器将报文源 IP 修改为公网 IP(1.1.1.10),并分配一个新的源端口号。在这个过程中,路由器会记录下源 IP 和源端口号,在转换前后的对应关系,形成 NAT 表项
  3. 路由器将源 IP 和源端口号转换后的报文发送到服务器,服务器回应的报文,目的 IP 和目的端口端口号,就是请求报文中的源 IP 和源端口号。这样,报文就能根据目的 IP,到达用户的路由器上。
  4. 路由器收到来自服务器的报文,根据 NAT 表项,将目的 IP 和目的端口号,从外部 IP、外部端口,转换为内部 IP、内部端口。这样,报文就能顺利到达用户电脑的浏览器上。

在这里插入图片描述
从上面的例子中可以看出,NAT 通过记录端口号2、IP 地址的对应关系,将出方向报文的源 IP、源端口号从内部地址转换为外部地址,将入方向报文的目的 IP、目的端口号从外部地址转换为内部地址,让内网设备也能正常访问 Internet。

NAT 为我们带来了哪些不便之处
NAT 缓解了 IP 地址资源不足的问题,同时能使家庭中的多个设备共享同一条宽带,同时上网。另外,启用 NAT 后,外部设备无法主动发起对内网设备的连接,相当于起到了防火墙的作用,保护了内网设备,一定程度上提高了安全性。

NAT 通过「巧妙」的方式,在内部地址和外部地址之间进行转换。大部分情况下,我们感受不到 NAT 的存在。但仍有部分应用,需要内网设备做为服务器,被外部连接,例如:

  1. 远程访问家中的 NAS、监控摄像头 eMule、BitTorrent 等 P2P
  2. 文件分享应用,使自己的设备可供外部连接,从而能够连接到更多分享者,获取更快的下载、上传速度
  3. 部分语音通话、视频会议应用,通信双方直接连接,获取更好的通话质量 部分联机游戏,不会经过第三方服务器,需要玩家之间直接建立连接
  4. 对于这些应用,如果设备位于 NAT 之内,没有公网 IP,就难以实现了。

但如下两种情况,是 NAT 难以做到的:

  1. 内网设备做为服务器,外部设备主动向内网设备发起连接
  2. 使用 TCP、UDP 之外的、没有端口号的协议进行通信3

我们之前就是第一种情况 内网设备作为服务器 另一台不在同一网络内主机作为客户端 实际上无法连接,
这个图能够大概说明为什么:
在这里插入图片描述
我们使用了中转服务器来实现:
大概画了一个图,是这样的
在这里插入图片描述
但是实际上还有别的实现方式 我们后续大概描述一下。

部分转自:
https://sspai.com/post/68037


http://www.kler.cn/a/569623.html

相关文章:

  • Redis安装及其AnotherRedisDesktopManagera安装使用
  • LeetCode 124:二叉树中的最大路径和
  • git提交管理
  • C语言编程实战:Base64编解码算法从理论到实现(附完整代码)
  • 3-6 WPS JS宏 工作表移动复制实例-1(工作表的拆分操作)学习笔记
  • 蓝桥杯备考:记忆化搜索之function
  • 慢SQL如何定位处理?
  • 由堆栈异常引发的一系列问题启发
  • 【Python 数据结构 1.零基础复习】
  • Node.js与MySQL的深入探讨
  • Difyにboto3を変更したカスタムDockerイメージの構築手順
  • 面试题:说一下你对DDD的了解?
  • 2024贵州大学计算机考研复试上机真题
  • 音视频-WAV格式
  • 【小羊肖恩】小羊杯 Round 2 C+K
  • 如何使用DeepSeek辅助准备面试
  • 第十三站:卷积神经网络(CNN)的优化
  • Elasticsearch 的分布式架构原理:通俗易懂版
  • Linux的OOM机制
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_destroy_pool 函数