wireshark 网络分析: 从一道面试题开始说起 相关的疑问.

2023-02-09 19:10:28 +08:00
 echoless
https://tianshuang.me/2017/03/%E4%BB%8E%E4%B8%80%E9%81%93%E9%9D%A2%E8%AF%95%E9%A2%98%E5%BC%80%E5%A7%8B%E8%AF%B4%E8%B5%B7/index.html



原作者分析了 B 可以访问 A, 但没有分析 A 是否能访问 B. 链接的作者分析的貌似是 A 可以访问 B.

但是我做了类似的设置, 发现 A ping B 是不行的, 但是 A 可以得到 B 的 mac address.

我的疑问是, A 能访问 B 么, 为什么 A 有了 B 的 mac address 仍然 ping 不通. 多谢
1045 次点击
所在节点    问与答
13 条回复
iBugOne
2023-02-09 19:23:53 +08:00
A 不能 ping 通 B 是因为收不到 B 给出的 echo-reply ,实际上 A 发出的 echo-request 是正常到达 B 的
echoless
2023-02-09 19:31:16 +08:00
@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 才行.

这样理解好像是通了.
ThirdFlame
2023-02-09 20:16:56 +08:00
你说反了。 B 给出的 echo reply 以为 A 不在一个子网的,就把数据包(目的 IP 是 A ,目的 MAC 是网关)发给了网关( gateway )。
网关( gateway )收了之后发现,说 B 你是不是傻了,你和 A 同一个网段,你自己发去。(当然也有的网关配置的可以提替转发)
paradoxs
2023-02-09 20:25:37 +08:00
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 也不会收到响应。
echoless
2023-02-09 20:35:00 +08:00
@ThirdFlame 我从 B 抓包看了一下, 大佬说的是正确的. 的确发给了 gateway, ip 是 A 的. 但是为什么 gateway 认为 B 和 A 同一个网段呢? 多谢!
echoless
2023-02-09 20:40:46 +08:00
@paradoxs A, B 属于不同的子网这个理解的, 问题在于, 是 B ping A 是通的, A ping B 是不通的.
ysc3839
2023-02-09 21:45:15 +08:00
@wuhaoecho
“为什么 gateway 认为 B 和 A 同一个网段”
要看 gateway 上面是怎么配置的
echoless
2023-02-09 21:46:33 +08:00
@ysc3839 我自己弄的两台电脑 gateway 就是路由器 默认配置
ThirdFlame
2023-02-10 08:13:58 +08:00
gateway 是根据自己的掩码判断的。 正确的网络配置中,同一个局域网络内所有设备(含网关)的掩码都是一致的,如果不一致就会出现所谓的单通故障。
echoless
2023-02-10 10:08:22 +08:00
@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 怎么通的关键.
echoless
2023-02-10 10:20:25 +08:00
@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 是同一个子网, 为什么给他转发了呢?
ThirdFlame
2023-02-10 11:20:16 +08:00
@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 转发。
echoless
2023-02-10 20:25:39 +08:00
@ThirdFlame 感觉你这个事说清楚了, 那个书主要讲 wireshark 了, 没有讲 gateway 自己的掩码 (也可能是作者默认是大家都懂的, 但是我不懂...)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/914682

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX