组播

为什么学习组播

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.