多播在历史上已不只一次成为时髦用语。IP多播指的是一个发送者向多个接收者发送数据,但只需发送一份数据副本。多播对流媒体非常有用,所以我们来研究一下它的工作原理。
多播很象广播,多播数据被分配一些特定的地址。两者的区别在于,一些多播地址可以被路由,并使用在Internet上。IANA(Internet地址分配机构)为多播预留的地址空间是224.0.0.0/4,我们现在不再说“D类”地址了。224/4的地址范围是从224.0.0.0一直到239.255.255.255。
多播比广播更具效率,因为广播数据包必须由本地链路上每台电脑接收,而每个操作系统都会生成一个中断,以便对收到的数据包进行检查,这个过程中通常会复制一些数据。而在多播时,网卡并不会接收这些数据包,除非它被告知需要接收。
缺省情况下,启用了多播功能的网络接口卡(NIC)在引导时只会侦听224.0.0.1上的数据,这个地址被赋给了“该子网上的所有系统”。是的,这与广播非常相似,事实上很多人认为广播就是多播的一种特殊情况。
通过设置网卡是否忽略多播内容,多播可以选择传送的目的对象,这是本地链路的工作方式,但Internet是怎样做的呢?如果有人想通过多播向非洲传送一个名人孩子出生的流数据,我们并不想让Internet上的每一台路由器都消耗带宽把它传送到每台电脑。除了通过设置本地NIC做出决策外,还有一些多播路由机制可以“修剪”某些子网。如果你的网络中没有人想看这些信息,那么就没有理由让它进入你的网络。
那些对这一信息感兴趣的人可以运行一个特别的程序,该程序会依次告诉NIC去加入一个多播组。NIC利用Internet组管理协议(IGMP)提醒本地多播路由器,它想加入一个特定的组。不过这只能单向实现(只能接收多播数据)。如果有人想发送和接收多播的信息,那么IP层就需要更高的技巧。为了发送数据,IP协议会把一个IP地址映射到一个以太网地址上,并把它告诉网卡驱动程序,以便用另一个MAC(媒体访问控制)地址配置网卡。
IGMP本身非常简单。它与ICMP(Internet控制消息协议)很相似,因为它也用到了IP层,只不过协议号码不同而已。IGMP协议头只包含4个内容:版本号、类型、校验和,以及要加入的组(即多播地址)。当数据包被发送出去的时候,多播路由器就知道了至少有一台主机有兴趣接收数据包,以获得一个特定的多播地址。现在这台路由器必须以某种方式和其它路由器进行多播路由,以便获得所需的数据。