一道常见的题目
我在多个场合都看到过这样的网络题目,给两个地址,让咱们判断一下这二者是否可以通讯。对这样的题目,按理说我应该很熟练的,可是当别人猛然问个人时候,我依然没法很是有信心的说出正确的答案,尽管我能说出正确的答案,但我在阐述的过程中,依然是心有疑惑的,我知道,这确定是我理解的依然不够透彻,尽管我从事网络行业也有一点时间了。windows
在网上和书里面看到过不少人的的文章,也包括林沛满在《wireshark网络分析就这么简单》一书中的论述,但没有一个我本身满意的,无论别人怎么写,怎么详细论述,看上去都以为别扭,那不是本身的理解。网络
两个地址:ide
A:192.168.0.2/24 没有设置网关; B:192.168.0.32/27 没有设置网关; A主机 ping B主机 ,是否能ping通?
不少书中一下来就讲它们是如何通讯的,但我认为应该先审下题,题目出的对不对?A的主机IP看起来没有问题,但B的主机的IP看起来不太正常,由于它的IP看起来正好在节点上。code
B主机的掩码是27位,也就是说把256分红了2的3次方份,也就是把256分红了8份,每一份是32,而B主机的掩码好像就设置在节点上,这是比较可疑的,那咱们来看B的主机IP这么设置对吗?好,32写成二进制是00100000,那掩码又是11100000,主机位全是0,IP地址不容许主机 位全是0的,因此这个地址是根本没法设置成功的,因此这个题是个错题。blog
其实你能够验证一下,windows在这方面作的很是好,你只要在网卡上设置一下,在保存的时候,windows会提示你这么设置是不对的,会出现这样的报错:接口
The combination of IP address and subnet mask is invalid. All of the bits in the host address portion of the IP address are set to 0 Please enter a valid combination of P address and subnet mask(IP 地址和子网掩码的组合无效。IP 地址的主机地址部分中的位是设置为 0,请输入有效的IP地址和子网掩码)jsx
上面咱们出了一个错题,下面咱们出一个正确的题:路由
A:192.168.0.2/24 没有设置网关; B:192.168.0.23/27 没有设置网关; A和B主机接入到同一个傻瓜交换机上,A主机 ping 主机 ,是否能ping通?
看一下通讯流程,其实这个流程是很是重要的,我很是但愿华为官方能出一本关于HCIE的路由交换指南书籍,如今是一个叫泰克的培训机构出品这本书,我很是不满意,缘由就是由于这本书是“死的”,就是由于里面没有详细的通讯流程,仅仅是知识点的罗列,而华为出品的《HCNP路由交换指南》里面是有明确的通讯流程的,让人一看就懂。it
第一步:A经过本身的掩码判断出本身的网络位是192.168.0.0/24,而后A又经过A本身的掩码判断B的网络位,网络位也是192.168.0.0/24,因此A认为B与本身是一个网段,因而A直接arp广播询问B的mac地址,那B能不能收到呢?这是广播呀,因此说必定能收到,那B又怎么回复呢?B收到arp的请求广播以后,B会怎么回复呢?其实在这里面很容易让人迷惑,既然A能到达B,那B会顺着原路返回吗?实际上是不行的,其实咱们仔细想想,所谓通讯,就是一来一回,路由也要是双向的,若是路由是单向的,即便请求包到达,那回复包并不会根据原路返回的,经过这想一个设想,咱们就绝了让回复包顺着请求包的路径返回的心吧!B也是活生生的主机,B也有本身的“考量”,那B是如何考量的?即使A的请求报文已经到达了B,B也收到了,B也知道A是来找本身的,但B也要根据arp广播报文当中携带的A的IP地址,判断一个A是否和本身在一个网段,常常作运算,B发现A是和本身一个网段的,因而回复arp报文(其实这个论述是错误的,后面咱们会讲到,arp广播实际上是不考虑子网的,只要收到就回复),这里值得一提的是,arp的请求虽然是广播的,但回复倒是单播,其实dhcp的报文也是如此。io
好了,A如今也收到了B的arp回复报文,那A就能够在封装MAC的时候封装目标MAC了,其实在arp阶段交换机就已经知道了目标mac在哪一个接口,那icmp报文确定能顺利到达B主机,B主机也是如此,这样通讯就成功 了。
A:192.168.0.2/24 网关是192.168.0.1/24,而且网关正常 B:192.168.0.33/27 网关是192.168.0.1/24,而且网关正常 A和B主机接入到同一个三层交换机,两台主机们于同一个vlan,A主机 ping 主机 ,是否能ping通?
A认为B和本身一个网段,B能收到arp的请求广播,其实A也能收B的回复广播,即便B认为A和本身不是一个网段,但不要忘了,arp广播是不考虑子网的,咱们后面会进行抓包验证。B也会正常收到A的icmp请求,可是B有本身的判断呀?B会颇有原则的判断A和本身不在同一个网段,因而B会arp请求网关的MAC,网关固然也会回复B,因而B与A的ICMP回复包是交给网关了,那网关怎么办呢?网关一看目标IP和本身是一个网段,直接从该网关转发出去,交换会顺利的交给A,由于交换机是A的网卡的mac地址对应的接口的,好,一次通讯就完成了。
注意,这里面依靠了网关的转发能力,没有网关是不行的,若是没有网关的话,只有icmp的请求报文能到达B,但B的回复报文却由于没有网关转发根本到不了A,咱们能够作个实验验证一下。
先看没有网关的状况下:
PC1的mac:54-89-98-B1-4C-BA
PC2的mac:54-89-98-A4-04-23
在PC1主机上ping PC2,在PC2上抓包看,截图以下:
上面这张图挺有意思的,咱们能够看到pc1发的arp请求包,这一个报文挺正常,值得关注的是第二个报文,第二个报文的存在就颇有意思,按理来讲他不应存在,由于B已经判断出A和它不在一个网段,为何B还正常回复arp报文,只有一个解释,那就是arp回复时是不考虑子网的,B无论A和它是否在不在同一个网段,都会回复arp报文。咱们再来看第三个报文,第三个报文是A获得了B的MAC以后,开始发送了一个ICMP请求报文,嗯,这没有问题,但咱们看第四个报文,第四个报文居然是一个arp请求报文,请求的目标是网关,是B主机发送的,这证实了咱们上面的论述,由于没有网关,而A是一直ping着B主机,因此ICMP请求报文和B主机arp请求报文会交替出现。
那出现了网关是什么后呢?A主机ping B主机时,咱们再在A主机上抓包看看:
网关MAC:4c1f-cc2a-29db
前两个报文都很好理解,A去询问B的MAC地址,因而B回复给A了,因而A发了一个ICMP的请求报文,可是第4、五个arp包,我就有点看不懂了,这两个arp报文是网关发的,广播询问了两个主机的MAC,可是只有A主机回复了,为何只有A主机回复,其实不是这样的,两个主机实际上是都回复了,只是咱们是在A这一侧抓的包,而arp回复报文又是单播报文,因此只看到了A回复的。好,那还有一个问题,为何网关会发这两个arp请求报文?网关不会平白无故发的,必定是某种缘由触发的,那是什么缘由呢?A给B发ICMP请求的时候是不用经过网关的,因此不是这个问题致使网关发送arp广播的,那是为何呢?是B,B收到了A的请求报文以后,B确定请求网关的MAC了,而后将请求报文交给网关,网关一看目标IP是本身接口之下的,但并不会立马转发,也是会arp询问一下一个arp的mac地址 ,而后再进行转发,至于为何网关还会询问B的mac,这里面我也没法解释。
在A主机ping B主机时,在B主机上抓包看下:
在这个报文当中,咱们看到了arp的annoucement,就是arp的通告,意思就是网关说它使用了这个IP地址,咱们在B主机上看到了A主机发来的arp广播,B主机也回复了,因此B收到了A的ICMP请求,而后B主机就回复了ICMP报文,这个回复报文是给网关的,而后网关又询问A的mac,而后才开始转发。
上面这个报文有两个地方值得注意,一是网关问了两个主机的arp,只有B回复,是由于咱们是在B主机上抓的包。第二个注意点是,咱们发现了ICMP的重定向报文,ICMP在两种状况下会发送ICMP重定向报文,一个收到报文的接口正在报文转发到要去的接口,这时候路由会向源发送重定向,通告源主机不用通过他,直接发送到目的主机便可。第一种状况,就是数据包的源地址和本身的下一跳处在同一个网段,会向源发送重定向,通告源主机不用通过他,直接发送到目的主机便可,咱们这里的状况应该是知足第二条;
由于咱们这个实验环境并无放置路由器,是使用vlanif接口作的,并且ENSP抓的包,真实性不敢彻底保证。
其实咱们来能看到一些东西,就是网关其实还要经过arp广播确认目标主机在本身哪一个接口之下。
那A主机究竟是如何与B主机通话的,A是直接将报文发给B,但B并非直接将报文发给A,而是将报文发给网关,而后网关又给交A的。
A:192.168.0.2/24 网关是192.168.0.1/24,而且网关正常 B:192.168.0.33/27 网关是192.168.0.1/24,而且网关正常 A和B主机接入到同一个三层交换机,两台主机们于同一个vlan,B主机 ping 主机A,是否能ping通?
B一上来就知道A和他不是一个网段,因此B会先问网关的mac,网关B后,B将ICMP的请求报文给网关,网关而后arp请求a,a回复后网关将报文转发到接口,请求报文到达,那回复呢?回复的话,A会直接问B的MAC,而且B也会回复A,这一题的报文转发顺序与与上一题相反,也是通的。