最近在读一本关于网络抓本和协议分析的一本书——《Wireshark网络分析就这么简单》
书中有一篇章节为——从一道面试题开始说起
问题:两台服务器A和B的网络配置如下,B的子网掩码本应该是255.255.255.0,却不小心配置成了255.255.255.224.它们还能正常通信吗?
A ip地址:192.168.26.129 子网掩码:255.255.255.0 网关:192.168.26.2
B ip地址:192.168.26.3 子网掩码:255.255.255.224 网关:192.168.26.2
此刻给出几个答案,大家可以先猜测一下:
答案1:A和B不能通信,因为······如果这样都行的话,子网掩码还有什么用?(有点道理)
答案2:A和B能通信,因为它们可以通过ARP广播获得对方的MAC地址。(那子网掩码还有什么用,楼上刚好反驳这位)
答案3:A和B不能通信,因为ARP不能跨子网。(这个答案听着想认真思考过的)
话不多说!开始实验。
我们拿Wireshark来捕获ICMP协议之间通信的过程,eNSP模拟业务环境
一.业务模拟
1.使用sNSP搭建好环境,客户机:A,B 网关交换机:LSW1
2.启动Wireshark开始抓包并通过B向A发送ICMP协议请求
能看到,BpingA是可以ping通的
那我们来逐步分析下ICMP请求报文,上面的是客户端A,下面的是客户端B
客户端B:
12包:
可以看到客户端B(00-BB-BB-BB-BB-BB)向192.168.26.2发送了一个ARP广播的请求,意思是:
who has 192.168.26.2 Tell 192.168.26.3 (谁是192.168.26.2 告诉 192.168.26.3)
那为什么B的目标端明明是A,可是从报文看B却要向网关索要mac呢?
原因:
1.不同子网之间的的通信需要网关支持,而网关则依赖与mac地址。
2.ARP发包需要根据自身子网对目标端的子网检测,判断是否属于一个网段,B在发ARP时发现A和自己不在同一网段,所以才回去找网关进行协议转发
13包:
网关回应B,我是192.168.26.2 is at 网关
14包:
B端封装好ICMP报文后,向A端发送,但是可以看到,目的端ip是192.168.26.129,但是目的端mac却是网关192.168.26.2的mac地址,这是因为B想让网关进行协议转发,至于网关有没有转发,我们可以通过结果或者对网关进行抓包去分析。
15包:
网关询问who has 192.168.26.129 Tell 192.168.26.2(谁是192.168.26.129 告诉 192.168.26.2)
因为这是单播环境所以看不到A包回应的ARP,继续往下,会分析A的报文
17包:
A回应B的ICMP请求,但是目的端mac是网关,现在A也是想要让网关进行协议转发
PS:书中这一步该是A收到网关转发的ICMP协议后,A向B发出ARP广播去获取B的mac地址,然后A直接向B回复ICMP请求。但是我试了两次也没有出现书中的现象。。
客户端A:
14包:
由于在一个交换机,所以A这里收到了来自B询问网关的mac地址
15包:
网关发出ARP广播,who has 192.168.26.129 Tell 192.168.26.2(谁是192.168.26.129告诉192.168.26.2)
16包:
A回复网关,我是192.168.26.129 is at 网关
17:
网关向A转发出ICMP的请求包,通过报文能看出原始ip是B,但是原始mac是网关
18:
A回应B发出的ICMP请求包,目的ip是B,目的网关是网关
PS:这里与分析B端的8包的PS一致
标签:ARP,网关,子网,ping,192.168,mac,ICMP,26.2,Wireshark From: https://blog.csdn.net/addtyp/article/details/139546304