本帖最后由 haierccc 于 2017-7-22 22:34 编辑
先来看一道题,据说招聘老师问出这道题,能答出来的寥寥无几。
拓扑很简单:
xp1和xp2的默认网关相同,差别就是掩码不同,xp1的掩码是255.255.255.0,而xp2的掩码是255.255.255.224
问题是:xp2能否ping通xp1?
我们分析一下流程:
1、xp2 ping xp1,首先要把目标地址与掩码进行“与”运算,发现目标与自己不在一个网段,应该把ICMP包发往网关192.168.26.2
2、但目前还不知道网关的MAC,于是向网关发出ARP请求,网关回应后,ICMP包发向网关。
3、网关收到ICMP包,知道要发往xp1,但还不知道xp1的MAC,于是向其发出ARP请求(刚刚收到的ICMP包被丢弃),xp1回应后得知其MAC地址。
4、xp1迟迟等不到ICMP的回应(因为在第3步被路由器丢弃了),于是显示出第一行timout,并再次发出ICMP给XP1。
5、路由器正确把包发给xp1,xp1要回应该ICMP,但不知道xp2(192.168.26.3)的MAC地址,因为经过掩码的“与”运算,发现xp2与自己处于同一网段,于是直接向xp2发出ARP请求。
6、神奇的地方到了!大伙说说,xp2能回应这个ARP请求么?合理的答案是不能。因为经过与运算,发现xp1与xp2不处于一个网段,所以应该不响应该ARP请求(也正是因为2个IP不在一个网段,第1步的ICMP包才会发往默认网关)
xp1因为迟迟得不到ARP回应,所以不知道XP2的地址,通信失败。
但事实却是,xp2响应了!于是通信成功。
以上可不是我编的,有Wireshark抓包为证:
|