4.5.1 多播的概念

Q: 什么是多播?
A: 多播是一种一对多的通信方式,让源主机一次发送的单个分组可以抵达用一个组地址标识的若干目的主机。

Q: 多播需要哪些支持?
A: 多播需要路由器的支持才能实现,能够运行多播协议的路由器称为多播路由器。

Q: 因特网多播的最后一步是什么?
A: 因特网多播的最后一步是局域网多播,将 IP 多播数据报在局域网上用硬件多播交付给多播组的所有成员。

4.5.2 IP 多播地址

Q: IP 多播地址是什么?
A: IP 多播地址是 IPv4 中的 D 类地址,用于标识多播组。

Q: IP 多播地址的范围是什么?
A: D 类地址的前四位是 1110,因此 D 类地址范围是 224.0.0.0 ~ 239.255.255.255。

Q: IP 多播地址有哪些特点?
A: 每一个 IP 多播地址,只能够作为数据报或者说分组的目的地址,但是不能够作为源地址。
多播数据报也是 “尽最大努力交付”,不提供可靠交付,应用于 UDP。
对多播数据报不会产生 ICMP 差错报文。
并非所有 D 类地址都可以作为多播地址,部分 D 类地址已经被指派为永久组地址了。

Q: IP 多播地址可以分为哪些类别?
A: IP 多播地址可以分为以下类别:

  • 预留多播地址
  • 管理多播地址
  • 应用多播地址
  • 本地多播地址

Q: 多播数据报和一般的 IP 数据报有什么区别?
A: - 多播数据报使用 D 类 IP 地址作为目的地址。

  • 多播数据报的首部中的协议字段值是 2,表明使用 IGMP 协议。

Q: 多播数据报有哪些特点?
A: - 多播数据报也是 “尽最大努力交付”, 不提供可靠交付。

  • 多播地址只能用于目的地址, 而不能用于源地址。
  • 对多播数据报不产生 ICMP 差错报文。

Q: IP 多播可以分为哪两种?
A:

  • 只在本局域网上进行硬件多播。
  • 在互联网的范围内进行多播。

Q: 因特网范围内多播和硬件多播的区别是什么?
A: 因特网范围内多播只能够在因特网的范围内进行,而硬件多播是在局域网范围中进行。

4.5.3 在局域网上进行硬件多播

Q: 局域网如何实现 IP 多播?
A: 因为局域网支持硬件多播,所以只要把 IP 多播地址映射成多播 MAC 地址,即可将 IP 多播数据报封装在局域网的 MAC 帧中,而 MAC 帧首部的目的 MAC 地址字段就设置为由 IP 多播地址映射成的多播 MAC 地址。

Q: 硬件多播如何实现?
A: 在局域网范围中,同单播地址一样,多播 IP 地址需要相应的多播 MAC 地址在本地网络中实际传送帧。

Q: IANA 拥有的以太网多播地址的范围是什么?
A: IANA 拥有的以太网多播地址的范围是从 01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF。


Q: 多播 MAC 地址的格式是什么?
A: 多播 MAC 地址以十六进制值 01-00-5E 打头,余下的 6 个十六进制位是根据 IP 多播组地址的最后 23 位转换得到的。


Q: 如何解决多个 IP 多播地址映射到同一个 MAC 地址的问题?
A: 对于映射有多个的情况时,需要再 IP 层利用软件来进行过滤(对比 IP 地址),把不是本主机要接收的数据报丢弃。


Q: IP 多播地址与以太网 MAC 地址的映射关系是唯一的吗?
A: IP 多播地址与以太网 MAC 地址的映射关系不是唯一的,所以收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。

4.5.4 IGMP 与多播路由协议

Q: 什么是 IGMP?
A: IGMP(网际组管理协议)用于让连接到本地局域网上的多播路由器,知道本局域网上是否有主机参加或退出了某个多播组。

Q: IGMP 的作用是什么?
A: IGMP 帮助多播路由器了解多播组的成员信息。

Q: IGMP 是一个独立的协议吗?
A: IGMP 不是一个独立的协议,而是整个网际协议 IP 的一个组成部分。

Q: IGMP 的工作过程分为哪两个阶段?
A: - 第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个 IGMP 报文,声明自己要成为该组的成员。

  • 第二阶段:组成员关系是动态的,本地多播路由器要周期性地探询本地局域网上的主机,以了解这些主机是否仍继续是组的成员。

Q: IGMP 协议知道多播组的成员数量吗?
A: IGMP 协议不知道多播组的成员数量,只能够让路由器知道是不是有主机或者进程参加了或者说是退出了这个组播组。

Q: IGMP 如何避免发给没有主机加入的局域网呢?
A: 通过 IGMP 协议,通过有这样的一个协议可以知道是否要分发给局域网,但是这个 IGMP 协议并不是知道很详细,不知道这个局域网当中的组播成员个数,只能够让路由器知道是不是有主机或者进程参加了或者说是退出了这个组播组

