mac组播地址和单播地址的判断

MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置。MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique identifier),后24位由厂商自行分配。

MAC地址有单播、组播、广播之分。单播地址(unicast address)表示单一设备、节点,多播地址或者组播地址(multicast address、group address)表示一组设备、节点,广播地址(broadcast address)是组播的特例,表示所有地址,用全F表示:FF-FF-FF-FF-FF-FF。当然,三层的IP地址也有单播、组播、广播之分。

48bit的MAC地址一般用6字节的十六进制来表示,如XX-XX-XX-XX-XX。IEEE 802.3规定:以太网的第48bit用于表示这个地址是组播地址还是单播地址。如果这一位是0,表示此MAC地址是单播地址,如果这位是1,表示此MAC地址是多播地址。见IEEE 802.3 3.2.3 Address fields: “The first bit (LSB) shall be used in the Destination Address field as an address type designation bit to identify the Destination Address either as an individual or as a group address. If this bit is 0, it shall indicate that the address field contains an individual address. If this bit is 1, it shall indicate that the address field contains a group address that identifies none, one or more, or all of the stations connected to the LAN. In the Source Address field, the first bit is reserved and set to 0.”

因为以太网线路上按“Big Endian”字节序传送报文(也就是最高字节先传送,关于字节序请参考相关文档),而比特序是”Little Endian”(也就是最低位先传送)。所以有如下的图(从最左边开始传送):

注意图上的第47bit,这一位表示MAC地址是全球唯一地址还是本地地址,0表示全球唯一地址,1表示本地唯一地址。这一位也叫G/L位。

对于网络设备上固化的MAC地址,因为它唯一标识这个设备,所以只能是单播地址,也就是MAC帧里面的Source地址第48位只能0。

我们常说有2的48次方个MAC地址可供网络设备使用,这些地址可以多到给地球上每一粒沙子分配一个地址,其实这个数量要打折扣的,因为MAC地址虽然有这么多,但真正用在网卡上并且全球唯一的只有2的46次方个:第48bit一定是0,第47bit一定是0。

这也就引出了一个有意思的现象:随便找一台PC,观察一下它的网卡地址,第1字节的十六进制数一般是4的倍数;查看一下IEEE分配的OUI(http://standards.ieee.org/develop/regauth/oui/oui.txt ),第1字节的十六进制数也一般是4的倍数(早期以太网没有本地地址的概念,所以分配的OUI里面G/L bit也可能是1),这种情况下就不是4的倍数了,但肯定是2的倍数,因为第48位只能是0。

关于组播地址,有这么个误解:MAC地址第1字节必须是0x01才表示组播地址,连TCP/IP详解上也这么说(见中文版12.4.2第一段)。IEEE 802.3里面已经明确说明了只要第48bit是1就表示组播地址,所以无论MAC地址第1字节是0x01、0xC1或者是0x33都表示这个MAC地址是组播地址(以0x33开头的表示IPV6对应的二层组播地址)。之所以有这样的误解,是因为到目前为止,大部分组播MAC地址的第1字节都是0x01。如:

01-80-C2-00-00-00(STP协议使用)

01-80-C2-00-00-01(MAC Control的PAUSE帧使用)

01-80-C2-00-00-02(Slow Protocol: 802.3ah OAM/ LACP 协议都用这个地址,这个地址很有故事,有多少软件处理这个地址会出问题啊!)

01-00-5E-xx-xx-xx(IP组播地址对应的二层组播地址)。

完整的列表见http://standards.ieee.org/develop/regauth/grpmac/public.html

之所以大部分组播地址都以01-80-C2和01-00-5E开头,那是因为使用这些组播地址的协议都是带头大哥IEEE和IANA名下的,它们的OUI分别是00-80-C2和00-00-5E是,变成组播地址就是01-80-C2和01-00-5E了,当然,除了带头大哥霸占的这些组播地址,还有01-00-0C-CC-CC-CC这样的地址,这个地址是Cisco霸占的,Cisco的OUI是00-00-0C。

【网络知识】mac组播地址和单播地址相关推荐

  1. 2022-10-31 网工进阶(三十三) IP组播-流量模型、组播概念、组播报文结构、组播地址与MAC、组播网络架构、组播服务模型、组播数据转发原理(RPF检查、组播分发树、组播协议介绍)

    IP组播概念 流量模型 网络中存在各种各样的业务,从流量模型看一般可以将业务分为两类: 点到点业务:比如FTP,WEB业务,此类业务主要特点是不同的用户有不同的需求,比如用户A需要下载资料A,用户B需 ...

  2. MAC地址解析-广播地址、组播地址和单播地址的特征

    MAC地址分成三类,分别是广播地址.组播地址和单播地址.首先,FF:FF:FF:FF:FF:FF毫无疑问是广播地址.每个网卡出厂时被分配唯一一个单播地址,头24位是设备制造厂商的编号,由IEEE(电气 ...

  3. 广播泛洪_这三种类型的报文,交换机会进行泛洪:广播、组播、未知单播

    随着互联网的发展,各种应用层出不穷,日新月异,对网络设备的要求也越来越高,对广大设备厂商也提出更多的要求.不过这些事情都与二层交换机没有关系:) ,因为各种应用的数据到达二层交换机时,都只会变成一个一 ...

  4. 广播泛洪_一分钟了解交换机四种报文中的三种:广播、组播、未知单播

    随着互联网的发展,各种应用层出不穷,日新月异,对网络设备的要求也越来越高,对广大设备厂商也提出更多的要求.不过这些事情都与二层交换机没有关系:) ,因为各种应用的数据到达二层交换机时,都只会变成一个一 ...

  5. java单播多播socket_广播(broadcast),组播(multicast),单播(unicast)的Java实现

    ## IP地址 在IPv4中,一共有五类IP地址 * A类地址:网络号占1个字节.网络号的第一位固定为0. * B类地址:网络号占2个字节.网络号的前两位固定为10. * C类地址:网络号占3个字节. ...

  6. Socket网络编程之组播实现(C++,Rust)

    实际项目中,经常需要使用组播,代码示例如下: 一.C++实现(Windows) 服务端源码 服务端需要添加加入组播组的相关代码. #include "stdafx.h" #incl ...

  7. 【博客545】从交换机视角看四种报文:广播、组播、未知单播、已知单播

    从交换机视角看四种报文:广播.组播.未知单播.已知单播 交换机视角的四种报文 对于二层交换机来说,它在转发报文时,只有四种类型的报文: 1.广播 2.组播 3.未知单播 4.已知单播. 四种报文剖析 ...

  8. mac组播地址和单播地址的判断

    转自:http://blog.csdn.net/jackli8431/article/details/50419689 MAC地址有单播.组播.广播之分. 单播地址(unicast address)表 ...

  9. 组播技术中IP地址到MAC地址的映射

    以太网组播MAC地址 以太网传输单播IP报文的时候,目的MAC地址使用的是接收者的MAC地址.但是在传输组播数据包时,其目的地不再是一个具体的接收者,而是一个成员不确定的组,所以要使用组播MAC地址. ...

