我了解如何使用子网掩码将网络划分为子网,但是,为什么网络中的每台计算机都需要知道子网掩码,而不仅仅是路由器?
如果每台计算机都通过电线物理连接在一起,我可以理解,但无论如何所有数据包都需要通过路由器。
假设我在网络上有一台计算机192.168.0.0/255.255.255.0
,其 IP 为192.168.0.1
。
如果该计算机试图访问子网外的计算机,192.168.1.1
它会将消息传输到路由器,路由器会识别出该 IP 位于子网 IP 范围之外,并且不是在子网上传输,而是将其传输到它所连接的网络(可能是另一个路由器)。
答案1
你最初的假设并不完全正确。你所谓的“路由器”其实是两个设备合二为一——一个双端口路由器内部连接到一个多端口以太网交换机. (以下是示例图表。
这意味着计算机是直接在第 2 层连接,并可以相互发送数据包没有经过路由器核心——它们只是通过交换机芯片在端口之间进行中继。(路由器在交换机中有自己的“端口”。)
因此,如果您使用 Wireshark 查看数据包,您会发现它们直接使用彼此的 MAC 地址,而“外部”数据包始终以路由器的 MAC 作为目的地。
(我假设你指的是大多数家庭中常见的“无线路由器”,这也是这类问题通常出现的原因。一个更大的网络应该有一个分离每个子网一个端口的路由器,以及几个独立的交换机(可能是一个主交换机加上每个楼层/房间一个交换机),以及几十台连接到这些交换机的计算机。)
它与 Wi-Fi 网络大致相同,只是“交换机”被替换为“无线桥接器”(又称“接入点”)。在这两种情况下,连接的计算机都可以在第 2 层直接向彼此发送数据包,没有通过路由器。
评论:
当我说路由器时,我实际上指的是交换机。我的错误。我的观点是,子网中的每台计算机并不是相互连接的,而是连接到交换机,然后交换机可以将数据包传递到正确的目的地。以太网帧不包含子网掩码,因为交换机已经知道这个信息,因此不需要它来进行正确的交换。
这又错了。交换机没有这方面的知识;它们的交换核心在第 2 层工作,不知道任何事物关于 IP – 它纯粹根据“目标 MAC 地址”字段转发以太网帧。
因此,主机需要子网掩码来确定要使用哪个 MAC 地址作为目的地:
如果对等体位于同一子网内,则假定链接上根据定义 – 因此以太网帧将以对等方的 MAC 作为目的地。
对于同龄人外部子网,以太网帧将具有网关的MAC 作为目的地。
(这适用于默认配置。一些特殊雪花网络会改变这一点 - 例如,大多数操作系统允许为其他子网添加额外的“在线”路由;相反,一些交换机可能配置了欺骗 ARP 响应,这样即使“在线”流量也被强制通过网关。)
答案2
计算机如何知道目标地址是否位于同一子网或另一个子网中?
检查本地地址和子网掩码。
我们来看几个例子:
如果我的计算机有 IP192.168.0.1
并且掩码是,255.0.0.0
则意味着从192.0.0.0
到的任何地址192.255.255.255
都位于同一子网中。发往所有其他计算机的数据包无需通过路由器,可以直接发送。发送 ARP 数据包以获取目标计算机的 MAC 地址,然后发送数据包。
但是,如果我的计算机有 IP192.168.0.1
并且掩码为,255.255.255.128
则同一子网中的计算机仅从 IP 地址192.168.0.0
到192.168.0.127
。它们可以直接访问(发送 ARP、查找 MAC 地址等)。例如,任何其他地址都192.168.0.200
必须通过路由器才能到达。
答案3
关于 IP 的一个不太明显的是,每个 IP 设备本身就是一个路由器。
在普通 PC 上使用“route print”命令即可看到。您连接到两个网络:本地以太网或 wifi 网段和本地主机网络。每个数据包都需要决定将其放在哪个网络上。
如果你将计算机放在两个网络上,比如“公共”网络和“私有”网络,这一点会更加明显。现在你肯定需要子网掩码来决定将数据包发送到哪个网络。
许多人会意外地发现,具有单个网络连接的 PC 可以使用错误配置的子掩码:他们最终将所有内容发送到网关。
答案4
TCP/IP 可以按照您的建议进行设计——叶节点会将所有内容发送到路由器,然后路由器会将其转发到目标,目标可能与发送方位于同一子网。
但这并不是最佳设计,原因有二:
它占用更多带宽:同一子网上的设备之间的每个数据包都必须传输两次:一次从发送方传输到路由器,另一次从路由器传输到接收方。在路由器也是网络交换机的网络上,这实际上并不会占用任何额外的带宽,因为它无论如何都会经过交换机。但并非所有网络技术都是这样工作的。最初的以太网设计是一种总线技术,没有中央交换机或中继器。
这会给路由器带来更多负载。即使路由器也是交换机,工作量也会更大,因为它必须执行第 3 层路由实现,而不是更简单的第 2 层交换。
TCP/IP 的设计理念是,终端节点是智能设备,因此它们被认为能够完成部分工作。它们不必像骨干路由器那样了解整个网络拓扑,但它们对本地环境有足够的了解,可以承担一些初始的本地与远程路由任务。实现这种简单的初始路由不需要太多代码。
此外,非路由器设备不一定只在一个子网上。一台 PC 上可以很容易地安装多个网卡——许多 PC 都同时具有以太网和 WiFi。每个网卡都可以连接到不同的子网,地址和子网掩码用于确定使用哪个网卡。如果您运行虚拟机,则可能有一个虚拟子网将它们连接到主机系统。