仅使用IGMP并不能在因特网上进行IP多播。连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作,以便把IP多播数据报用最小的代价传送给所有的多播组成员,这就需要使用多播路由选择协议。

6.4.4、多播路由选择协议

Q: 什么是多播路由选择协议?
A: 多播路由选择协议用于在多个路由器之间进行路径选择,找到以源主机为根节点的多播转发树。

Q: 多播路由选择协议的作用是什么?
A: 多播路由选择协议可以避免在路由器之间兜圈子,确保多播数据报能够高效地传递给所有组成员。

6.4.5、多播路由协议常使用的三种算法

Q: 多播路由协议常使用的三种算法是什么?
A: 基于链路状态的路由选择
基于距离-向量的路由选择
协议无关的多播(稀疏/密集)

Q: 协议无关的多播是什么意思?
A: 协议无关指的是在建立转发树的时候,是使用单播数据报和远程路由器来联系,但是并不要求使用相同的一个单播路由选择协议。

Q: 稀疏和密集指的是什么?
A: 稀疏和密集指的是一个多播组中的主机,若是比较分散就是稀疏,若是比较近那么就是密集。

Q: 什么是多播路由选择协议?
A: 多播路由选择协议用于帮助多播路由器找到以源主机为根结点的多播转发树,将多播数据报用最小代价传送给所有组成员。

Q: 多播转发树的特点是什么?
A: 每个分组在每条链路上只传送一次,即在多播转发树上的路由器不会收到重复的多播数据报。

Q: 多播转发树是唯一的吗?
A: 多播转发树不是唯一的,不同的多播组对应于不同的多播转发树,同一个多播组,对不同的源点也会有不同的多播转发树。

Q: 路由器如何知道自己各接口所在局域网中是否有某个多播组的成员?
A: 路由器通过 IGMP 协议(Internet Group Management Protocol,网际组管理协议)知道自己各接口所在局域网中是否有某个多播组的成员。

Q: IGMP 协议的局限性是什么?
A: IGMP 仅在本网络有效,使用 IGMP 并不能知道多播组所包含的成员数量,也不能知道多播组的成员都分布在哪些网络中。

Q: IGMP 的三种报文类型是什么?
A: 成员报告报文:用于加入多播组(由组内一个成员声明即可)。
成员查询报文:用于查询特定多播组的 IP 多播地址。
离开组报文:当主机要退出某个多播组时,可主动发送一个离开组报文而不必等待多播路由器的查询。

Q: IGMP 报文如何传送?
A: IGMP 报文被封装在 IP 数据报中传送,协议字段的值为 2,表示数据载荷部分是 IGMP 报文。生成时间 TTL 字段的值为 1,避免封装 IGMP 报文的 IP 多播数据报被路由器转发到其他网络。

Q: IGMP 如何加入多播组?
A: 当主机 A 想加入多播组 X 时,主机 A 向多播组 X 的多播地址发送 IGMP 报文,说明自己想要成为该组的成员。多播路由器收到 IGMP 报文后,解析该报文,把主机 A 的多播 IP 地址加入到多播组列表中。

Q: IGMP 如何监视多播组的成员变化?
A: 多播路由器默认每隔 125 秒就向其直连网络发送一个封装有 IGMP 报文的 IP 多播数据报。只要某个多播组的一个主机响应,则认为这个组是活跃的;若连续多次查询,某个多播组均没有一个主机响应,则认为这个组不活跃,将该组从多播组列表中删除。

Q: IGMP 如何退出多播组?
A: IGMPv2 增加了一个可选项:当主机要退出某个多播组时,可主动发送一个离开组报文,而不必等待多播路由器的查询。这样可使多播路由器能够更快地发现某个组有成员离开。

Q: 多播路由选择协议的主要任务是什么?
A: 多播路由选择协议的主要任务是在多播路由器之间为每个多播组建立一个多播转发树。

Q: 多播路由选择协议与单播路由选择协议的区别是什么?
A: 多播路由选择协议要比单播路由选择协议(例如 RIP、OSPF 等)复杂得多,因为多播组的成员是动态变化的,针对不同的多播组要维护不同的多播转发树,且多播转发树需要动态地适应多播组成员的变化,而此时网络拓扑并不一定发生变化。

Q: 多播数据报如何传送?
A: IP 多播数据报沿着多播转发树进行洪泛就能传送到所有拥有该多播组成员的多播路由器。之后,在多播路由器所直连的局域网内,多播路由器通过硬件多播,将 IP 多播数据报发送给该多播组的所有成员。

Q: 多播转发树是否会经过没有多播组成员的路由器?
A: 为了覆盖多播组的所有成员,多播转发树可能要经过一些没有多播组成员的路由器。

Q: 多播转发树的构建方法有哪些?
A: 多播转发树的构建方法有两种:

  • 基于源树多播路由选择(Source-Base Tree)
  • 组共享树多播路由选择(Group-Shared Tree)

即使某个主机不是任何多播组的成员,它也可以向任何多播组发送多播数据报