组播协议概述.docx
《组播协议概述.docx》由会员分享,可在线阅读,更多相关《组播协议概述.docx(19页珍藏版)》请在冰豆网上搜索。
组播协议概述
组播协议概述
1IGMPv2协议概述
1.1协议介绍
IGMP是一个运行在路由器/三层互换机(以下简称路由器)与直连的主机之间的协议,该协议被主机用来向直连的路由器报告主机所属的多点广播组的隶属关系。
该协议分为主机侧和路由器侧两部份(协议栈只提供了主机侧的源码),本模块注重于路由器侧的实现。
与ICMP一样,IGMP被封装在IP数据报内,IP的协议数为2。
而且,由于IGMP是在主机和直连路由器之间传输的,因此封装IGMP的IP报文的TTL被设定为1。
同时为了保证路由器能够及时处置该IGMP报文,在封装IGMP的IP报文中应加上“IPRouterAlertoption”,以下是IGMPv2的数据报格式信息。
1.2包格式
图一IGMP包格式
说明:
Type域:
0x11=隶属关系查询消息(MembershipQuery)
该类型包括两种消息:
GeneralQuery,路由器发往主机,查询网络上有多少多点广播组存在。
Group-SpecificQuery,路由器发往主机,查询特定的多点广播组是不是有成员
存在。
0x16=版本2隶属关系报告(Version2MembershipReport),主机发往路由器。
0x17=离开组(LeaveGroup),主机发往路由器。
0x12=版本1隶属关系报告(Version1MembershipReport),主机发往路由器,
本消息向后兼容。
其它未说明的消息类型应该被抛弃。
MaxResponseTime域:
MaxResponseTime域仅在“MembershipQuery”消息中有效,它以1/10秒为单位,
说明了主机在回应路由器的“MembershipQuery”消息前的延迟时刻。
在所有的其
它消息中,该域被消息发送者置为0,并被消息接收者忽略。
该域的设计有助于减少主机“MembershipReport”包的数量。
Checksum域:
整个IP净荷的checksum。
GroupAddress域:
在“MembershipQuery”消息中,若是发送的是“GeneralQuery”消息,那么该域被
置为0,若是发送的是“Group-SpecificQuery”,该域被置为需要查询的组播地址。
在“MembershipReport”或“LeaveGroup”消息中,该域被置为需要报告或或离开`的组播地址。
其它域:
注意,IGMP消息能够超出8字节的限制,专门是为以后的版本扩充考虑。
在查验IGMP包的合法性时,只要Type域是合法的,实现者必需忽略超出8字节之外的包的内容。
同时注意,IGMP校验和(checksum)老是以整个IP包净荷为计算内容的,而不单单是前8个字节。
1.3协议描述
运行组播软件的路由器通过IGMP协议得知在它所连接的各个物理网络上有哪些组播组有成员存在。
该组播路由器维持一个组播组隶属关系表,并为每一个组播组维持一个按时器。
一个“组播组隶属关系”意味着在该路由器的某个直连网络上,某个组播组至少存在一个成员(成员主机),因此该组播路由器保留的是“组播组隶属关系”的列表,而不是该组播组内所有成员的列表。
在路由器的每一个可运行IGMP协议的接口上,该路由器必需成为查询者(Querier)或非查询者(Non-Querier)。
在一个网络中,通常只有一个查询者(Querier)。
所有的组播路由器在初始启动的进程中是作为查询者的面目显现的,直到该路由器通过侦听查询消息(GeneralQuerymessage)得知有另一个具有更低IP地址的组播路由器出此刻同一个网络中,那么该路由器将自身(该路由器的对应接口)状态转换成非查询者。
当组播路由器成为非查询者后,若是在[OtherQuerierPresentInterval]时刻内,该组播路由器没有收到其它的具有更低IP地址的组播路由器发出的查询消息(GeneralQuerymessage),该组播路由重视新变成查询者(Querier)。
组播路由器在它是Querier的接口上每一个[QueryInterval]时刻按时发送GeneralQuerymessage,用来向主机查询组播组“隶属关系”。
为了加速组播路由器发觉“隶属关系”的速度,在路由器启动时,它应该发送[StartupQueryCount]个GeneralQuerymessage,这些消息的距离时刻为[StartupQueryInterval]。
GeneralQuerymessage的目的地址为(所有主机组播地址),IGMP包内的组播地址域被设置成0,同时,MaxResponseTime域被设置成[QueryResponseInterval]。
当一个主机收到一个GeneralQuerymessage,若是该主机属于某一个多点广播组,那么该主机设置一个延时按时器,该按时器的取值为(0,MaxResponseTime]中的任意值。
其中[MaxResponseTime]为主机收到的GeneralQuerymessage中的“MaxResponseTime”域的值(单位为1/10秒)。
若是主机中对应于该组的按时器已经在运行,那么当且仅当收到的包中的“MaxResponseTime”的值小于按时器剩下的时刻时,从头设置按时器为(0,MaxResponseTime]。
若是按时器超时,该主机向路由器发送Version2MembershipReport消息,置IPTTL为1。
若是在按时器运行进程中,该主机收到了其它主机的关于该组播组的MembershipReport消息,那么终止按时器,如此做是为了有效地降低重复包的发送。
当路由器收到MembershipReport消息,它将被报告的多点广播组加入到自身的多点广播组隶属关系表中,并为该组设置一个按时器([GroupMembershipInterval])。
有关该组的重复报告刷新该按时器,若是该按时器超时,那么路由器以为那个多点广播组已没有成员存在了,因此不需要转发发源于远端的目的地址为该组播地址的多点广播信息给该网段。
当一个主机加入一个多点广播组时,它应该立刻发送一个有关该组的主动的Version2MembershipReport消息,尽快地通知路由器该组的存在,以防它是有关该组的第一个成员。
为了避免那个初始消息的丢失,协议建议该消息应该被重复一到两次,以[UnsolicitedReportInterval]距离。
(一个实现的简单方式是主机发送一个初始的Version2MembershipReport消息,并继续依照接收到一个Group-SpecificQuery的动作执行)。
当一个主机离开一个多点广播组,若是该主机是该组中的最后一个成员,它应该发送一个LeaveGroupmessage,该消息的目标地址为()。
若是该主机不是该组中的最后一个主机,它能够什么都不用发送。
若是主机并非明白它是不是是某个组的最后一个成员,它能够老是发送一个LeaveGroupmessage。
当一个Querier路由器接收到LeaveGroupmessage,若是该路由器在接收接口上有关于该组的成员隶属关系记录存在,那么它发送[LastMemberQueryCount]个Group-SpecificQuery,以[LastMemberQueryInterval]时刻距离。
所发出的Group-SpecificQuery消息的MaxResponsetime被设置成[LastMemberQueryInterval]。
若是路由器在[LastMemberQueryCount]*[LastMemberQueryInterval]时刻内没有关于该组的MembershipReport消息收到,那么路由器假设在该接口上已经没有该组的成员存在了。
在以上的进程中,路由器本身从Querier到non-Querier的状态转变是被禁止的。
Non-Qureier路由器必需忽略LeaveGroupmessage,而且Querier路由器应该忽略LeaveGroupmessage,若是它在收到该消息的接口上没有该组的成员隶属关系记录。
当一个Non-Querier路由器收到一个Group-SpecificQuerymessage,若是该路由器的组按时器的值比该消息中的“MaxResponseTime”*[LastMemberQueryCount]的值还要大,那么该组按时器的值用以上的乘积取代。
以上论述的IGMPVersion2的协议操作进程,关于IGMPVersion1来讲,该版本不包括Version2MembershipReport消息,也没有LeaveGroupmessage。
在MembershipQuery消息中,IGMPv1将MaxResponseTime域设置为0,而且IGMPv1没有类似与IGMPv2那样的Querier选举机制。
下面给出各类消息的IP包的目标地址,做一个小结:
GeneralQuery→ALL-SYSTEMSQuery→Thegroupbeingqueried
MembershipReport→Thegroupbeingreported
LeaveMessage→ALL-ROUTERS
图二主机状态转换图
图三路由器Querier←→Non-Querier状态转换图
图四Non-Querier接口多点广播组状态转换图
图五Querier接口多点广播组状态转换图
2DVMRP协议概述
DVMRP为无连接的组播数据包传输提供了一种有效的机制。
DVMRP采纳RPM(ReversePathMulticasting)技术动态地生成IP组播传输树,它采纳距离-矢量路由算法(类似于RIP),通过该算法,构筑出面向(Source,group)的组播树。
DVMRP能够被归结为“广播—剪枝”组播路由协议。
它在路由互换的基础上成立基于源的组播树,然后通过“剪枝”动作动态地创建基于(Source,Group)的组播树。
当路由器接收到组播数据包时,第一要通过RPM技术查验该组播数据包的“来源”是不是正确,然后依照(Source ,Group)组播树所形成的组播路由记录将该组播数据包转发到该树的下游接口上。
Dvmrp协议的原理比较简单,该协议事实上分为两个大的步骤:
第一是源路由扩散进程。
所谓源路由,在Dvmrp中,指咱们通常所说的某一个网段的路由信息。
由于Dvmrp协议是一种“面向资源”的协议,因此,在其它路由协议中称为目的(网段)路由的路由记录,在Dvmrp中的称呼正好相反,这是因为Dvmrp将此网段看为一种资源,即组播业务的发源地。
在Dvmrp中某一个网段,如:
,称为源路由,是因为协议假设有任意组播数据包能够从该网段发出,即组播数据包源地址=,组播数据包目的地址=某一组播地址,因此该网段在Dvmrp中称为源路由信息。
这种源路由信息在Dvmrp自治系统中扩散,最大为31跳(32跳为无穷大),使得协议的第一步,自治系统中所有的路由器关于源路由同步,大体实现。
这一进程与RIP的进程大体相似。
协议的第二步,是在每一个路由器上依照每一个源路由信息构筑面向此源路由的组播树,并由此组播树形成最终的用来转发组播数据包的(Source,Group)路由记录。
通过协议第一步的源路由扩散操作,路由器对每一条源路由信息,形成两条路由记录:
一条是面向此源路由的一般路由记录(既通常所说的目的路由),另一条是从此源路由发源,目的地址为所有组播地址()的(Source,Group)组播路由记录,该记录用来转发从此源地址网段发来的所有组播包。
以上的路由信息是源路由扩散后快速形成的。
由于上面的(Source,Group)路由记录的作用,从Source发来的组播数据包会被转发到(Source,Group)路由记录所指向的下游邻居路由器(下面介绍),下游邻居路由器收到该组播数据包后,也会依照自己的(Source,Group)组播路由记录转发此组播数据包,若是此下游邻居的(Source,Group)路由记录所指向的下游邻居路由器为空,那么表示没有更下游的路由器希望接收由Source发来的,目的地址为Group的组播数据包。
因此,此下游路由器将依照Source,向它的上游路由器(即最先提到的那个路由器),发送剪枝消息,表示自己再也不想接收由Source发来的,地址为Group的组播数据包。
若是上游路由器的所有下游邻居都已经发来的关于(Source,Group)的剪枝信息,同时在上游路由器的直连端口上通过IGMP协议没有查询到有关于Group的组播成员存在,那么此上游路由器进一步发送剪枝消息给更上游的路由器。
若是下游路由器的(Source,Group)路由记录所指向的下游邻居不为空,或下游路由器的直连端口上通过IGMP协议查询到有关于Group的组播成员存在,那么,此下游路由器能够向上游路由器发送嫁接消息,终止以前发送的剪枝消息,表示本下游路由器情愿接收从Source发来的,目的地址为Group的组播数据包。
从上面的论述中能够看出,每一条源路由记录能够形成多个组播树,每一个树的Source相同(或是Source网段内的某一台主机),而Group不同。
这些针对同一个Source的不同的组播树,最终会反映到路由转发表中,形成不同的(Source,Group)路由转发记录。
2.1邻居发觉
在具有组播能力的网络接口或“Tunnel”伪接口上,通过收发邻居“探测”消息,DVMRP路由器间动态地发觉邻居。
该消息的目标地址为“All-DVMRP-Routers”组播地址,IPTTL的值被置为1。
路由器在某一个接口上发出的DVMRP“探测”消息包中,包括了在该接口上的所有邻居路由器的地址列表,这些邻居路由器的地址是通过交互“探测”消息而被该接口搜集到的。
一旦路由器接收到的邻居“探测”包中包括了本路由器的地址,那么本路由器与发送该“探测”包的邻居路由器成立了“two-way”关系。
2.2源定位
当一个组播数据包抵达一个运行DVMRP协议的路由器上时,该路由器第一到路由转发表中搜索该组播数据包是不是是从本路由器的“上游接口”抵达的。
所谓“上游接口”,是从相反的方向去考虑,指本路由器抵达此组播数据包源地址(网段)的最优本机接口。
若是该组播数据包是从该源地址(网段)的“上游接口”抵达路由器的,那么能够依照(Source,Group)树被转发到本路由器针对该源地址的“下游接口”;不然,该组播数据包抵达路由器的途径不正确,因此被抛弃。
关于同一个源地址(源网段),为了确保所有的DVMRP路由器有相同的途径视图,DVMRP协议通过广播路由表来完成路由器间的路由同步工作。
每一个路由器广播它所直连的网段/掩码,同时转发从其它邻居路由器处得来的路由。
在所有物理的和“Tunnel”的接口上,DVMRP都需要配置Metric。
当路由器接收到邻居传来的路由信息时,需要将接收接口上的Metric值加到接收的路由信息的Metric上。
那个调整过的路由Metric变量是本路由器用来做路由计算/选择用的。
注意,Dvmrp协议的路由扩散是指源路由的扩散。
2.3下游路由器
通过路由器间源路由信息的交互,除在路由器间形成统一的源路由视图外,另一个重要的用途是针对某一个特定的源路由网段,使上游路由器确信依托它的下游路由器。
DVMRP通过毒性逆转的方式确信某一路由器的下游路由器(针对特定源路由网段)。
关于下游路由器来讲,若是下游路由器以为关于某一源路由网段,它的“下一跳”路由器存在,那么该下游路由器以为“下一跳”路由器即为针对该源路由网段的上游路由器,它通过向上游路由器发送Metric值为“无穷大”到2*“无穷大”的路由信息来指明它是上游路由器的下游路由器(即关于那个源路由网段,上游路由器有此下游路由器存在,能够接收此源路由网段发出的组播数据包)。
通过上述的“毒性逆转”方式,针对某一个源路由网段,上游路由器构筑了它的下游路由器的列表关系,为进一步转发组播数据包奠定了基础。
2.4指定转发者
当两个或更多的组播路由器被连接到同一个组播网络时,在该网络上可能会有重复的组播数据包发送(因为每一个组播路由器都向该网络转发组播数据包)。
因此,需要在该组播网络上选举出一个指定转发者(DesignatedForward)。
在一个组播网络上,当两个路由器互换路由信息时,每一个路由器得知另一个路由器抵达某个源路由网段的Metric值,因此,关于该源路由网段,具有较低Metric值的路由器成为指定转发者。
若是关于某一个源路由网段,有两个以上的路由器有相同的最低Metric值,那么具有最低IP地址的那个路由器成为指定转发者。
2.5创建组播树
正如前面所提到的,当一个组播数据包抵达路由器上,路由器通过RPM来查验组播数据包入口的正确性。
通过查验的数据包被转发到对应的组播树的下游接口上。
2.6加入局部组成员
在组播网络上,IGMP协议保护着路由器接口上所具有的组播成员隶属关系列表。
若是在路由器的某个接口上,该路由器是指定源路由网段的DF而且在该接口上有关于某个组播地址的成员存在(IGMP数据库中有对应的隶属关系记录),那么该接口应该被加入到(Source,Group)对应组播树的下游接口中去。
2.7加入邻居接口
在初始情形下,关于某一个源地址,所有有下游依托关系的接口应该被加入到该源地址的组播树中。
然后,下游路由器通过向上游的路由器发送“剪枝”和“嫁接”消息,能够动态地加入/删除上游路由器的下游接口。
2.8剪枝组播树
综合上面的论述,在路由器中,针对不同的源路由网段和目的组播地址,会有不同的(Source,Group)组播树存在,该组播树的实质是拥有一个对应的下游接口列表。
当下游的路由器检测到关于某个组播目的地址,本地已经没有下游依托接口存在的情形,该下游路由器能够通过向上游路由器发送剪枝消息来将自己从上游路由器对应的(Source,Group)组播树的下游依托接口列表中去掉。
若是上游路由器的某个(Source,Group)组播树的所有下游依托接口全数被剪枝,那么该上游路由器继续向它的上游路由器发送剪枝消息。
剪枝消息一样情形下包括了生命期参数,当剪枝消息的生命期抵达后,该剪枝消息被清除,除非有新的剪枝消息来“刷新”旧的剪枝消息。
2.9嫁接组播树
一旦路由器的某个(Source,Group)的某个下游依托接口被剪枝,那么相应的组播数据包可不能被转发到该接口上。
但是,由于组播成员是动态地加入/离开某一个组播组的,因此,当被剪枝的下游依托接口下从头有该组播组的成员加入时,下游路由器需要向上游路由器发送嫁接消息,嫁接消息采纳确认方式,确保上游路由器能够收到。
收到嫁接消息的上游路由器将被删除的下游依托接口从头加入到(Source,Group)下游依托接口表中,使得组播数据包能够从头向该下游依托接口转发。
2.10协议消息格式
DVMRP采纳与IGMP相同的消息格式,IP的协议号为2。
IGMP包类型为0x13。
格式如下:
Code字段概念了DVMRP所具有的包类型:
Code
PacketType
Description
1
DVMRPProbe
Forneighbordiscovery
2
DVMRPReport
Forrouteexchange
7
DVMRPPrune
Forprunningmulticastdeliverytrees
8
DVMRPGraft
Forgraftingmulticastdeliverytrees
9
DVMRPGraftAck
Foracknowledginggraftmessages
3PIM-SM协议概述
PIM依托于低层的拓扑信息搜集协议(单播路由协议)来形成一个路由表,那个路由表叫做MRIB(MulticastRoutingInformationBase)。
MRIB中的路由记录能够直接从单播路由协议所形成的路由转发表中取得,或从象MBGP如此的路由协议中取得。
MRIB中的路由记录代表了抵达某一个子网的反向途径信息(RPF)。
在PIM协议中,PIM的操纵消息,如:
加入消息(Join)、剪枝消息(Prune)等通过查询MRIB中的路由记录,取得达到某一组播源网络或RP的途径信息;而从组播源网络发出的组播数据包是沿着PIM操纵消息(如Join消息)的相反方向被转发给最终用户的。
象所有的实现了RFC1112业务模型的组播路由协议一样,PIM-SM必需在“不优先”明白组播源或组播接收者的情形下将组播数据包从源路由到接收者。
在PIM-SM协议中,要紧分为三个时期来实现,这三个时期能够是并行发生的。
3.1PhaseOne:
RPTree
在PhaseOne,一个组播接收者表示它有爱好接收某一个组播组G的数据包,通常情形下,该接收者通过IGMP协议来通知路由器它的接收愿望的。
该接收者所直接相连的局域网内,若是有多于一台路由器存在,那么需要选举一台DR路由器(DesignatedRouter),当DR路由器发觉到它所连接的局域网内有关于某一个组播组G的接收者存在时,该DR面向RP发送Join消息,那个消息被称为(*,G)消息,因为它接收所有组播源发出的目标地址为G的组播数据包(固然集合点是RP)。
那个(*,G)加入消息面向RP,一跳一跳地通过中间的多个路由器,在它通过的每一个路由器中,关于组播组G的组播树状态被创建/更新。
最终,那个(*,G)加入消息或抵达RP,或抵达了一个有(*,G)状态的路由器。
当有许多接收者希望接收组播组G的信息时,会有许多有关(*,G)的加入消息汇聚到RP,并最终形成一个以RP为根节点的有关G的散布树,这棵树叫做RPTree(RPT)。
该树是一棵共享树,因为所有的关于组G的组播数据源都利用这棵树来向接收者发送组播信息。
只要接收者希望继续接收组G的信息,加入消息(Join)应该被周期性地重复发送的。
当接收者不希望继续接收组G的信息时,DR应该面向RP发送剪枝(Prune)消息。
但是,若是DR由于某种缘故没有发送剪枝消息,那么RPTree中的关于该接收者的加入状态也会由于TimeOut而被终止。
当一个组播源向外发送组播数据包时,它的局域网DR路由器接收到那个组播数据包,并以单播IP包的形式封装该组播数据包,将它发送给对应的RP。
RP接收到该封装数据包,解封装,并沿着上面形成的(*,G)共享树发送出去,在该(*,G)共享树的每一个节点,若是该节点有分支,那么该组播数据包被复制,并最终传送到接收者。
组播源的DR封装组播数据包的进程叫做Register,被封装的组播数据包叫做PIMRegisterPacket。
在PhaseOne进程稳固状态下,组播数据包被封装传输到RP,被RP解封装后,沿着(*,G)共享树发送给最终接收者。
3.2PhaseTwo:
RegisterStop
有两个缘故致使组播数据包的Register-encapsulation操作效率不高:
关于一个路由器来讲,封装和解封装操作可能是相对“昂贵”的,这要紧取决与该路由器是不是有相应的硬件支持此种操作。
Register被单播发送到RP,再由RP依照(*,G)共享树被发送到