1
iBugOne 2023-02-09 19:23:53 +08:00 via Android 1
A 不能 ping 通 B 是因为收不到 B 给出的 echo-reply ,实际上 A 发出的 echo-request 是正常到达 B 的
|
2
echoless OP @iBugOne 我 wireshark 抓包确实是这样的, 为什么 B 给出的 echo reply 到不了 A 呢?
A 10.10.15.129, 网段 (0)1-254(255) B 10.10.15.3, 网段 (0)1-62(63) B 给出的 echo reply 以为 A 是一个子网的, 直接就发包了, 但实际上要通过 gateway 才行. 这样理解好像是通了. |
3
ThirdFlame 2023-02-09 20:16:56 +08:00 1
你说反了。 B 给出的 echo reply 以为 A 不在一个子网的,就把数据包(目的 IP 是 A ,目的 MAC 是网关)发给了网关( gateway )。
网关( gateway )收了之后发现,说 B 你是不是傻了,你和 A 同一个网段,你自己发去。(当然也有的网关配置的可以提替转发) |
4
paradoxs 2023-02-09 20:25:37 +08:00 1
B 给出的 echo reply 到不了 A 是因为 A 和 B 属于不同的网段:A 的网段为 10.10.15.129 (0)1-254(255),而 B 的网段为 10.10.15.3 (0)1-62(63)。
两个网段之间的数据传输需要通过路由器,因此,A 和 B 之间的通信需要通过路由器进行转发才能实现。另外,A 的子网掩码 255.255.255.192 也决定了它和 B 不属于同一网段,因此 B 向 A 发送的 echo reply 也不会收到响应。 |
5
echoless OP @ThirdFlame 我从 B 抓包看了一下, 大佬说的是正确的. 的确发给了 gateway, ip 是 A 的. 但是为什么 gateway 认为 B 和 A 同一个网段呢? 多谢!
|
6
echoless OP @paradoxs A, B 属于不同的子网这个理解的, 问题在于, 是 B ping A 是通的, A ping B 是不通的.
|
7
ysc3839 2023-02-09 21:45:15 +08:00 via Android 1
|
9
ThirdFlame 2023-02-10 08:13:58 +08:00 1
gateway 是根据自己的掩码判断的。 正确的网络配置中,同一个局域网络内所有设备(含网关)的掩码都是一致的,如果不一致就会出现所谓的单通故障。
|
10
echoless OP @ThirdFlame 多谢大佬. 看了一下路由器是有子网掩码的(之前忽略了)
从 web 登陆路由器看到的路由器的信息: 防火墙 IP 地址:192.168.0.1 子网掩码:255.255.255.0 LAN 口 MAC 地址:2C-61-04-3C-0F-85 DHCP 地址池范围:192.168.0.2~192.168.0.254 这样以来算是明白了. 我之所以没弄明白, 是因为原作者和链接的博客, 都没有提路由是怎么设置的. 而这个也是 A 和 B 怎么通的关键. |
11
echoless OP @ThirdFlame 问题又来了, 我尝试复盘一下. 发现还是不通.
原书解释 B ping A, >B 收到了 A 发出的 ARP 广播,这个广播查询的是 B 的 MAC 地址。这是因为在 A 看来,B 属于相同子网,同子网通信无需默认网关的参与,只要通过 ARP 获得对方 MAC 地址就行了。这个包也表明默认网关成功地把 B 发出的 ping 请求转发给 A 了,否则 A 不会无缘无故尝试和 B 通信。 https://blog.csdn.net/weixin_34122548/article/details/90542241 B ping A 的时候, 包为什么能从 B 到 A, 在 A 看来 B 事另一个子网的(超出了自己的网段), 但是对路由来讲,B 是同一个子网, 为什么给他转发了呢? |
12
ThirdFlame 2023-02-10 11:20:16 +08:00 1
@wuhaoecho #11 你已经自己把自己搞乱了。
预设条件 gateway 10.10.15.1/24 A 10.10.15.129/24 B 10.10.15.3/26 你里面涉及到了三层通信和二层通信两层的东西。 gateway 和 A 认为局域网掩码是 255.255.255.0(也就是 24 位掩码),那么即使他们不主动发起 ARP 请求,通过监听到 B 发出的 ARP 请求广播,也能够了解到 B 的 MAC 地址,从而直接通过二层向 B 发送数据。 而 B 认为局域网掩码是 255.255.255.224(也就是 26 位掩码),认为 gateway 和他一个网段,而 A 不是。 那么二层通信是发送不给 A 的,只会通过三层通信,将数据包发送个 gateway ,请 gateway 转发。 |
13
echoless OP @ThirdFlame 感觉你这个事说清楚了, 那个书主要讲 wireshark 了, 没有讲 gateway 自己的掩码 (也可能是作者默认是大家都懂的, 但是我不懂...)
|