这几天看见了很久以前自己学wireshark的文章,当时学不懂,就放弃了,于是现在再回来学一遍
首先就是第一个问题,如图所示,sw充当网关,pc2在配置掩码的时候不小心配置错了,本来是/24,配置成27了,现在问这两台机器能不能互通,以及理由是什么。
请思考后作答
---------------手动分割线---------------
---------------手动分割线---------------
---------------手动分割线---------------
---------------手动分割线---------------
揭晓答案,能互通
可以看到互通没问题,下面开始说为啥
pc1的子网掩码是24,所以它认为从192.168.26.1开始一直到192.168.26.254所有地址都和自己在同一子网,同一子网意味着二层互通
抓个包看看
可以看到pc1也就是192.168.26.129发出的数据包目的地址直接就是pc2,并没有去找网关192.168.26.1
因为在pc1看来pc2和自己是二层互通的,可以直接通信
再来看pc2,它会认为只有192.168.26.1到192.168.26.30和自己是同一子网的,而pc1的地址是129,和自己不是同一子网
因此抓包可以看到,虽然pc2发出的包目的【IP】地址确实是129,但是观察下面红色框的目的【MAC】地址,并不是pc1的mac地址,pc1的mac地址应该是那个11:11:11
为啥mac地址变了呢,因为pc2觉得129这个地址并不和自己在同一子网,也就是二层不可达,所以pc2会把这个数据包直接发给自己的网关,让网关帮自己找到并把数据包发给pc1,咱们看到的不认识的mac地址就是网关的mac地址。
pc只要看到目的ip地址和自己不在同一子网就发给网关
接下来一个很重要的事情发生了,网关给pc2发来一个icmp redirect报文,也就是重定向报文。
重定向报文的用途是,我给你一个更好的途径去访问你要的pc,在这里可以看到
code字段是1,含义是现在你要访问的那台主机,其实是【gateway address】,它和你在同一个网络里,你可以直接和它通信,不用绕到我这里来
下面gareway address字段给出了一个地址,是pc1的地址
pc2收到这个消息后马上明白了,于是直接找到了pc1,一次ping操作得以正常进行
于是pc1和pc2可以通信
但是仔细看看你就会发现,虽然可以通信,但是效率上来看下降了,因为pc2并没有那么聪明
这家伙每次要和pc1通信前都要下意识给网关,然后网关再发一遍redirect,然后正常
一秒钟之后继续失忆
如图所示,正常的访问是蓝色箭头,现在是不正常的,也就是红色箭头那样走
这就会导致ping有延迟,,如果pc1此时换成了服务器,pc2访问服务器会比正常配置的主机速度慢很多,而且还不稳定,受网关本身负载影响。
这时候再回过头来看pc1去ping pc2的流量,明显不用经过重定向,因此可以得到一个结论,icmp回复报文的时候不检查源地址是否在“自己认为的”直连网段内,它只看目的地址(就是自己),所以正常回复。
那如果不检查的话,如果是其他子网ping过来的怎么办?
其他子网ping过来就是由网关转发给它的,它直接回复给网关就行了,网关怎么做和它没关系