一.组播
--------------------------------------------------------------------------------------------------
>三种报文转发形式
单播 组播 广播
--------------------------------------------------------------------------------------------------
>组播的特点(产生的原因):
》适用环境:--当需要把相同的一份流量发送给多个接收者;
--当接收者未知时;---视频共享;
》优点:--提高带宽利用率;
--降低了转发数据对CPU的消耗;
》同步:数据被同时被发送给多个接收者;----股票信息;
>组播和单播或广播的对比:
带宽利用率;
适合接收者未知的应用;
设备CPU消耗;
接收者的接收控制;
------------------------------------------------------------------
>组播是运行在UDP上
(为什么不运行在TCP 当接收者未知时,无法建立起握手;就算接收者是已知的,也需要
建立太多的连接)
》UDP的缺点
--不可靠 尽力而为
--没有拥塞避免机制
--无序
--重复的包
既然所依靠的传输协议有诸多缺点,因此,这些缺点就必须依靠组播自身的机制来解决;就
像寄快递,也许快递公司只能保证物品能到达,不能保证在路途中是否受损,此时,我们可以
寄送物品前,给与物品安全的包装,通过自己的措施来提高物品在传输途中的安全性;
--------------------------------------------------------------------
>组播的应用环境
---一对多 视频会议、语音广播;
---多对多 讨论组、多人仿真游戏;
---多对一 数据收集、网络竞拍; 此时此时已经和单播很相似;
--------------------------------------------------------------------------
>IP组播地址范围:
224.0.0.0-239.255.255.255------前四位为1110
???怎样用访问控制列表来表示组播流量:
access-list 1 permit 224.0.0.0 15.255.255.255 即组播地址的前四位是固定的1110;
224.0.0.0-224.0.0.255 是给局部连接使用,无论其TTL值是多少,路由器不会转发这样的组播流
239.0.0.0-239.255.255.255 是私有组播地址
224.0.1.0-238.255.255.255 是全球组播地址
常用组播地址:
224.0.0.1 同一子网的所有节点;
224.0.0.2 同一子网的所有路由器;
224.0.0.4 所有DVMRP路由器;
224.0.0.13 所有PIMV2路由器;
224.0.0.5 224.0.0.6 224.0.0.9 224.0.0.10 用于单播路由协议中;
其他保留地址:
224.0.1.1 NTP
224.0.1.39 AUTO-AP竞争
224.0.1.40 AUTO-AP发现通告
==>往组播IP地址发包时,二层封装时,目的MAC地址怎么填写呢?
>组播IP地址与组播MAC地址的映射关系:
因为IP组播地址的前四位是固定的,即1110,所以还剩28位可变的,如果为了实现一个组播IP地址对应
一个组播MAC地址,就需要申请28位MAC地址位,当时的组播开发者,因为费用的原因,只购买了24位可变
MAC地址,而且把其中一位另作他用,所以只剩23位可变MAC地址,也就是说32个IP组播地址对应一个组播
MAC地址;
把IP地址最后面的23比特加在组播地址的最后面,而前面的25比特是01005E 0;
e.g.:
224.135.1.5 -----> 10000111 00000001 00000101
00000111 00000001 00000101=070105
==》01005E 070105
-----------------------------------------------------------------------------------------
>组播的组成
---组播的源 发送组播信息的终端;
---源段 由组播源和第一跳路由器组成,组播源通过软件等方式将组播流量发送给第一跳路由器;
组播的源和源段之间不需要运行任何的组播信令或协议;
---组播的接收者 加进组播组,接收组播流量的终端;
---接收者段 接收者和最后一跳路由器组播组成的接收者段
接收者和最后一跳路由器之间是有运行协议的,这个协议是IGMP(因特网组管理协议 其协议号是2);
---组播网络;
-----------------------------------------------------------------------------------------
>IGMPV1
》报头结构(8字节):
|<4bit版本>|<4bit类型>|<8bit保留位>|<16bit校验> |
|--------------4字节组播组ID-------------------|
---版本:版本1---0001
---类型:查询--0001,报告---0010
》有两种报文
---主机成员关系查询:路由器周期性地向224.0.0.1发送查询包(每隔一分钟 当三分钟没有接收到
主机成员报告,则把相应组播流量修剪);并没有查询具体的组播,此时组播组地址为0.0.0.0;
---主机成员关系报告:当多个主机需要加入同一个组播组时,没必要每个主机都要做出回应;所以当
主机收到关系查询时,并不是立马回应成员关系报告,而是等待一个时间才回应成员关系报告(这
个时间是系统随机产生的,为1S-10S),是向所要加组的组播地址发送的;
当一个主机要推出该组时,是静悄悄的离开的,这是路由器是不知道的,直到路由器发送三次查询,
没有主机回应时,路由器才意识到该组被修剪;
--------------------------------------------------------------------------------------------
>IGMPV2
报头结构:
|8bit类型|8bit最大响应时间| 16bit校验|
|-----------32bit组播组地址----------|
---类型:0x11--查询报文,0x16--应答报文(版本1的是0x12) ,0x17--离组消息,
---最大响应时间:单位是0.1秒;默认是100;
增加了两种报文
---离组消息(LEAVE GROUP MESSAGE):那台回应主机成员关系报告的主机,离组时会发送离组消息 0X17
(目标 224.0.0.2);
---组特殊查询:当路由器接收到离组消息,会发送组特殊查询(收到所要离组的组地址),比如说,有
主机发送离开224.1.1.1组播的离组消息,路由器收到后,会发送组特殊查询,询问还有主机在组
224.1.1.1中么;此时最大响应时间为10,即如果在1秒内没有收到主机的回应,路由器就认为没有
组成员了;组特殊查询包发两次,防止丢包;
***注意:课本上说,只有最后一台成员主机才发离组消息;上面的“最后一台成员主机”是指发送组成
员关系报告的主机;
--------------------------------------------------------------------------------------------
>IGMPV3
可以指定组播源;
example:
R1 R2 R3 R4 都和SW相连,R1作为网管路由器,R2 R3 R4作为PC;
R1:
ip multicast-routing
int f0/0
ip pim dense-mode
R2、R3、R4:
int f0/0
ip igmp join-group 224.1.1.1
==》R2 R3 R4:
show ip igmp interface f0/0 ---可以看到,默认情况下,IGMP是版本2的;
==》R1:
show ip igmp groups ---可以看到,对于224.1.1.1这个组,路由器只收到一台路由器
的成员关系报告;所以,只有这台路由器离组时才会发离组消息;
debug ip mpacket ---路由器发送组成员关系查询后,回复组成员关系报告的PC是不固定;
由系统自动产生的随机时间而定;
==》R1:
debug ip igmp 224.1.1.1
show ip igmp groups 此时看到224.1.1.1这个组,回复成员关系报告的是R2,那么在R3或R4
的f0/0接口下,取消加组no ip igmp join-group 224.1.1.1时,R1上是看不到离组消息的;
只有当R2离组时,R1上才可以看到debug显示的离组消息;
--------------------------------------------------------------------------------------------
报文总结:
报文类型 源IP地址 目的IP地址 GID
主机成员关系查询 路由器IP地址 224.0.0.1(所有主机) 0.0.0.0
主机成员关系报告 主机IP地址 所加组播组的IP地址 所要加组播组
离组消息 主机IP地址 224.0.0.2(所有路由器) 所在组播组
组特殊查询 路由器IP地址 相应组播组的IP地址 相应组播组
--------------------------------------------------------------------------------------------
>组播网络
在第一跳路由器和最后一跳路由器之间的网络,与单播相同,组播的流量在这个网络传播需要组播的协议;
---早期有运行RIP上DVMRP,它要求是运行在RIP单播路由协议之上;
---运行在OSPF上的MOSPF (六类LSA)
---CBT
==》以上几种CISCO都不支持
---当今最流行的组播协议是PIM(协议无关组播),对于运行的单播路由协议没有要求;
--------------------------------------------------------------------------------------------
>PIM
---使用的组播地址是224.0.0.13;
---组播的分发树:所谓分发指的是组播的流量从源到接收者;
1 源树,也叫最短路径树SPT;
---以组播的源为根;
---每个源对应一个SPT,用(S,G)来表示;
2 共享树,选举出一台路由器,组播的源将组播发给这台路由器(RP 聚合点),由这台路由器
再将组播流量转发给接收者;
---公用的根,RP;
---(*,G)来表示;
源树相当于厂家直销,也就是自己的产品直接以最优方式给客户;
共享树相当于代理销售,像神码是很多厂家的代理,厂家将自己的产品通过神码给各个客户;
---共享树又分为双向共享树和单向共享树,双向共享树的源发送的组播信息不一定要经过RP,而单向共享树
的组播信息必须经过RP再转发给各个客户端;单向共享树中,源的信息到达RP的方式有两种,一种是由第一条
路由器以单播形式讲组播信息发给RP,另外一种是源和RP之间运行SPT,来实现组播信息到达RP,这是PIM的做法;
---------------------------------------------------------------------------------
>组播的模式
---密集模式:采用源树,假设网络有很多组播的接收者,是一种PUSH的思想,每隔三分钟进行FLOOD及
PRUNE;当成员密集,流量大时;
消息类型:
--HELLO,来维持PIM邻居关系,每30s发一次,105s(3.5倍)为保持时间,发往组播地址224.0.0.13;
--JOIN/PRUNE 发往224.0.0.13
--GRAFT 嫁接报文;
--GRAFT-ACK;
--ASSERT(S,G);
JOIN消息可以覆盖PURE消息;
---稀疏模式:采用共享树也可以采用源树,是PULL的思想,是显式加入;
消息类型:
--HELLO
--JOIN/PRUNE
--ASSERT
--REGISTER
--REGISTER-STOP
--------------------------------------------------------------------------------------------
example:
R1(source)----R2----R3----R4----R5(receiver)
基本连通性配置;
起单播路由协议EIGRP;
》接收者加组:
R5:
int f0/0
ip igmp join-groups 224.1.1.1
no shut
》在组播网络上开启组播路由:
R2 R3 R4:
ip multicast-routing
int f0/0
ip pim dense-mode
int f0/1
ip pim dense-mode
》查看debug信息:
R2 R3 R4:
首先关闭缓存:no ip mroute-cache
debug ip mpacket
debug ip pim 224.1.1.1
--------------------------------------------------------------------------------------------
>稀疏模式RP
稀疏模式需要RP(聚合点),当叶路由器收到主机成员关系报告,一跳跳往RP请求加进组播组(*,G),
一定是收到了对方的请求,才可以将组播的流量以组播方式出去!
---整个网络都需要知道RP的存在,RP的配置可以是静态配置,在每一台路由器上进行配置,也可以是
AUTO-RP(CISCO专有的)
---RP的侯选者向组播地址224.0.1.39发送侯选,发现者监听这个组播地址,并从中选出RP向组播地址
224.0.1.40公告RP的信息;
-------------------------------------------------------------------
>源注册:
源将组播流量发往第一跳路由路由器,此时,第一跳跑由器没有收到任何请求加进组播的信息,只能将
组播流量封装在单播报文中发往RP 这叫源的注册包 RP收到注册报文。识别到源是谁。则一跳跳往源发送
请求加进(S,G) 第一跳路由器收到RP的请求后。构建起组播流的分发树。可以将组播流量以组播方式发给
RP 当RP同时通过单播及组播方式收到组播流量。往第一跳发注册停止!
--------------------------------------------------------------------
配置:
int f0/0
ip pim sparse-mode
int f0/1
ip pim sparse-mode
稀疏模式一定要有RP的存在,否则无法转发组播流量;
---静态配置RP:
int loop0
ip pim spare-mode
exit
ip pim rp-address 3.3.3.3 ---每天组播路由器上都要配;后面可以跟访问列表号,来
给特定组播当RP;
---动态RP配置:
R2:
ip pim send-rp-announce loopback 0 scope 10 access-group 1
------以自己的还回口来竞争RP;IP地址大的优先;
R3:
ip pim send-rp-discovery loopback 0 scope 10 --loopback 0 作为通告的源地址;
如果动态的和静态的都配了,则动态的优先;
===>思考:既然autoRP是通过候选者想组播地址224.0.1.39发送候选信息,再有发现者选出RP,向组播组
224.0.1.40发送,通告其它所有组播路由器的;也就是说,在发送候选请求时,224.0.1.39
这个组播是没有RP的,那它的流量是怎么转发的呢?
解决办法:
---ip pim autorp listener ---全局模式下;
---ip pim sparse-dense-mode ---cisco私有的,选出RP工作在密集模式,选出之后再工作在
稀疏模式;
show ip pim rp mapping ---查看RP信息;
发现者每60秒钟通告一次RP的信息,如果3分钟不通告,则认为失效;
公有的bsr:
---ip pim rp-candidate loop0 priority 10 ---优先级小的为rp;
---ip pim bsr-candidate loo0
--------------------------------------------------------------------------------------------
>二层的组播问题
--交换机对组播包的处理方法:默认情况下,交换机处理组播包的方法和处理广播包的方法相同,
向相同vlan和trunk口转发;这样使得许多没加组的主机也收到组播流量;
》解决方案:
---IGMP SNOOPING 交换机监听主机和路由器之间的成员关系查询及成员关系报告;
这时交换机会把相应的组播MAC地址,和有所连主机加组的接口关联起来;
---CGMP 路由器会将主机和组的关联信息通过CGMP报文通告给交换机;
配置:
ip igmp snooping ---开启igmp监听,默认是开启的;
ip igmp snooping vlan 10
--------------------------------------------------------------------------------------------
>组播的转发原理:
单播路由表是基于目标IP地址进行转发。而组播的转发是基于组播源的 当从多个接口收到同一个源发送的组播流量,
只有离源最近的接口的组播流量被转发,其它接口被丢弃;这叫RPF(反向路径转发);
show ip rpf 12.12.12.1 查看前往源12.12.12.1的RPF接口;
单播的相似功能---源反向路径检测:
if)#ip verify unicast reverse-patch
>RPF接口的选举:
1 管理距离 在不同的组播路由协议之间首先比较管理距离
2 最长的前缀
3 度量值(小)
4 IP地址(大)
--------------------------------------------------------------------------------------------