IP多播
多播Multicast也叫作组播,是一种实现一对多的通信技术,与一对一相比大大节省了网络带宽资源,因特网上进行的多播叫做IP多播。如下图所示,按照一对一的单播通信视频服务器需要发送60个IP数据报,而使用多播技术的服务器只需要发送一个IP数据报,而后经过路由器的复制转发给目的网络(网络层多播复制IP数据报),最终在目的网络中进行硬件多播(没有复制IP数据报)
多播地址和多播组
- 多播地址:在IPv4中D类地址被作为多播地址,224.0.0.0-239.255.255.255,多播地址只能作为目的地址不能作为源地址,包括预留的多播地址(永久多播地址OSPF:224.0.0.5,RIP 224.0.0.9)全球范围可用的多播地址224.0.1.0-238.255.255.255,本地管理的多播地址239.0.0.0-239.255.255.255
- 多播组:每一个D类地址用来标识一个多播组,使用同一个IP多播地址接收IP数据报的主机共同组成一个多播组,非多播组成员也可以向多播组发送IP多播数据报,尽最大努力交付的不可靠传输。每个多播组的成员是随时可以变动的,一台主机可以随时加入和离开多播组,多播组的数量和地理位置并不受限制,一台主机可以属于多个多播组。
在局域网上的多播:由于MAC地址也有多播MAC地址,因此只要把IPv4地址映射成多播MAC地址就可以将IP多播数据报封装在局域网的MA帧中,而MAC帧首部的目的MAC地址字段,就设置为由IPv4地址映射成的多播MAC地址,从而实现局域网的IP多播,当某个多播组的成员主机配置其所属的多播组IP地址时候,系统根据映射规则从IP多播地址生成响应的局域网MAC多播地址。
以太网多播MAC地址的生成规则:01-00-5E-00-00-00——01-00-5E-7F-FF-FF中的后23位用于从IP地址到MAC地址的映射,但是IP多播地址的可变部分有28位,而MAC地址可用于映射的只有23位,因此IP多播地址与MAC地址的映射关系不是唯一的
因特网号码指派管理局IANA,将自己从IEEE注册管理机构申请到的以太网MAC地址块中从01-00-5E-00-00-00到01-00-5E-7F-FF-FF的多播MAC地址,用于映射IPv4多播地址。
IP多播地址的可变部分有28位,而MAC地址可用于映射的只有23位,因此IP多播地址与MAC地址的映射关系不是唯一的,因此收到IP多播数据报的主机还要在网际层利用软件进行过滤,把不是主机要接收的IP多播数据报丢弃
网际组管理协议IGMP
网际组管理协议IGMP管用于本地网络上的多播路由器管理本网络中的主机加入和退出多播组,IGMP网际组管理协议只对本网络有效,使用IGMP并不能知道多播包含的成员数量以及成员分布,属于同一个多播组的主机可能分布在不同的网络中。
IGMP报文类型及封装:
成员报告报文
成员查询报文
离开组报文
封装:
IGMP报文被封装在IP数据报中发送,其中协议字段为2表示IP数据报的数据载荷属于IGMP报文,目的地址为多播组IP地址,TTL的值必须为1,防止发送到其他网络,造成网络资源的浪费
加入多播组
如上图所示,在某个时刻,本地网络中有IP多播组228.1.1.1,且仅有C主机属于该多播组,此时主机A和主机B希望加入IP多播组226.0.9.26,于是A、B中的任意一个主机发送IP多播组成员报告报文,当另一台主机接收到该报文后就将取消发送自己准备发送的IGMP成员报告报文,本网络内的所有主机及连接本网路ode路由器接口均能接收到IGMP报文,该成员报告报文被主机C、D在MAC丢弃,路由器R1接收到该报文后,会在路由器多播列表内新增一个IP多播组条目
拥有多播组成员的多播路由器监视多播组成员变化,目的地址为224.0.0.1,本地的所有参加多播组的成员都会接受该多播数据报
如上图所示,多播路由器向本地网络中发送IGMP查询报文,源地址为路由器R1的地址,目的地址为224.0.0.1这一特殊地址,所有参与多播组的成员主机都会接收该报文,而没有加入任何多播组的主机会在MAC层将该IGMP查询报文丢弃,接收到该IGMP报文的主机还要在网际层根据查询的IP多播组决定该IGMP查询报文是否接收,在上图中主机C属于228.1.1.1多播组,但是IGMP查询的是226.0.9.26多播组,于是主机C在网际层将该IGMP查询报文丢弃,主机A和主机B会接收该IGMP查询报文,并择机发出该IGMP查询报文的响应报文,从而防止多个成员同时发送响应报文造成网络资源的浪费,最先发送的IGMP查询报文的响应报文会传给本网络内的所有主机及连接本网络的路由器接口,属于该IP多播组的成员在收到该响应报文后就取消自己准备发送的IGMP成员报告报文。
当一个多播路由器长时间收不到该多播路由组成员的响应就将该IP多播组从多播组列表中删除
退出多播组:IGMPv2新增当主机要退出某个多播组时,可以主动发送一个离开组的报文而不必等多播路由器查询,使得多播路由器能够更快发现某个组有成员离开,当多播路由器接收到该报文后立即发送针对该组的特殊的IGMP成员查询报文,探测是否还有主机属于该多播组。此时目的地址为该多播组地址。
多播路由选择协议
多播路由选择协议的任务是在多播路由器之间为每个多播组建立一个多播转发树
多播转发树连接多播源和所有拥有该多播组成员的路由器
IP多播数据报只沿着多播转发树进行洪泛,就能传送到所有拥有该多播组成员的多播路由器
在多播路由器连接的局域网内,多播路由器通过硬件多播,将IP多播数据报发送给该多播组的所有成员
针对不同的多播组需要维护不同的多播转发树,而且必须动态适应多播组成员的变化,但是此时网络拓扑不一定发生变化,因此,多播路由选择协议要比单播路由选择协议复杂得多
及时某个主机不属于任何多播组的成员,它也可以向任何多播组发送多播数据报
为了覆盖所有的多播组成员,多播转发树可能要经过一些没有多播组成员的路由器,如下图R2
基于源树的多播路由选择
基于源树的多播路由选择的最典型算法是反向路径多播(Reverse Path Multicast,RPM)算法,其主要包括两个步骤,利用反向路径广播RPB(Reverse Path Broadcasting,RPB)算法建立广播转发树,利用剪枝算法Pruning,剪除广播转发树中的下游非成员路由器,获得一个多播转发树
建立广播树
使用洪泛法,但是在有环路的网络中会导致广播分组在网络中兜圈循环转发最终导致网络拥塞。
使用反向路径广播算法建立广转发树
- 每一个路由器在收到一个广播转发分组时候,先检查该广播分组是否是从原点的最短路径传送而来的
- 若是就从除去自己刚接收该广播分组的接口外的其他接口转发该分组
- 否则就丢弃该广播分组,如果本路由器
- 如果本路由器同时有数个邻居路由器都处在到源点的最短路径上,那么只能选取其中一个IP地址最小的路由器作为到源点的最短路径上的路由器
- 每一个路由器在收到一个广播转发分组时候,先检查该广播分组是否是从原点的最短路径传送而来的
在广播树上剪枝和嫁接以建立多播转发树
基于组共享树的多播路由选择
采用基于核心的分布式生成树算法来建立共享树,在每个多播组中指定个一个核心路由器,以该路由器为根,建立一棵连接多播组的所有成员路由器的的生成树作为多播转发树。在每个多播组中除了核心路由器,其他所有成员路由器都会向自己多播组中的核心路由器发送核心路由器单播加入报文。,加入报文通过单播向核心路由器转发,直到到达已经属于该多播生成树的某个节点或者直接到达核心路由器,加入报文所经过的路径就确定了一条从单播该报文的边缘节点到核心路由器之间的分支,将这个新分支嫁接到现有的多播转发树上
参考资料
文档信息
- 本文作者:wendaocsmaster
- 本文链接:https://wendaocsmaster.github.io/2023/02/22/Computer-Networks-network-layer-IGMP/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)