什么是 Multicast|组播
一台机器和一台机器通信这是单播。
一台机器发出的数据包能被多台机器收到这就叫组播。
一台机器发出的数据包能被一个网段的机器收到这叫广播。
一个机器发送,多台机器接收,但是又不同于广播,发送端的IP设置在一个范围内都算组播,这个范围是224.0.0.0~239.255.255.255
作者:小丸子
链接:https://zhuanlan.zhihu.com/p/38150334
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
广播不安全、单播麻烦
优点:
- 一对多
- 有效利用带宽
- 更少的主机工作量
- 接受者地址未知
- 同时性
缺点
基于udp
- best-effort
- 没有用塞避免机制
- 无序
- 重复报文
应用
- 一对多、多对多(视频会议)、多对一(监控)
- PIM多播路由协议、IGMP是主机和last hop路由器之间的协议
地址段
A 0-127,B 128-191 ,C 192-223, D 224-239
- 多播地址不能配在router
- 多播地址不能做vlsm
- 保留地址224.0.0.0-224.0.0.255,公网组播地址224.0.1.0-238.255.255.255,私网组播地址239.0.0.0-239.255.255.255
- 224.0.0.1所有系统,224.0.0.2所有路由器
2. IGMP Internet Group Management Protocol
IGMPv1
query、report报文
路由器发查询每60s,holddown180s,下面主机发report。协议号2
Ether|IP|IGMP|FCS
query报文:D 224.0.0.1, G 0.0.0.0
report报文:D 224.1.1.1(1.让路由器和本组组员都收到,2.抑制其他组员的report),G 224.1.1.1(组地址)
report作用:1.充当ACK 2.主动告知路由器加入哪个组
IGMPv2
比v1新增指定组查询、离组消息
没必要有两个查询者R1、R2,查询者是通过互发查询包,比较ip地址小的作为查询者
如果R2在2倍的60s内都没有收到R1的查询包,认为R1down,自己充当查询者
host离组主动发离组消息 D 224.0.0.2(发到路由器), G 224.1.1.1
路由器收到离组消息之后马上发指定组查询,2s内没收到任何消息认为此组播组没有成员
IGMPv3
报文中包含源的信息
3. 组播mac地址
共有2^28个组播地址,但是mac只有 2^23个
32个ip:1个mac
0100.5e+组播地址的后23位对应过来
4. 二层交换机多播
防止sw把组播包发给vlan所有主机,让交换机有多播地址和sw某端口映射的表项
IGMP snooping:在交换机上做,截获igmp report报文,做sw端口和组播地址的对应表项。但是要拆三层包,消耗cpu
CGMP:不拆三层包,需要路由器和交换机结合
IGMP report:源、目标mac,源、目标ip,IGMP组地址
路由器截获report,给sw发CGMP join:GDA=目标mac USA=源mac
交换机里面CAM表存
多播路由协议
单播路由表关心包怎么出去
多播路由表更关心包怎么进来:解决重复包的问题
1.反向路径转发RPF
防止来回收发组播包从而形成环路,只有一个RPF接口
收到组播流量S=151.10.3.21的端口和我去访问你151.10.0.0/16网段的出接口不是一个端口,则RPF校验失败
选RPF接口的原则:
- 较小AD值
- 小metric值
- 较大ip地址
多播静态路由仅仅为了选rpf接口而不是为了多播转发,配了静态路由之后AD小
2. 基础
- 源树SPT:一个源一棵树(S,G)(1.1.1.1,224.1.1.1),(2.2.2.2,224.1.1.1)
路径最优,到接受者metric最小
路由器消耗多,每台router都得有信息
- 共享树RPT:找到RP,所有流量到RP集合,RP再下放多播流量到接收者
路径不是最优
但是路由器上只需要有(*,G)
3. PIM协议无关多播
- Sparse-mode:使用拉模型,源树、共享树
1)最后一跳路由器向RP发join(*,G),下面就是一个共享树,每台路由器都有(*,G)表项
2)源给RP发单播register报文,查看RP上是否有该组组员,如果有把单播包解封装把data发给接受者;
3)如果有接收者,RP向源发(S,G)join,形成源树,然后发register-stop
RPT可以自动切换成SPT,确保路径最优,last hop router发(S,G)给源
- Dense-mode:使用推模型、源树SPT
1)源flooding到下游所有router,(S,G)
2)没有接受者的router向源发修剪prune,以上两步每3min重复做
4. PIM过程
- 封装在ip 协议号103 组播地址224.0.0.13
- 建邻居30s hello,holddown 30x3.5s
- DR选举:1.高优先级 2.接口ip大
如果产生一个(S,G),就会自动产生一个(*,G)
5. DR作用
- Dense模式中无作用
- DR在sparse模式中负责发送join和register报文
- 如果运行IGMPv1,DR充当查询者
6. RP
- 静态:手工指定
- 动态:auto-rp candidate-RP周期性向224.0.1.39发信息,Mapping Agent选ip大的 作为rp向224.0.1.40宣告(所有路由器都加入这个组,所以都能收到)
做auto-rp规则
- sparse-dense模式(RP down了也可以用dense模式)
- CRP通告 进 IGP
- MA通告 进 IGP
原文:组播Multicast - 小丸子的文章 - 知乎 https://zhuanlan.zhihu.com/p/38150334