IP 多播的基本概念IP 多播 (multicast,以前曾译为组播) 已成为互联网的一个热门课题。
目的:更好地支持一对多通信。
一对多通信:一个源点发送到许多个终点。
例如,实时信息的交付(如新闻、股市行情等),软件更新,交互式会议及其他多媒体通信。
多播可大大节约网络资源
IP 多播在互联网上进行多播就叫做 IP 多播。
互联网范围的多播要靠路由器来实现。
能够运行多播协议的路由器称为多播路由器(multicast router)。当然它也可以转发普通的单播IP数据报。
从 1992 年起,在互联网上开始试验虚拟的多播主干网 MBONE (Multicast Backbone On the InterNEt)。 现在多播主干网已经有了相当大的规模。
多播 IP 地址IP 多播所传送的分组需要使用多播 IP 地址。
在多播数据报的目的地址写入的是多播组的标识符。
多播组的标识符就是 IP 地址中的 D 类地址(多播地址)。
每一个 D 类地址标志一个多播组。
多播地址只能用于目的地址,不能用于源地址。
多播数据报多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是 2,表明使用网际组管理协议 IGMP。
多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。
对多播数据报不产生 ICMP 差错报文。因此,若在 PING 命令后面键入多播地址,将永远不会收到响应。
在局域网上进行硬件多播互联网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E。
因此 TCP/IP 协议使用的以太网地址块的范围是
从 00-00-5E-00-00-00
到 00-00-5E-FF-FF-FF
不难看出,在每一个地址中,只有23位可用作多播。
D 类 IP 地址可供分配的有 28 位,在这 28 位中的前 5 位不能用来构成以太网硬件地址。
D 类 IP 地址与以太网多播地址的映射关系
D 类 IP 地址与以太网多播地址的映射关系
由于多播 IP 地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
网际组管理协议 IGMP 和多播路由选择协议
IP 多播需要两种协议为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP (Internet Group Management Protocol)。
连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。
IGMP 使多播路由器知道多播组成员信息
IGMP 的使用范围IGMP 并非在互联网范围内对所有多播组成员进行管理的协议。
IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。
IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
多播路由选择协议更为复杂
多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。请注意,单播路由选择通常是在网络拓扑发生变化时才需要更新路由。
多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
网际组管理协议 IGMP1989 年公布的 RFC 1112(IGMPv1)早已成为了互联网的标准协议。
1997 年公布的 RFC 2236(IGMPv2,建议标准)对 IGMPv1 进行了更新。
2002 年 10 月公布了 RFC 3376(IGMPv3,建议标准),宣布 RFC 2236(IGMPv2)是陈旧的。
IGMP 是整个网际协议 IP 的一个组成部分和 ICMP 相似,IGMP 使用 IP 数据报传递其报文(即 IGMP 报文加上 IP 首部构成 IP 数据报),但它也向 IP 提供服务。
因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议 IP 的一个组成部分。
IGMP 工作可分为两个阶段第一阶段:加入多播组。当某个主机加入新的多播组时,该主机应向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员。
本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器。第二阶段:探询组成员变化情况。因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。
只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。
但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
IGMP 采用的一些具体措施在主机和多播路由器之间的所有通信都是使用 IP 多播。
多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文。默认的询问速率是每 125 秒发送一次。
当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。
在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10 秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。对应于最小时延的响应最先发送。
同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。
多播路由选择多播路由选择协议尚未标准化。
一个多播组中的成员是动态变化的,随时会有主机加入或离开这个多播组。
多播路由选择实际上就是要找出以源主机为根结点的多播转发树。
在多播转发树上的路由器不会收到重复的多播数据报。
对不同的多播组对应于不同的多播转发树。
同一个多播组,对不同的源点也会有不同的多播转发树。
多播路由选择协议在转发多播数据报时使用三种方法:
(1) 洪泛与剪除
(2) 隧道技术 (tunneling)
(3) 基于核心的发现技术
(1) 洪泛与剪除这种方法适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。
一开始,路由器转发多播数据报使用洪泛的方法(这就是广播)。
为了避免兜圈子,采用了叫做反向路径广播 RPB (Reverse Path Broadcasting) 的策略。
RPB 的要点路由器收到多播数据报时,先检查它是否是从源点经最短路径传送来的。
若是,就向所有其他方向转发刚才收到的多播数据报(但进入的方向除外),否则就丢弃而不转发。
如果存在几条同样长度的最短路径,那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的 IP 地址最小。
最后就得出了用来转发多播数据报的多播转发树,以后就按这个多播转发树转发多播数据报。避免了多播数据报的兜圈子,同时每一个路由器也不会接收重复的多播数据报。
如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就应把它和下游的树枝一起剪除。
当某个树枝有新增加的组成员时,可以再接入到多播转发树上。
(2) 隧道技术 (tunneling)
(3) 基于核心的发现技术这种方法对于多播组的大小在较大范围内变化时都适合。
这种方法是对每一个多播组 G 指定一个核心(core) 路由器,给出它的 IP 单播地址。
核心路由器按照前面讲过的方法创建出对应于多播组 G 的转发树。
几种多播路由选择协议距离向量多播路由选择协议 DVMRP (Distance Vector Multicast Routing Protocol)
基于核心的转发树 CBT (Core Based Tree)
开放最短通路优先的多播扩展 MOSPF (Multicast Extensions to OSPF)
协议无关多播-稀疏方式 PIM-SM (Protocol Independent Multicast-Sparse Mode)
协议无关多播-密集方式 PIM-DM (Protocol Independent Multicast-Dense Mode)