1、为什么要用组播,1:单播代替组播每人发一份资源消耗大, 2:广播代替组播 增加不用收到的主机的负担同时也不能跨越多跳,支持组播三个条件,1:标识多播组的地址集 (1): 224.0.0.0-224.255.255.255 28个bit可变=2*28=268000000 (2): 保留:224.0.0.0-224.0.0.255 224.0.0.1本子网内的全部系统 224.0.0.13PIM路由器 224.0.0.2本子网内的全部路由器 224.0.0.15CBT路由器 224.0.0.4DVMRP路由器 224.0.1.39Cisco RP通告 224.0.1.40Cisco RP发现(3)
2、:二层MAC为0100:5e00.0000 第8bit为1说明它为多播地址 二层MAC的前25位+三层地址的后面23位 2*5=32有32个多播 共用一个MAC 好处:源发送一份数据帧所有的成员都能收到、晓得IP就晓得MAC就不要ARP了 坏处:会有冲突 IETF解释:发生冲突的几率很少 是完全可以接受的,支持组播三个条件,2:主机加入和离开组的机制 IGMP 在IP包中协议号为2 (1):加入和离开多播组: 源不知道成员有哪些、什么时候加入什么时候离开。和收听节目一样。所以该路由器应该查询有没有组成员、谁加入了。 (2):加入等待时间:上面的坏处是要路由器发了查询了就才能加入。所以提出了一种
3、新的方法:主机可以请求加入路由器收到后就发送组播流量。 (3):离开等待时间:一旦收到一个离开消息,路由器就马上发一个查询消息如果没有成员了,我就不用再向这个网络发组播流量了。 (4):维护组:主机发送加入请求时,如果有多台路由器怎么办了是不是都发给他们、主机收到查询时是不是每一个都发出响应了 解决办法:选一个查询路由器出来-IP地址最小的、是抢占的 如果120s 没有收到就会接替 主机响应查询时每个人启用一个随机的定时器,就只要一个人响应,支持组播三个条件,IGMPv2:主机功能: (1):Membership report表明主机希望加入哪一个组、发两条重复的,间隔时间为10s 、作为路由
4、器查询消息的一个响应。 (2):Vertion 1 Membership report为了向后兼容 (3):Leave Group 发送组224.0.0.2所有路由器才能收得到 路由器周期性的发送查询 这个包里面有一个最大响应时间为10s(0-25.5) 主机收到后就设置一个定时器(0-最在响应时间内的一个值)到时就响应查询。 这个响应其它的主机也能收到,因为定时器还没有到所以他们就不发了 主机加入命令:ip igmp join-group 228.13.20.216 IGMPv2:路由器功能 (1):general query(常规组查询) 是否有成员、什么时候没有成员 60s发一次 ip
5、igmp query-interval 0-65535 地址为224.0.0.1 180没有收到回应就认为没有成员了 (2):group-specific query(特定组查询) 收到离组消息后发的,地址为组播地址 也会发两条 间隔为1s钟 但是思科只发送一条。 查询路由器选IP地址最小的 查看:sh ip igmp int f0/0,支持组播三个条件,IGMPv1:没有离开组消息、没有特定组查询消息、没有最大响应时间、可能存在在多台查询路由器。 IGMPv3:在发展之中,只是加了一个特定组和源的查询。,支持组播三个条件,三:有一种路由协议,把组播传给组成员 单播路由协议:路由发现和包转发、
6、不关心数据包的来源。 多播路由协议:从单个源出来,去多个目的。数据到达一个入节口,拷贝给多个出节口。如果有环路-所以感知数据的来源而且要远离源:如果一台路由器在不是上行接口收到一个包就丢掉 所以要路由协议来确定上行接口、下行接口。 PIM V1放在IP包中、协议号为2、224.0.0.2 V2 协议号为103 224.0.0.13 PIM-DM (1):hello用于发现邻居、间隔30s 死亡30*3.5=105s (2):join/prune收到下游的prune后我会启动一个210s的定时器到期后又会发组播流量 (3):graft我发了以后会等3s 如果3s后没有收到graft-ack我就重
7、新发 (4):graft-ack (5):assert 这个时候D会收到两个组播包,B的还有C的、 选谁的了,1:AD 2:COST 3:IP地址最大的 B C会相互之间发送assert 来选择一个转发路由器,PIM-SM,PIM-SM 1:hello 2:bootstrap 3:candidate-rp-advertisement 4:join/prune 5:assert 6:register 源的下一跳路由器向rp注册、以单播的方式、RP收到向其发送JION/PRUNE、形成SPT 后向其发register-stop 7:register-stop,RP的选举,(1):静态配置RP 在所
8、有的路由器上:ip pim rp-address 3.3.3.3 最好是用环回口:便于管理、不会失效。,RP的选举,(2):bootstrap引导协议来指定和宣告RP C-BSR候选引导路由器 C-RP候选聚合点 从C-BSR选出一个BSR 优先级(0-255) IP地址高 启动130s的引导定时器侦听BOOTSTRAP消息(宣告路由器的优先级和地址) 如果收到的优先级比自己高?是:重置自己的定时器继续侦听 低:宣称自己是BSR 每60s发一个消息 130到了没有收到也认为自己是BSR bootstrap =224.0.0.13 ttl=1 pim路由器收到后向所有的节口发送 C-RP向BSR
9、单播发送candidate-rp-advertisement 优先级低的+IP地址最大 配置:ip pim bsr-candidate lo0 ip pim rp-candidate lo0 它和auto-rp的不同是BSR是不选rp的,把信息发给人,RP的选举,(3):auto-RP-cisco私有 RP映射代理:直接指定的、侦听224.0.1.39 、决定了RP就发 rp-discovery 也是每隔60s 224.0.1.40 保持时间为3倍 C-RP:每隔60s把它发送到224.0.1.39 RP收到后选一个IP最大的为RP 配置:在所有的C-RP:ip pim send-rp-ann
10、ounce lo0 scope 5 好像也要加 在rp映射代理:ip pim send-rp-discovery lo0 scope 5 而且在环回口上还要 ip pim sparse-mode 注意:在有的时候、映射代理向224.0.1.40发送rp-discovery 但是其他的路由器要加入这个组、就要向rp加入连RP都没有选出来 所以就用sparse-dense-mode,IGMP,四:交换机处理组播:如果一台交换机有24个端口,只有一个端口加入了一个组,那么其它的22个端口也可以收到 解决办法: (1):手工配置交换式多播树 把相应的端口手动加上去、这种方法非动态、不可扩展。 (2):
11、GMRP (3):IGMP snooping ip igmp snooping (4):CGMP只有路由器上产生CGMP包,交换机读取、60s发一次 join:路由器发出,告诉路由器将一个成员加入到一个多播组中 leave:路由器发出 信息:GDA:组目的地址 USA:单播源地址,IGMP过程,路由器被激活 发一个GDA为0 USA为自己的MAC的jion包 让交换机知道哪个接口连了一台多播路由器 当主机希望加入时,发送一个IGMP成员关系报告消息,交换机把它的MAC加入到表中 路由器收到IGMP,发一个GDA为组MAC USA为主机MAC 交换机感知的多播组,把这个端口加入到多播组 这时发送多播帧时从相应的端口发送出去 要离开时,主机发送离开组消息路由器收到后,发送两条特定组查询,看有没有响应?有:发送一个GDA为组播MAC USA为离开组成员的MAC 告诉交换机删除它 无:GDA为组MAC地址 USA为0 离开包,