1.4 多播IP地址和MAC地址
多播IP地址分配给构成一个多播组的一组互联网主机。发送方使用多播IP地址作为发送给所有组成员的分组的目的地址。
1.4.1 D类IP地址
在IPv4中,一个多播组用一个D类地址标识。D类地址的高序4位是1110,后随28位多播组标识符。表示成点分十进制形式,多播组地址范围是从224.0.0.0至239.255.255.255,可缩写成224.0.0.0/4。图1-3显示的是32位D类地址的格式。
图1-3 D类多播地址格式
因特网编号分配机构(The Internet Assigned Numbers Authority,IANA)维持一个注册IP多播组列表。基础地址224.0.0.0保留,不可分配给任何组。从224.0.0.1至224.0.0.255的多播地址块保留为各种使用的永久分配,包括路由协议和其他需要众所周知的永久地址的协议。
下面列出的是一些众所周知的组。
剩余的组,从224.0.1.0至239.255.255.255,要么永久地分配给各种多播应用,要么动态分配(通过SDR会话目录或其他方法)。在这个地址范围中,从239.0.0.0至239.255.255.255的地址保留给各种管理限定范围的应用,以及在专有网络中的应用,而不必是因特网范围的应用。
要查看完全列表,可查询分配的号码RFC(RFC 1700或其后继文档),或者访问IANA Web场点的分配网页(URL为http://www.iana.org/iana/assignments.html)。
1.4.2 把D类地址映射到MAC地址
IEEE-802 MAC层也为IP多播保留一部分地址空间。所有这些地址都以01-00-5E(十六进制)开头,即从01-00-5E-00-00-00至01-00-5E-FF-FF-FF范围内的MAC地址可用于IP多播组。
已经有了一个简单的规程可用以把D类IP地址映射到所预留的空间内的MAC地址。这就允许IP多播容易利用网络接口卡支持的硬件级多播功能。
为了把IP多播地址映射到以太网的多播地址,只需把IP多播地址的低序23位放入特别的以太网多播地址01.00.5E.00.00.00(十六进制)的低序23位。例如,IP多播地址224.0.0.1变成以太网多播地址便是01.00.5E.00.00.01(十六进制,其中224.0.0.1的低序23位是00.00.01)。
图1-4显示的是该转换是如何把多播地址234.138.8.5(或用十六进制表示的EA-8A-08-05)映射成一个以太网多播地址的。注意,IP地址的高序9位没有映射进MAC层多播地址。
图1-4 在D类IP地址和IEEE-802多播地址之间的映射
你可能已经注意到,既然只把IP多播组标识符的23个低序位映射进IEEE-802 MAC地址的低序23位,那么这种转换就可能把32(=25)个不同的IP组映射到同一个MAC地址,因为IP多播组标识符的高序5位被忽略了。例如,224.138.8.5(E0-8A-08-05)和225.10.8.5(E1-0A-08-05)会被映射到同一个MAC地址(01-00-5E-0A-08-05)。实际上,设计者们所选择的这种方案是一种折中方案:一方面,使用28位中的23位作为硬件地址意味着包括了大多数IP多播地址,这一地址的范围是足够大的,使得两组选择具有低序23位完全相同的IP地址的概率很小;另一方面,安排IP去使用局域网多播地址空间的固定部分,使排除问题容易得多,并消除了IP与LAN其他协议间的干扰。这样设计的结果会使一些多播递交的IP分组可能被某个未被指定为接收方的主机接收。因此,IP软件必须仔细地检查所有到来的IP分组地址,丢弃任何不想要的IP分组。
1.4.3 多播数据报的传输和投递
当发送方和接收方是同一个子网(LAN)的成员时,多播分组(网络层)的发送和接收是直接的过程。源站简单地把IP分组编址成多播组,网络接口卡就会把D类地址映射到对应的IEEE-802多播地址,并把所形成的帧发送出去。可能是因为一个用户已经运行一个多播应用,或者主机的IP协议栈被要求接收某些组(例如224.0.0.1,即所有系统组)的流量,需要有选择地接收多播分组的IP主机通知它们的驱动软件过滤哪些组地址。
当发送方附接到一个子网,而接收方驻留在不同的子网上时,事情就变得有点复杂了。在这种情况下,路由器必须实现一个多播路由协议,允许建立多播投递树,并支持多播分组(网络层)转发。此外,每个路由器都需要实现一个组成员关系协议,允许它获悉在直接附接的子网上组成员的存在。