最新文章

  1. Navicat 连接MySQL数据库 报错2059 - authentication plugin 'caching_sha2_password'的解决办法...
  2. 【数字信号处理】相关函数 ( 功率信号 | 功率信号的互相关函数 | 功率信号的自相关函数 )
  3. SpringBoot https访问控制
  4. JS对象与jQuery对象
  5. indexof java_java indexOf()简单字符查找实例
  6. python经济统计_给统计人讲python(3)模拟城市_数据分析
  7. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---15
  8. 289页初中级前端题助你拿下Offer,附面试题答案
  9. csdn博客搬家:及其方便的博客迁移、搬家工具,支持主流博客平台----CsdnSyncHexo。
  10. java加密算法之MD5篇
  11. 神州数码java面试
  12. PLC网关 PLC远程控制调试
  13. HTML的font标签的使用
  14. pulseaudio 播放卡顿的解决方法
  15. 【笔记】wincap收集并统计网络流量
  16. ResizeObserver loop limit exceeded报错解决方案
  17. Thinkphp整合微信支付功能
  18. 搬砖:网络数据包解析
  19. 磁盘分区:系统C盘空间不足怎么办?
  20. 20亿美金独角兽Notion,和它在中国的“抄袭”者们

热门文章

  1. KEIL5软件编程中遇到很多关键固件库函数报错如
  2. 工程中导入sqlite -sqlite 基础教程(1)
  3. 游戏程序员养成计划 (更新2013.3.19)
  4. 关于图片防盗链 - 图片加载报错403,但可以单独打开图片链接
  5. 泰拉瑞亚linux开服教程视频,泰拉瑞亚1.4版本服务器创建教程
  6. html页面时钟插件,Clock.js-HTML5模拟时钟jQuery插件
  7. 华为自动驾驶 鸿蒙,华为高阶自动驾驶 + 华为鸿蒙 OS 车机系统体验
  8. 一文解析机器人坡口切割技术
  9. 移动电商:商城、分销系统、代理分销系统开发设计
  10. 深度学习目标检测:YOLOv5实现红绿灯检测(含红绿灯数据集+训练代码)