IP组播根据报文的IP地址转发报文,IP位于ISO/OSI七层网络模型中的第三层,IP组播也被称为“三层组播”。三层组播报文的目的MAC称为组播MAC地址,和普通的多播地址有些差异。
IPv4组播的MAC地址
IPv4组播使用224.0.0.0/4地址段作为目的IP地址,这个地址段的范围从224.0.0.0到239.255.255.255。
IPv4组播的IP地址和MAC地址之间,存在特定的对应关系。组播MAC地址以01-00-5E打头儿,随后的1个比特是0,最后的23位和组播IP地址的低23位一样。不难看出,这样的对应方式有一个问题,即组播IP地址和组播MAC地址不是一一对应的。组播IP地址的第24位到28位没有体现在组播MAC地址中,这样32个组播IP地址才对应一个组播MAC地址。为什么会出现这样的情况呢?
20世纪90年代初,Steve Deering的IP组播研究工作取得了一些成果,他希望IEEE分配16个连续的OUI(组织惟一标识符)作为IP组播对应的MAC地址使用。一个OUI 有24位,16个连续的OUI 将提供28位的MAC地址空间,这样三层组播的IP地址和组播MAC地址就能一一对应了。遗憾的是,当时一个OUI的价格是1000美金,Steve 的经理,Jon Postel,不愿意花16000美金购买16个OUI。Jon只愿意花费1000 美金购买一个OUI,这个OUI就是01-00-5E。这个OUI中的一半儿地址提供给Steve Deering用于IP组播研究。这样,组播MAC的地址空间就只有23位了。
对于01-00-5E这个OUI,笔者一直有些疑问。通常来讲,硬件厂商申请的OUI都是单播地址,为什么组播MAC地址的OUI是多播的呢?直到最近,笔者才找到了可能的答案——Standards Group MAC Address。但是,在IEEE网站上,这种MAC地址并没有明确申请费用,莫非01-00-5E不是这种情况?详情参考下面的链接:
http://standards.ieee.org/develop/regauth/grpmac/index.html
IPv6组播的MAC地址
随着IPv6时代的到来,组播也要支持IPv6地址。IPv6组播地址的最高8比特是0xFF,随后的8比特是Flags和Scope域,各占4比特;最后的112位是group ID。IPv6组播对应的组播MAC地址以“3333-”打头儿,这样IPv6版本的组播MAC地址空间有32位。
参考资料:
《IP组播网络设计开发》,Beau Williamson,电子工业出版社,2000年6月
《IPv6精髓》 第2版,Silvia Hagen,人民邮电出版社,2013年7月