背景
《WireShark网络分析就是这么简单》这本书没有枯燥晦涩的网络协议讲解,而是非常接地气的实际问题剖析,例如本书第一页的问题抛出。
分析
一开始我是拿每个服务器的IP地址和自己的子网掩码相&,于是A和B得到了不同的结果,说明二者不在一个子网。【实际上这是不正确的】
作者在B服务器上 ping 192.168.26.3 即A 服务器,并且用 WireShark 在B服务器上抓包。
首先B服务器根据目标IP,也就是A的192.168.26.129 ,和自己的子网掩码 255.255.255.224 相&,然后将自己的IP 192.168.26.3 和 自己的子网掩码 255.255.255.224 相 & , 以上得到的两个结果进行对比,才能说明是否跨网段。
得到的结果是跨网段,所以需要将包转发给默认网关,然而在初始状态下只知道默认网关的IP而不知道Mac地址,所以使用ARP协议获取。然后将包给网关,网关再将 ping 包 转发给A服务器。
A 服务器收到了 ping 包后需要回复。但是这个时候,根据上述正常的子网判断方式,得到 A 到 B 是不跨网段的,这时候A可以直接发 ping 响应给 B, 但是 A 不知道 B 的 Mac 地址,所以需要 ARP 协议获取。这里需要注意的是, A 通过 ARP 广播发送请求, B 收到后需要回复 ARP 响应,这个时候虽然 B 到 A 是跨网段的,但 ARP 响应是可以直接回复的。这一点和刚才的情况不同。 A 得到 B的 Mac 地址后,于是直接回复了最初的 ping 响应,并没有经过网关,网络拓扑其实是这样的。