首先我要说的是,我是网络新手。但是,如果我的服务器的子网掩码为 10.0.0.47 (/8),这足以提供主机地址,我是否也必须为路由器接口分配 (/8) 子网掩码?如果我理解正确,路由器会使用子网掩码来检查 IP 地址属于哪个网络?
我尝试在数据包跟踪器上测试为所有路由器接口分配(/ 24)子网掩码:
Server1 has 10.0.0.47/8 connected to the g0/0 (10.0.0.1/24)
PC1 has 192.168.0.30/24 connected to g0/1 (192.168.0.1/24)
当我使用 pc1 ping server1 时,它是成功的,这是否意味着路由器接口不需要与设备共享相同的子网掩码?
答案1
但是,如果我的服务器的子网掩码为 10.0.0.47 (/8),这足以为我提供主机地址,我是否也必须为路由器接口分配一个 (/8) 子网掩码?如果我理解正确,路由器会使用子网掩码来检查 IP 地址属于哪个网络?
是的,给定子网中的所有设备包括路由器需要就子网掩码达成一致。就子网路由而言,路由器的行为与主机完全相同(唯一的区别是路由器会转发收到的数据包,而主机则不会)。
当我使用 pc1 ping server1 时,它是成功的,这是否意味着路由器接口不需要与设备共享相同的子网掩码?
只要不匹配的子网掩码仍会导致相同的路由决策,它们就会起作用。(但“恰好起作用”并不意味着设置正确。)子网掩码实际上不会进入数据包,也不会成为地址的一部分 - 它仅用于路由表查找,就像您手动添加 /8 或 /24“接口”路由一样。
就你的情况而言,服务器的 IP 地址仍然是在路由器的 10.0.0.0/24 内因此它被正确地视为“在链路上”,就像路由器的接口为 /16 或 /8 时一样。换句话说,自动添加的10.0.0.0/24 via g0/0
“直接连接”路由仍然与目标 IP 地址匹配(请查看show ip route
)。
但如果服务器的地址是 10.0.1.47 或 10.20.30.47,那么路由器将不再有该地址的路由 - 数据包仍将以一个方向传送(从服务器通过路由器),而不是从路由器到服务器。(如果路由器启用了 uRPF 过滤,它也会拒绝来自服务器的数据包。)
你可以手动定义直接路由以覆盖 /8 的其余部分,它们将具有与接口的子网掩码相同的效果,例如,通过使用,ip route 10.0.0.0/8 g0/0
您将使子网按预期工作,但不需要迂回。(尽管在 PT 中仍然值得尝试这一点,以更好地了解子网的工作原理。)
答案2
虽然所有计算机和路由器共享同一个子网是一种很好的做法,但不同的子网可以在小型本地网络中工作(尽管不推荐)。
通过 MAC 地址找到计算机 地址解析协议 (ARP)简而言之,拥有 IP 消息的计算机在整个网络上广播 ARP 问题“谁拥有此 IP”。任何拥有此 IP(或知道哪台计算机拥有此 IP)的计算机都会响应。从那时起,两台计算机和路由器之间的通信路径就建立了。
子网在发送消息时起着更大的作用。计算机具有由 IP 和网络掩码以及网关标识的网络适配器。如果将消息发送到不在此 IP+网络掩码所暗示的范围内的 IP,则发送软件将找不到此网络适配器,并且发送将失败,而不会尝试使用 ARP 查找计算机。
接收消息的计算机不会检查发送方 IP 是否在其 IP 范围内,而只会根据 IP 采取行动。它不会拒绝任何发往其自身 IP 的消息。
因此实际上子网不匹配可以在本地网络中起作用,特别是当只有一个路由器时,尽管这可能会导致一些在传递消息时不易分析的故障。