单播:只有一个源点网络和一个终点网络。源点网络和终点网络的关系是一对一的。数据报途径的每一个路由器都要将这个分组仅从一个接口转发出去。在单播通信中,路由器仅从它的一个接口转发收到的分组
多播:在多播通信中,有一个源点和一组终点,这是一对多的关系。在这种类型通信中,源地址是一个单播地址,而目的地址则是一个组地址,在这个组中包含了一个或多个目的网络,且在这些目的网络中至少含有一个有兴趣接收该多播数据报的组成员。在多播通信中,路由器可以通过它的多个接口转发收到的分组
多播应用**:访问分布式数据库、信息传播、传播新闻、电视会议、远程学习**
广播:在广播通信中,源点和终点的关系是一对所有,源点只有一个,但其他所有的主机都是终点
指派给多播的地址块是224.0.0.0/4,这个地址块有268435456个地址
本地网络控制地址块(Local Network Control Block):是由协议控制通信量来使用的。某些多播的或与多播相关的协议需要使用这些地址。目的地址落在这个范围内的IP分组必须将自己的TTL值置为1,不允许路由器转发这些分组,其地址块为224.0.0.1/24
网际互联控制地址块(Internetwork Control Block):由协议控制通信量使用的,但是以这些地址为目的地址的IP分组能够被路由器转发,因而可以在整个因特网内畅通无阻,其地址块为224.0.1.0/24
AD-HOC地址块:从224.0.2.0到244.0.255.255的地址块被IANA称为专用(AD-HOC)地址块。传统上,这个地址块被分配给那些不适于前面讨论两种地址块使用
流多播组地址块(Stream Multicast Group Block):为流媒体而分配的地址块,其地址块为224.1.0.0/16
SAP/SDP地址块:地址块224.2.0.0/16用于会话宣布协议(Session Announcement
Protocol)和会话目的协议(Session Directory Protocol)
SSM地址块:地址块232.0.0.0.0/8用于特定源多播(Source Specific Multicasting,SSM)
GLOP地址块:地址块233.0.0.0/8称为GLOP地址块。这个地址块定义了可以在一个自治系统(AS)内使用的全球分配的地址段
管理范围的地址块:地址块239.0.0.0/8称为**管理范围的地址块(AdministratIvely Scoped Block)**被用于因特网中的某个特定区域内。目的地址属于这个地址块的分组不应离开该区域
netstat实用程序
可以查找出某个接口支持的多播地址
-n:给出IP地址的版本号
-r:给出路由表
-a:给出所有的地址
有限的组
系统管理员可以利用AS号(x,y)并选择在233.x.y.0~233.x.y.255之间的一个还没有被其他组使用的地址
更大的组
如果这个组要扩展到一个AS管辖范围之外,这样的组需要从SSM地址块中选择一个地址,这个地址块中的地址不需要经过允许就可以使用。因为在特定源多播中,分组的路由选择要根据分组的组地址和源地址,而它俩的组合是唯一的。
支持多播的网络
绝大多数局域网都支持物理多播地址,以太网地址的长度是6个8位组。在IPv4地址中,多播地址块的组标识长度是28位,意味着IP级的每个多播地址会映射到同一个物理地址。
以太网 物理多播地址的范围是:01:00:5E:00:00:00 ~ 01:00:5E:7F:FF:FF
不支持多播的网络
绝大多数广域网都不支持物理多播地址。要通过这样的网络发送一个多播分组就需要使用称之为隧道的处理过程。在使用隧道时,多播分组被封装成单播分组并通过网络传送,而当它出现在隧道的另一端时在转换为一个多播分组
**网际组管理协议(Internet Group Management Protocol,IGMP)**负责收集和解释一个网络中的组成员信息
IGMP是个组管理协议。它帮助多播路由器创建和更新与每一个路由器接口有关的忠实成员(loyal member)的列表
IGMPv3有两种类型的报文:成员关系查询报文和成员关系报告报文。第一种类型有三种不同的格式:一般的格式、特定组的格式以及特定组和源的格式、
成员关系查询报文格式
成员关系查询报文是路由器为了找出网络中活跃的组成员而发送的报文
类型:8位字段,定义了报文的类型
最大响应码:8位字段,定义了在接收到这个查询后必须在多长时间内做出响应
检验和:16位字段,保存的是检验和
组地址:32位字段,在一般的查询报文中置0。而在发送特定组或特定组和源的查询报文时,这个字段设置为被查询的IP多播组地址
Resv:4位字段,目前未用
S:1位字段,仰制标志。当这个字段置1时表示此查询报文的接收者应当仰制正常的计时器更新
QRV:3位字段,称为询问者的健壮变量。用于监视网络的健壮性
QQIC:8位字段,称为询问者的查询间隔码。用于计算询问者的查询间隔时间(QQI)
源数量(N):16位字段,定义了依附在此查询上的32位单播源地址的数量。对于一般的查询和特定组的查询来说,这个字段的值是0,而对于特定组和源的查询来说,这个字段的值是非0
源地址:32位字段,列出了N个源地址
查询报文的三种格式
a.在一般的查询报文中,发起查询的路由器探询每个邻站,使之报告组成员关系的完整列表(对任何多播组都感兴趣)
b.在特定组的查询报文中,发起查询的路由器探询每个邻站,使之报告是否仍然对某个特定的多播组感兴趣。这个多播组的地址在查询的组地址字段中用x.y.z.t来指明
c.在特定组和源的查询报文中,发起查询的路由器探询每个邻站,使之报告是否仍然对来自N个源之一的且到特定多播组x.y.z.t的多播分组感兴趣,这些源的单播地址在分组中指明
成员关系报告报文的格式
类型:8位字段,值为0x22,定义了报文的类型
检验和:16为字段,保持的是对整个IGMP报文做的检验和
组记录数量(M):16位字段,定义了分组携带的组记录的数量
组记录:在这个分组中科院有0个或者多个可变长度的组记录。每个组记录包含了响应者在某个多播组中的成员关系信息
记录类型:目前一共有六种记录类型:当前状态记录(Current-State-Record)(Mode_Is_Include and Mode_Is_Exclude)、过滤模式改变记录(Filter-Mode-Change-Record)(Change_To_Include_Mode and Change_To_Exclude_Mode)、源列表改变记录(Source-List-Change-Record)(Allow_New_Sources and Block_Old_Sources)
辅助数据长度:8位字段,定义了每个组记录中包含的辅助数据的长度
源数量(N):16位字段,定义了依附在这个报告上的32位源多播地址的数量
源地址:32位字段,一共列出了N个源地址
辅助数据:包含的是任何需要被包含在这个报告报文中的辅助数据
套接字状态:一个进程和一个套接字关联,套接字希望从哪个多播组接收多播报文,该进程都有一个记录。这个记录有两个模式:include模式或exclude模式
接口状态:组管理要求将主机连接到网络的接口也要保存一个接口状态。合并源列表时需要遵守以下两个规则:
1、如果被合并的记录之中有某个记录具有exclude过滤模式,那么结果得到的接口记录也将具有exclude过滤模式,且源地址列表的生成方法如下:
a、对用exclude过滤的所有地址列表进行交集操作
b、把a 部分得出的结果与用include过滤的所有地址列表差集操作
2、如果被合并的所有记录都是include过滤模式,那么结果得到的接口记录也是include过滤模式,且新的源地址列表就是对所有地址列表的并集操作
注:当任何一个套接字记录发生变化时,接口状态就要采用上述规则进行修改
发送改变状态的报告:不管接口状态有任何变化,主机都需要立即用相应的组记录为多播组发送一个成员关系报告报文,根据旧的状态过滤器和新的状态过滤器的组合,可能产生四种不同的变化。
接收查询报告
计时器到期
报告抑制
查询者的状态:多播路由器需要维持与每一个网络接口关联的每一个多播组的状态信息
收到成员关系报告后采取的动作
收到的报告是对一般的的查询的响应(四种不同的情况)
收到对方报告是对其他查询的响应(八种不同的情况)
IGMP的作用只是通过收集各种信息来帮助连接网络的路由器,使之能够为来自特定源并且以某个多播组为终点的分组做出转发或不转发的决定。在前面两个版本的IGMP中,转发建议仅仅依据分组的多播目的地址,而在IGMPv3中,这个转发决定要依据目的地址和源地址。
最大响应时间:在响应一个查询而发送报告报文 之前所允许的最大时间
查询者的健壮性变量(QRV):IGMP监视网络中的分组的丢失情况(通过测量接收到的报告的时延),并调整QRV的值。这个变量的值指明了一个查询的响应报文应当被发送的多少次。
查询者的查询间隔:这是发送一般的查询之间的时间间隔,默认值是125。这个默认值可被管理员修改,以控制网络通信质量。
其他变量和计时器:RFC3376定义了其他几个变量和计时器
IGMP报文封装在IP数据报中,其协议字段的值设置为2,TTL字段置1。不过这个数据报的目的IP地址取决于这个报文的类型。
最佳域间路由选择过程最终的结果就是找出一个最短路径树(shortest path tree)。这个数的树根就是源点,而树叶是所有可能的终点。
在单播的情况下,当路由器收到一个分组要转发时,它需要找出到达这个分组终点的最短路径。路由器从路由表中找出到达这个特定终点的信息。
在单播路由选择的情况下,域中的每个路由器都有一张定义了到达可能终点的最短路径的路由表。
在多播路由选择下,每一个相关的路由器需要对每一个组构建一个最短路径树
每一个路由器需要对每一个组有一个最短路径树,对一个组的最短路径树定义了到每一个网络(在这个网络中有该组的忠实成员)的下一跳。
在使用源点基准树的方法,每个路由器需要对每个组都有一个最短路径树
在使用组共享树的是方法时,不是每个路由器都需要有m个最短路径树,而是只有一个称为中心核心路由器或汇集路由器的特定路由器负责多播通信量的传播。核心路由器在其路由表中有m个最短路径树。域中的其他路由器则一个都没有。
使用组共享树的方法,只有拥有每个组的最短路径树的核心路由器才能涉及到多播。
**多播链路状态路由选择时单播链路状态路由选择的直接扩展,使用的是源点基准树的方法。**当一个路由器收到所有这些LSP时,它就生成了n个(n是组的数目)拓扑,根据这些拓扑,使用Dijkstra算法就可以得出n个最短路径树。因此,每一个路由器的路由表显示出和组数一样多的最短路径树。
多播开放最短通路优先(Multicast Open Shortest Path
First,MOSPF)协议是OSPF协议的扩展,使用多播链路状态路由选择来创建源点基准树。这个协议需要一个新的链路状态更新分组,把主机的单播地址和组地址或主机负责的地址联系起来,这个分组就称为组成员关系LSA。此外,这个数可以保存在高速缓存中,以便以后有同样源点/组地址对的分组可以使用它。MOSPF是数据驱动(data-driven)的协议。
多播距离向量路由选择
多播路由选择不允许一个路由器吧自己的路由表发送给邻站。其思想是要使用单播距离向量路由表中的信息从零开始创建一个路由表。多播距离向量路由选择使用源点基准树,但路由器从来没有真正的构造一个路由表。当路由器收到一个多播分组时,它就转发这个分组,好像查找了路由表一样。多播距离向量算法要使用基于四种判决策略的处理过程。
一个路由器收到了一个分组,不管这个分组的目的地址,把它从所有的接口(除了这个分组的接口之外)转发出去。洪泛完成了多播的首要任务,即每一个具有活跃成员的网络都能收到这个分组。
洪泛对分组进行广播,但在系统中产生了环路
RPF是修正后的洪泛策略,为了防止环路,仅有一个副本被转发,其他所有副本都被丢弃。在使用RPF时,路由器仅转发从源点到这个路由器走的是最短路径的副本。
RPF消除了洪泛过程中的环路
**对每个网络只定义一个父路由器,必须做出这样的限制:一个网络只能从一个特定的父路由器那里接收来自特定源点的多播分组。**对每一个源点,路由器只能从这样的接口向外发送分组。RPB保证分组能够到达每一个网络,且每个网络值收到分组的一个副本。
RPB创建了从源点到达每一个终点的最短路径广播数。它保证每一个终点都收到且仅收到分组的一个副本。
多播分组必须只到达用有特定组的活跃成员的网络,要把广播转变为多播,协议使用了剪枝和嫁接这两个过程。
这个路由器为上游路由器发送剪枝报文(prune message)。使之剪枝相应的接口。
已经发送剪枝报文,突然通过IGMP发现它的某个网络又对该多播报文感兴趣,可以发送嫁接报文(graft message)。嫁接报文强迫上游路由器恢复发送多播报文
RPM给RPB增加了剪枝和嫁接,以产生可支持动态成员关系变化的多播最短路径树
DVMRP
距离向量多播路由选择协议(Distance Vector Multicast Routing Protocol,DVMRP)是距离向量路由选择的一个实现。它时一个基于RIP的源点基准路由选择协议
核心基干树(Core-Based Tree,CBT)协议是一个组共享协议,使用一个核心作为树的根。自治系统划分许多区,而每一个区选择一个核心(中心路由器或汇集路由器)
CBT的树是从树叶向下构造的,开始并没有树,而是使用加入(嫁接)的方法逐渐地构造出这个树
任何一个源点(属于或不属于这个组的)都可以向这个组的所有成员发送多播分组。它只是简单地用汇集路由器的单播地址把分组发送给该汇集路由器,然后汇集路由器再把这个分组分发给所有的组成员。
小结:
1、源点可以是也可以不是树的一部分,它把多播分组封装在一个单播分组中,利用核心路由器的单播目的地址,把这个分组发送给核心路由器。
2、核心路由器吧这个多播分组拆封,然后将其转发给所有“感兴趣”的接口
3、收到多播分组的每一个路由器接着再把它转发到所有“感兴趣”的接口
在使用CBT时,源点把多播分组(封装成单播分组)发送给核心路由器,核心路由器把这分组拆封,再转发给所有感兴趣的接口
协议无关多播(Protocol Independent Multicast,PIM)是给两个独立的多播路由选择协议:协议无关多播-密集方式(Dense Mode,PIM-DM)和协议无关多播-稀疏方式(Sparse Mode,PIM-SM)的统一名称。
PIM-DM用在密集多播情况下,是一种源点基准树路由选择协议,使用RPF和剪枝/嫁接策略来进行多播。但是它不依赖于底层的单播协议
PIM-SM用于稀疏多播环境下,是一种组共享树路由选择协议,有一个汇集点(RP)作为树的源点。操作与CBT相似,但使用了更加简单的过程。
利用隧道技术的概念用这些孤立的路由器构造出一个多播主干网(multicast backbone,MBONE)