网络与子网:区别是什么?

12
一个使用类C IP地址192.168.0.1和子网掩码255.255.255.0的计算机是否可以与拥有同样子网掩码255.255.255.0的IP地址为192.168.1.1的另一台计算机进行通信和共享资源?我之所以这样问是因为在这种情况下,前三个八位字节告诉我们这些IP地址运行在不同的网络上(网络192.168.0.0和网络192.168.1.0)。 此外,在这种情况下,“网络”是否意味着与“子网络”(或“子网”)相同的含义? 谢谢!

4
这不是一个适合在StackOverflow上提出的问题。你可能会在serverFault上得到更好的帮助。 - user1864610
3个回答

15
要完全理解计算机网络的工作原理,您需要查看OSI模型(或实践中的TCP/IP或DoD模型)。对于您的问题,您需要查看前三层:物理层、数据链路层和网络层。
物理连接是不言自明的,代表通过某种介质(铜、玻璃、空气)的直接连接。
当主机A尝试向主机B发送数据包时,首先要做的是查看目标IP地址,并根据自己的IP配置确定主机B是否与主机A在同一子网中。这是由Eugen Rieck已经向您解释过的:子网掩码位用于屏蔽IP地址的位(逻辑AND操作)。现在,我们有两种情况:
1. 主机A和B在同一个子网中。 2. 主机A和B不在同一个子网中。
您应该注意,在第2层上,网络适配器用于发送和接收帧,没有IP地址(第3层上存在),而是使用MAC地址进行设备之间的通信。因此,主机只能直接与其子网中的主机通信(第1种情况)。为了发送帧,主机A需要主机B的MAC地址。因此,主机A首先在其ARP表中查找映射到主机B的IP地址的MAC地址。如果找不到它,则发送广播ARP请求,询问子网上所有主机谁拥有该特定IP。如果它得到响应,它将添加来自响应的主机的MAC地址,并构建一个带有该主机的目标MAC地址和IP地址的数据包。
如果两个主机不在同一个子网中(第2种情况),则数据包将发送到默认网关,后者负责查找到达目标的路由。这里需要强调的关键点是,即使在这种情况下目标MAC地址是路由器(默认网关)的MAC地址,目标IP地址仍然是主机B的IP地址,就像在第1种情况下一样。随着数据包从路由器到路由器的流动,源和目标MAC地址将发生变化,因为它们是本地相关的,但源和目标IP地址将保持不变。这就是每个层向上层提供服务(可以这么说),并且上层在不需要知道下层正在发生什么的情况下透明地使用它的方式。
所以您有:
第1种情况。
----------------
L2:
Src MAC: host A
Dst MAC: host B
----------------
L3:
Src IP:  host A
Dst IP:  host B
----------------

第二种情况:

----------------
L2:
Src MAC: host A
Dst MAC: router
----------------
L3:
Src IP:  host A
Dst IP:  host B
----------------
总之,就像@Eugen Rieck已经告诉你的那样:在您的示例中,不在同一子网中的两个主机(192.168.0.1/24和192.168.1.1/24)将无法在第2层通信,需要具备L3功能的设备(例如路由器)作为默认网关,并在第3层之间路由流量(广播域)以实现连接。

谢谢!现在我明白了为什么我们需要路由器,如果我们想让不同子网中的两台计算机相互通信。我也理解了如何计算子网ID。但是我们如何计算主机ID呢?我们如何仅从IP地址获取用于主机ID的那些位?或者这并不必要,因为使用整个IP地址来识别主机?(例如,子网ID为192.168.0.0,主机ID为192.168.0.1或主机ID只是“1”,子网ID为192.168.0?) - user2119805
主机将是192.168.0.1,而不仅仅是1。由于主机只有一个IP地址,您还可以将其表示为子网,子网掩码为255.255.255.255。由于掩码的二进制值都是1,该子网将只有一个IP地址(主机IP),而不是范围。因此,它们实际上是以相同的方式计算的。 - pajaja

4

是的和不是的:

是的:如果两台计算机之间有一个(适当设置的)路由器,并且双方都知道它,那么它们可以通信。

不是的:如果只是简单地连接到同一个笨拙的交换机上,那么这两台计算机无法通信。

经验法则:IP & SNM必须对于所有参与者相同,才能允许直接通信。


所以它们在不同的网络上,只有路由器才能让它们通信。它是如何做到的?只需将DHCP范围设置为类似于192.168.0.1-192.168.1.255这样的内容即可。 - user2119805
我相信你有一台家用路由器,但它很可能不允许这样做。最简单的方法可能是在其中一台计算机上添加一个次要IP地址,例如将192.168.1.2添加到具有192.168.0.1的计算机上。这在所有常见的操作系统中都很容易实现。 - Eugen Rieck
这不是我的观点。我只是想学习和了解一些关于网络的方面。这是我不理解的一个实际例子。主要问题是:网络和子网是什么?为什么我们需要不同的“网络”?例如,C类允许2,097,152个网络!! - user2119805
3
“网络”和“子网”的定义在语言上经常没有很好的区分。实际上这是一个层次结构:“网络”通常用作域边界:“谷歌的网络”或“你的网络”,它可能由多个子网组成:在你的例子中,你的“网络”由两个“子网”组成:192.168.0.*和192.168.1.*。你网络的子网通过路由器连接,并且再通过路由器(边缘路由器)连接到其他网络(例如互联网)。 - Eugen Rieck
1
如果(按位)IP&SNM相同,则它们只能直接通信(即无需路由器),这在192.168.0.1和192.168.0.2上是正确的。如果您想穿过子网边界,则需要路由器。 - Eugen Rieck
显示剩余2条评论

3
你需要改变子网掩码成为255.255.254.0,或者使用路由器或三层交换机进行通信。
“网络”通常指的是您所涉及的整个网络,而“子网”则是指其中一个特定的、独立的部分。然而,这些术语的定义是相当宽泛的。

所以如果我使用255.255.255.0掩码,它们就无法通信!我认为你提到的使用255.255.254.0掩码,是为主机提供了额外的一位,并从网络ID中删除了一位。我仍然不明白。我们在谈论什么?不同的“网络”还是不同的“子网”? - user2119805
2
你是正确的:缩短子网掩码有效地增加了一个比特的主机地址大小。你的网络中现在只有一个子网,而不是两个子网(192.168.0.0和192.168.1.0),但大约是原来的两倍大小。不要在这里讨论与主题无关的问题,请查看此教程,然后在serverFault上发布任何进一步的问题。 - user1864610

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接