组播
为什么学习组播
unicast
broadcast
multicast group
优点
1一个源发送接受者多
2节约带宽
3节约主机消耗
4接受者地址未知
5同时性
缺点
1多播是基于udp 数据层面。
pim多播路由协议
2报文尽力传输
3没有拥塞避免机制
4无序 rtp(实时传输协议)确保无序性
5有可能收到多份。
多播应用类型:
1.一对多
2.多对多
3.多对一
数据层面
多播模型
first-hop
last-hop
igmp pc和路由器沟通的协议。
pim和igp无关
多播协议
intradomain:pim,dvmrp,mospf,cbt
interdomain:mbgp/msdp
多播地址
224.0.0.0-239.255.255.255
多播地址只能当做目标地址。
1保留地址224.0.0.0-224.0.0.255
2公网地址224.0.1.0-238.255.255.255
3私网地址239.0.0.0-239.255.255.255
4ssm(指定源多播pim高级应用) 232.0.0.0-232.255.255.255
5glop(233.0.0.0-233.255.255.255
224.0.0.1所有的主机和路由器
224.0.0.2所有路由器
224.0.0.5/6 ospf
224.0.0.9 rip 2
224.0.0.10 eigrp
224.0.0.13 pim
glop:
申请as号送一段多播地址
例:as65123把65123化为16进制=0xfe63 fe=254 63=99
233.254.99.0/24
igmp(internet组管理协议)
版本:v1;v2;v3现在主要用v2
igmpv1
membership queries(查询包)
membership reports
最后一台路由器的pc的沟通,路由器60s发一次queries查询包询问下面有哪些组员。发向的组播地址224.0.0.1 ttl=1下面的pc发送reports说明自己加入哪些组。
icmpv1包
ver:
code version=1
type:
1=host membership query
2=host membership report
group address:
multcast group address
chaecksum确保包的完整性
igmp封装进入ip协议号是2
1让路由器和本组的组员都能够收到
2抑制其他组员的report报文
report好处
1充当了ack
2主动告知路由器我加入哪个组
离组消息
路由器60秒周期性的发送query消息,发送3次180秒,如果没有接受到report,就说明没有组员。
igmpv2
报文
group-specific query(指定组的查询)
leave group message(离组消息)
querier查询者:不需要最后一台所有路由器都发送query查询包,在多冗余的情况下,选举一个查询者,谁的ip地址小就被选举为查询者,一开始都会发送查询包,查询包中会携带自己的ip地址,然后进行比较,谁的ip地址小就是查询者。
查询者:在igmpv2中,是通过发送查询包,比较ip地址较小的。
igmpv1需要靠pim去选择,选择dr,就充当了查询者。
查询包每60秒发一次,igmpv1发3次没收到回复就说明组内没成员。如果120s两倍的查询包周期,没有收到组内的查询者路由器的查询包,我就充当了查询者。
igmpv2报文
type:
0x11=membership query
0x12=version 1 membership report
0x16=version 2 membership report
0x17=leave group
max.response time (最大相应时间)
default=10secs report in 1/10secs.
show ip igm interface e0
show ip igmp group
leave(离组消息) d:224.0.0.2 g:224.1.1.1
当有pc要离开组,就会发送离组消息。作为最后一台查询者路由器收到后,由于运行的是igmpv2,我会立即发送一个关于这个组还有没有其他成员的报文,如果2秒内没有别的成员给我回复,就会删除多播流量。
实验:
r1:
ip multicast-routing(启用多播路由)
int e0
ip pim sparse-mode
r2:
ip multicast-routing
int e0
ip pim sparse-mode
pc3:
int e0
ip igmp join-group 224.1.1.1
r1:
show ip igmp interface
show ip igmp group(关于组员跟接口的表)
debug ip igmp
r2:
debug ip igmp
pc:
debug ip igmp
pc3:
no ip igmp join-group 224.1.1.1
ipgmpv3
包含了源的信息,当有多个源的时候我可以选择接受那个源的信息。
2层组播地址
组播有2^28个。
mac地址前24位oui组织唯一标示符,后24任意指定。
cisco设备是:00000c
只取ip地址后23位+上0然后+上01-00-5e就构成多播mac地址。
32个组播地址又可能映射为同一个mac地址。
32:1
第25位强制为0
2层多播的问题
当交换机收到组播或者广播会像本vlan泛红。
解决方法:
igmp snooping(igmp窥探)
cgmp(私有)路由交换都得启用
igmp snooping:只需要在交换机启用
截获igmp的report报文然后做端口和多播地址对应表项。
实验:
sw1:
show ip igmp snooping(默认开启)
ip igmp snooping vlan 1(可以针对某个vlan)
r4:
ip multicast-routing
int e0/0
ip pim sparese-mode
r6:
int f0/0
ip igmp join-group 224.1.1.1
cgmp
启用cgmp需要路由器交换机的结合
路由器截获igmp report报文,返回发给交换机。
gda组目标地址
usa单播源mac地址
cgmp二层报文
实验:
sw3:show cgmp
cgmp (启用cgmp)
r1:
ip multicast-routing
int e0/0
ip pim sparse-mode
ip cgmp(路由器启用cgmp)
pc2:
ip igmp join-group 224.1.1.1
sw3:
show cgmp多播转发
多播路由表反应这包如何进来。(解决重复包的问题)
反向路径转发(rpf)
一个路由器只有一台rpf接口
rpf 校验
它会找自己的单播路由表,找到源的单播路由表。多播流量和返回的单播路由不匹配就校验失败。
rpf接口的选举规则
如果有多条路由负载均衡,先比小的ad,然后比较小的metric,然后再选大的ip。
多播静态路由:仅仅是为了选择rpf接口。而不是作为多播转发。
r2:
ip mroute 1.1.1.1 255.255.255.255 s0/0 (进来接口)
show ip mroute static 多播静态路由的ad是0
树形结构:
1源树(spt)最短路径树
2共享树(rp)
一旦所有路由器都启用源树,一个源一颗树。
notation:(s,g) s=source g=group
好处源到接受者路径最短,缺点每个源就是一颗树占用路由器资源。
模式为dense-mode
共享树rp
在网络中先找到一个点,集合点作为rp,当源发多播流量不是直接发送接受者,所有的源都发到rp,然后rp再下放给接受者。
notation:(*,g) *=all source g=group
针对rp到最后一台路由器节约了资源,但是路径不是最优的,精确的说rp到最后一台路由器是共享树,而rp到源还是源树。
pim(protocol independent multcast)协议无关的多播
sparse mode 稀疏模式
dense mode 密集模式,接受者非常,95%都是接受者。路由器把流量都推下去。它使用的是源树。
当源开始发送多播流量进行泛红,每台路由器会生成一个(s,g),当一些路由器没有接受者,就会向上发送一个pruning包,进行修剪。就不会受到多播流量。flood和prune每3分钟执行一次。3分钟泛红和修剪的重复过程。
pim组播地址224.0.0.13.协议号103.hello包30秒,holdtime3.5倍的hello包1分45秒
pim工作原理:
开始发送hello包,组播地址224.0.0.13.hello每30秒发送一次,holdtime3.5*30=1.45.
dr指定路由器:先看接口优先级再比ip地址较高。选取方式。
show ip pim neighbor(查看pim邻居)
s状态可以刷新,可以抢占,一旦有高优先级,可以更改dr,默认都是s
b双向pim,标示运行那种pim
n没有优先级只能通过控制ip地址选择dr。就是n.