mac地址分类
昨天课程中,老师给的一个11-22-33-44-55-66的mac地址,用来模拟arp表中的网关ip映射到错误的mac,从而无法通信,但实际上设置完成后依然能通信,这就很奇怪,抓包发现,交换机首先将这个未知目的mac地址的帧泛洪发送,按理来说路由器发现mac地址不是自己接口的就应该丢弃才对,结果路由器却能响应,这就很奇怪。
开始我以为是我对路由器的了解太浅,以为路由器会对未知mac地址的网络层进行检查,所以发现ip是自己的就响应了,但后来又想了想,这样的话路由器就负担太大了,每个帧都处理工作量太大,所以应该是其他问题。
那能是什么问题使路由器能接收一个非本接口mac的目的mac帧呢?我尝试将主机mac改成11-22-33-44-55-66,路由器发起通信,抓包如下

结果,arp广播和响应都正常,但路由器不会把主机的mac保存进arp表中,还是一直在发送arp广播,这就说明这个mac地址应该是一种特殊分类的mac地址,而不是一个单播地址,百度一下,翻翻计算机网络,很快就找到问题了。
48位mac地址,一般用6组两位16进制数表示,规定:mac地址第一字节最低位表示组播/单播地址,即一般表示方法的前两位如上面的11,用二进制表示就是00010001,而最低位在这里就是最右边这一位,这一位为1,则是组播,为0,则为单播,而组播地址所有主机都应该接收,这是规定,所以路由器也会接收处理,因此,就会出现配置非网关真实mac地址的映射,网关也会响应,解决这个问题只要保证第一字节最后一位设置成0就行,如10-22-33-44-55-66,把组播变单播就能行了。
还有,arp广播在局域网内,实际上完完全全是用mac通信的,用不到ip地址,目的主机接收到arp广播后,也是把帧中的目的/源mac、目的/源ip换一下位置,而交换机只按mac转发,所以,只要mac地址不冲突,arp广播总能被正确响应,和ip是否冲突无关。ip冲突的影响在于路由器中的arp表中只能建立一条ip/mac映射记录,ip冲突的话由于只能填入一个mac,也就只有一个主机能和外网通信,因为另一个主机就算能将数据送出网关,返回的数据也不会到自己手里,而会到ip冲突的另一个主机手里。