我真的很困惑如何通过互联网在另一个网络中的计算机上连接到我网络上的特定计算机。例如,我家里有一个 beowulf 集群一直在运行。我用它来进行硬核计算,比如从单词表中暴力破解密码。现在假设我在使用我的笔记本电脑,但在别人的局域网的其他地方。我知道 beowulf 集群中主节点的外部 IP,它是所有节点中唯一连接到互联网的节点。但是,当我将外部 IP 连接到与集群位于同一局域网上的桌面时,我会获得相同的外部 IP。据我所知,该局域网上所有设备的外部 IP 都是相同的。beowulf 集群主节点、我的桌面和我的智能电视(例如)的外部 IP 都应该相同,因为它们都通过同一个调制解调器路由,对吗?子网掩码决定了数据来自局域网上的哪个节点(所有设备之间共享的外部 IP),对吗?如果是这样,如果我的桌面也打开了 SSH 端口 22,我该如何通过 SSH 专门连接到集群中的主节点以向其发送工作信息?如果 LAN 上有两台或多台机器,并且这些机器都在运行 SSH,并且该 LAN 只能由两台机器共享的外部 IP 引用,那么我该如何指定要连接到该 LAN 中的哪台机器?
答案1
子网掩码
子网掩码仅用于将一个网络中的计算机分组到子网中。
IPv4 地址包含四个八位字节,总共 32 位。假设您的 LAN 上有几台计算机,它们分配了以下 IP 和子网掩码:
- IP
192.168.0.1
地址掩码255.255.255.0
- IP
192.168.0.6
地址掩码255.255.255.0
- IP
192.168.1.1
地址掩码255.255.255.248
- IP
192.168.1.6
地址掩码255.255.255.248
- IP
192.168.1.12
地址掩码255.255.255.248
要确定哪些计算机属于哪个子网,我们必须将掩码应用于 IP 地址:
将 IP 和掩码转换为二进制
- IP
11000000 10101000 00000000 00000001
地址掩码11111111 11111111 11111111 00000000
- IP
11000000 10101000 00000000 00000110
地址掩码11111111 11111111 11111111 00000000
- IP
11000000 10101000 00000001 00000001
地址掩码11111111 11111111 11111111 11111000
- IP
11000000 10101000 00000001 00000110
地址掩码11111111 11111111 11111111 11111000
- IP
11000000 10101000 00000001 00001100
地址掩码11111111 11111111 11111111 11111000
- IP
执行逻辑“与”运算,即复制
1
IP 和掩码均有的位,并用s1
填充空洞0
1. 11000000 10101000 00000000 00000001 & 11111111 11111111 11111111 00000000 ------------------------------------- = 11000000 10101000 00000000 00000000 2. 11000000 10101000 00000000 00000110 & 11111111 11111111 11111111 00000000 ------------------------------------- = 11000000 10101000 00000000 00000000 3. 11000000 10101000 00000001 00000001 & 11111111 11111111 11111111 11111000 ------------------------------------- = 11000000 10101000 00000001 00000000 4. 11000000 10101000 00000001 00000110 & 11111111 11111111 11111111 11111000 ------------------------------------- = 11000000 10101000 00000001 00000000 5. 11000000 10101000 00000001 00001100 & 11111111 11111111 11111111 11111000 ------------------------------------- = 11000000 10101000 00000001 00001000
将结果转换回十进制
192.168.0.0
192.168.0.0
192.168.1.0
192.168.1.0
192.168.1.8
这些是我们电脑的子网地址。如果电脑有相同的子网地址,那么它们属于同一个子网。
- 计算机 1 和 2 属于一个子网
- 计算机 3 和 4 属于另一个子网
- 计算机 5 属于第三个子网
子网仅在本地网络内起作用,即连接到一个网络的计算机转变。然后,交换机连接到路由器,路由器在交换机和调制解调器之间路由网络数据包。您可能在一个设备中同时拥有这三种设备。
交换机、路由器和调制解调器
交换机 - 可让您将两台以上的计算机连接在一起。您不能简单地将多条网线焊接在一起并将它们连接到多台计算机,您必须使用交换机。
调制解调器 - 提供不同网络标准之间的双向转换。您的 ISP 使用的网络标准与普通 LAN 不同,因此您需要一个调制解调器,将其网络数据包转换为您的格式,并将您的数据包转换为其格式。
路由器 - 路由器路线两个网络之间的数据包。您不能直接将不同网络中的两个交换机连接在一起,您需要在它们之间使用路由器。路由器在其连接的每个网络中都有一个 IP 地址。
你的网络看起来有点像这样:
+-----------------------------------------+
| |
PC1 +---------+ |
| | |
| +--------+ +--------+ +-------+ |
PC2 +-------+ Switch +---+ Router +---+ Modem +-------+ ISP
| +--------+ +--------+ +-------+ |
| | |
PC3 +---------+ |
| |
+-----------------------------------------+
路由如何工作?
左侧的计算机有三个 IP 地址,假设:
- 192.168.0.1
- 192.168.0.2
- 192.168.0.3
还有您的路由器的 LAN 端地址。
但在右侧,您只有一个 IP 地址,即所谓的“公共 IP”。它是路由器的 Internet 端地址。当外部人员想要与您网络内的计算机通信时,他如何指定要与哪台计算机通信?
答案是:他不能。您不能从外部直接与网络内的计算机通信。互联网上的人们只能与您的路由器通信。
不过,这种联网方式毫无用处,而且显然你可以从互联网上下载数据。那么它是如何工作的呢?它之所以能工作,是因为你已经发起了连接。当网络内的计算机试图与外界通信时,路由器会将其一个互联网侧端口分配给该计算机的端口。如果有人回复该端口,路由器就知道应该将这些数据包转发到哪里。这种技术称为网络地址转换(简称 NAT)。
如何从外部连接到网络内部的计算机?
如果没有正确配置路由器,您就无法实现这一点,因为必须由网络内的计算机发起连接。只有当另一端的计算机具有公共 IP 时,它才会起作用,但这不太可能。网络可能如下所示:
+----------------+ +-----------------------+
| | | |
| Your cluster | | Other network |
| | | |
| PC1 +---+ | | +---+ Other PC |
| | | +----------------+ | | |
| | | | | | | The computer |
| PC2 +-------------+ THE INTERNET +-------------+ you're using |
| | | | | | | to connect |
| | | +----------------+ | | |
| PC3 +---+ | | +---+ Other PC |
| | | |
+----------------+ +-----------------------+
这两个网络的边界上都有路由器,并且这两个路由器都使用 NAT,因此设置向后连接不起作用。
如何连接到你的集群?
您必须配置转发端口在你的路由器中。
端口转发将路由器的一个 Internet 侧端口永久绑定到您的某台计算机的某个端口。
例如,您可以将路由器的端口 5432 转发到集群中 PC1 的端口 22(默认 SSH 端口)。然后,您可以通过端口 5432 通过 SSH 连接到您的公共 IP,并且您实际上会通过端口 22 连接到 PC1。
如果您想连接到集群中的另一台 PC,有两种方法可以做到:
将另一个端口转发到另一台机器
使用 PC1。PC1 连接到您的 LAN,它可以与 LAN 中的其他计算机通信,而无需路由或 NAT。您可以通过转发端口通过 SSH 进入 PC1,然后从 PC1 通过 SSH 进入 PC2。这比直接连接效率低,但不需要任何额外配置。
答案2
我认为你应该了解一下 IPv4 子网划分的工作原理,因为你理解错了,然后阅读有关 NAT-PMP 的内容。但是,简而言之:
您有两个网络,互联网和您的网络。除了中间的 NAT 路由器外,它们是完全独立的。当您想要连接到外部世界(即您自己的子网之外的子网)时,您的计算机会联系“网关”或“默认路由”。这将是您的 NAT 路由器。然后,路由器使用一组描述连接的内部临时规则在您的计算机和互联网之间来回传递流量。
要从外部世界连接到您的网络,您必须设置 NAT 端口映射规则。您的外部 IP 地址就是一个 IP 地址,用于标识路由器的 WAN 端口,即其与互联网的连接,您的所有计算机都使用 NAT 共享该 IP 地址。使用路由器的接口,您必须设置规则,允许将流向路由器 WAN 接口上某些端口的流量重定向到内部网络上的服务。
例如,您有三台计算机 - 192.168.0.100、192.168.0.101、192.168.0.102,子网掩码为 255.255.255.0。这三台计算机都在端口 22 上运行 SSH。您的外部 IP 地址是 123.4.5.6
要访问三个独立的 SSH 服务器,您必须将三个外部端口映射到三个内部 IP 地址/端口组合。例如
123.4.5.6:22222 -> 192.168.0.100:22
123.4.5.6:22223 -> 192.168.0.101:22
123.4.5.6:22224 -> 192.168.0.102:22
此功能内置于您的 NAT 路由器中 - 您应该能够找到针对您的路由器型号进行设置的具体说明。不过我建议您先去阅读一些内容!
呼呼!