由于 MAC 地址的问题,导致网络不通的原因和分析

由于 MAC 地址的问题,导致网络不通的原因和分析

  • 将现象及原因分析发给大家,供大家参考,以后有类似问题时有个解决问题的参考
  • 开发板网络不通,也抓不到包,折腾了好久,将电脑和开发板用网线直连,结果包能抓到了,网络通了(代码未做修改)
  • 分析原因:最有可能的是以太网的 CRC 32 校验错误,导致交换机将这个包给过滤掉了。(用的是 H3C 的交换机)
  • 接着折腾,查CRC32算法,甚至把数据包抓出来算出 CRC32 校验。所有的结果都证明,板子的 CRC32 校验是正确的。
  • 接着实验分析,不用交换机用网线直连能通,用普通的傻交换机能通,用 H3C 网管型交换机网络不能通。怀疑开发板发出的包是个特殊的包,被交换机给虑掉了。
    看代码中,开发板的 MAC 地址是 E1:E1:E1:E1:E1:E1 ,感觉有些特殊,换掉了,改成 11:22:33:44:55:66 六六大顺。结果还是不通。
  • 继续折腾,实在是看不出问题所在,再次关注到 MAC 地址上来发现 E1:E1:E1:E1:E1:E1 和 11:22:33:44:55:66 都是组播地址,接着查看相关文章,组播地址不能当成以太网的源地址。
  • 接着改,将 MAC 地址改成 00:11:22:33:44:55 结果网络通了。

结果:

MAC[47:0] 共 48 位,从 0 开始数,第 40 位为 1 时是多播地址。就是说,MAC 的最高字节是奇数的话就是多播地址。
比如下面的地址就是多播地址

x1:xx:xx:xx:xx:xx
x3:xx:xx:xx:xx:xx
x5:xx:xx:xx:xx:xx
x7:xx:xx:xx:xx:xx
x9:xx:xx:xx:xx:xx
xb:xx:xx:xx:xx:xx
xd:xx:xx:xx:xx:xx
xf:xx:xx:xx:xx:xx

  • 多播地址只能当目的 MAC 地址,不能当成源 MAC 地址。

你可能感兴趣的:(网络,网络)