为什么子网掩码不正确的网卡仍然可以 ping 通网关?

为什么子网掩码不正确的网卡仍然可以 ping 通网关?

最初我的网络配置是这样的:

$ ip a
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 3c:97:0e:bd:b1:68 brd ff:ff:ff:ff:ff:ff
    inet 10.66.65.2/24 brd 10.66.65.255 scope global em1
       valid_lft forever preferred_lft forever
    inet6 fe80::3e97:eff:febd:b168/64 scope link 
       valid_lft forever preferred_lft forever

$ ip r
default via 10.66.65.254 dev em1  proto static 
10.66.65.0/24 dev em1  proto kernel  scope link  src 10.66.65.2  metric 1

这样,网络子网掩码就不正确了。我无法访问互联网,但是我可以 ping 网关 10.66.65.254。

然后我刷新 em1 的路由表和 ip 地址并重启网卡。这样我就有了新的路由表和 ip:

$ ip a s dev em1
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 3c:97:0e:bd:b1:68 brd ff:ff:ff:ff:ff:ff
    inet 10.66.65.2/23 brd 10.66.65.255 scope global em1
       valid_lft forever preferred_lft forever
    inet6 fe80::3e97:eff:febd:b168/64 scope link 
       valid_lft forever preferred_lft forever
$ ip r
default via 10.66.65.254 dev em1  proto static 
10.66.64.0/23 dev em1  proto kernel  scope link  src 10.66.65.2  metric 1

现在我就可以访问互联网了。

我认为在我更改并重新启动网卡之前发生的事情是这样的:到互联网的数据包的目的地是 172.1.1.1,源是 10.66.65.2,因此它查找路由表并通过 em1 出去,然后网关收到了数据包,但是当数据包返回 em1 时,网关无法找到适合 10.66.65.2/24 的路由条目,因此它丢弃了数据包,所以我无法访问互联网。

但是我想知道为什么我可以ping通网关,为什么这次它能够向我发送数据包?

谢谢

答案1

你的掩码一开始没问题,至少在联系网关方面是这样。事实上,这句话

   inet 10.66.65.2/24

确保您的网关和您属于相同的子网,事实上你做过访问您的网关,并收到响应。因此,您无法访问互联网的原因应该从别处寻找。有两种可能:1) 您的网关处于离线状态,2) 您的 DNS 未在 /etc/resolv.conf 中正确设置。

但是,还请注意,刷新网络信息后,您从 DHCP 自动收到的子网,10.66.65.0/23, 是更宽的比上述内容更全面。它完全包含10.66.65.0/24,这样即使子网较小,你也能连接到网关,你错过了链接到局域网中其他机器的可能性。因此,除了更正文件/etc/resolv.conf,您可能希望将子网更改为更广泛、更正确的版本。您可以通过调用DHCP如下:

ip link set dev em1 down
ip addr flush dev em1
ip link set dev em1 up
dhclient -v em1

-v(=详细)选项将与 DHCP 服务器协商的各个步骤打印到标准输出,但并非所有dh客户端版本。

如果您有一个具有静态 IP 地址的 NIC,则可以按如下方式更改子网:

ip link set dev em1 down
ip addr flush dev em1
ip link set dev em1 up
ip addr add 10.66.65.2/23 dev em1

就是这样。

答案2

主机 10.66.65.2 带有 /24意味着它认为 10.66.65.0 到 10.66.65.255 位于同一子网,因此它当然会认为路由器 10.66.65.254 位于其同一子网。

主机 10.66.65.2 带有 /23意味着它认为 10.66.64.0 到 10.66.65.255 位于同一子网,因此它当然会认为路由器 10.66.65.254 位于其同一子网。

如果 /23 子网正确,则意味着某些子网广播会被主机错误处理,并且意味着主机必须依赖网关转发本应直接发送到 10.66.6 的帧4.x 主机。或者,更可能的是,网关会发送ICMP 重定向通知您的主机,告知它可以将这些数据包直接发送到链路层的目标主机。

子网掩码配置错误可能不是导致您无法连接互联网的原因。

相关内容