欲了解关于The Cable Guy的所有专栏的列表和更多信息,请单击此处。
除了单播和广播支持,IP(第4版)还提供一种发送和接收IP多播流量的机制。IP多播流量发送到单个目标IP地址,但是由多个IP主机接收和处理,而不管这些主机在IP互联网络上所处的位置。一个主机侦听一个特定的IP多播地址,并接收发送到该IP地址的所有数据包。
对于一对多的数据传输,IP多播要比IP单播和广播更为高效。与单播不同,多播仅发送数据的一个副本。与广播不同,多播流量仅由正在侦听它的计算机进行接收和处理。
IP多播的附加元素如下:
• | 侦听特定IP多播地址的那一组主机称为一个主机组。 |
• | 主机组的成员关系是动态的,主机可以在任何时候加入或离开该组。 |
• | 主机组的成员数量没有限制。 |
• | 主机组可以跨越多个网段。这种配置需要IP路由器上的IP多播支持,并要求主机能够将它们对接收多播流量的意愿注册到该路由器。主机注册是使用“Internet组管理协议(Internet Group Management Protocol,IGMP)”来完成的。 |
• | 主机可以向不属于对应的主机组的某个IP多播地址发送流量。 |
欲了解关于The Cable Guy的所有专栏的列表和更多信息,请单击此处。
除了单播和广播支持,IP(第4版)还提供一种发送和接收IP多播流量的机制。IP多播流量发送到单个目标IP地址,但是由多个IP主机接收和处理,而不管这些主机在IP互联网络上所处的位置。一个主机侦听一个特定的IP多播地址,并接收发送到该IP地址的所有数据包。
对于一对多的数据传输,IP多播要比IP单播和广播更为高效。与单播不同,多播仅发送数据的一个副本。与广播不同,多播流量仅由正在侦听它的计算机进行接收和处理。
IP多播的附加元素如下:
• | 侦听特定IP多播地址的那一组主机称为一个主机组。 |
• | 主机组的成员关系是动态的,主机可以在任何时候加入或离开该组。 |
• | 主机组的成员数量没有限制。 |
• | 主机组可以跨越多个网段。这种配置需要IP路由器上的IP多播支持,并要求主机能够将它们对接收多播流量的意愿注册到该路由器。主机注册是使用“Internet组管理协议(Internet Group Management Protocol,IGMP)”来完成的。 |
• | 主机可以向不属于对应的主机组的某个IP多播地址发送流量。 |
IP多播地址(也称为组地址)在224.0.0.0到239.255.255.255的D类地址范围内,这是通过将前四个高序位设置为1110来定义的。在网络前缀或无类别域间路由(Classless Inter-Domain Routing,CIDR)表示法中,IP多播地址缩写为224.0.0.0/4。 从224.0.0.0到224.0.0.255 (224.0.0.0/24)范围的多播地址保留用于本地子网,而IP报头中的生存时间(Time to Live,TTL)可忽略,它们都不会被IP路由器转发。下面是保留IP多播地址的一些例子:
• | 224.0.0.1 - 该子网上的所有主机。 |
• | 224.0.0.2 - 该子网上的所有路由器。 |
• | 224.0.0.5 - 开放最短路径优先(Open Shortest Path First,OSPF)算法第2版,设计用于到达某个网络上的所有OSPF路由器。 |
• | 224.0.0.6 - 开放最短路径优先算法第2版,设计用于到达某个网络上的所有OSPF指定的路由器。 |
• | 224.0.0.9 - 路由信息协议(Routing Information Protocol,RIP)第2版。 |
• | 224.0.1.1 - 网络时间协议(Network Time Protocol)。 |
为了支持IP多播,Internet权威机构把01-00-5E-00-00-00到01-00-5E-7F-FF-FF范围的多播地址保留用于以太网和光纤分布式数据接口(Fiber Distributed Data Interface,FDDI)媒体访问控制(MAC)地址。为了将一个IP多播地址映射到一个MAC层多播地址,IP多播地址的23个低序位被直接映射到MAC层多播地址23个低序位。根据D类地址约定,IP多播地址的前4位是固定的,IP多播地址中有5位没有映射到MAC层多播地址。 因此,某个主机可以接收不是它所属的组的MAC层多播数据包。 然而,一旦确定了目标IP地址,这些数据包就会被IP丢弃。
例如,多播地址224.192.16.1将变成01-00-5E-40-10-01。为了使用那23个低序位,第一个八位组将不会被使用,第二个八位组中仅有最后7位被使用。第三个和第四个八位组将直接转换为十六进制数字。对于第二个八位组,192的二进制表示11000000。如果丢弃高序位,它将变成1000000或64(十进制)或0x40(十六进制)。对于下一个八位组,16的十六进制表示0x10。对于最后一个八位组,1的十六进制表示0x01。因此,对应于224.192.16.1的MAC地址将变成01-00-5E-40-10-01。
令牌环网使用同样的方法进行MAC层多播寻址。然而,许多令牌环网络适配器并不支持它。因此在默认情况下,功能地址0xC0-00-00-04-00-00将用于通过令牌环网发送的所有IP多播流量。 有关令牌环网对IP多播的支持的更多信息,请参见RFC 1469。
在支持IP多播的intranet(企业内联网)中,任何主机都能够向任何组地址发送IP多播流量,并且任何主机都能够接收来自任何组地址的IP多播流量,而它们的位置可忽略。为了促进这个功能,intranet的主机和路由器都必须支持IP多播。
主机的IP多播支持
为了使主机能够发送IP多播包,它必须:
• | 确定要使用的IP多播地址。 该IP多播地址可由应用程序硬编码,或者通过一种分配唯一多播地址的机制来获得。 |
• | 将IP多播数据包放到媒体上。 发送主机必须构造一个包含预期目标IP多播地址的IP数据包,并将它放到媒介上。对于诸如以太网、FDDI和令牌环网这样的共享访问技术,目标MAC地址是根据先前描述的IP多播地址来创建的。 |
为了使主机能够接收IP多播数据包,其必须:
• | 通知IP接收多播流量。 为了确定要使用的IP多播地址,应用程序必须首先确定是创建一个新的主机组,还是使用某个现有的主机组。为了加入某个现有的组,应用程序可以使用硬编码的多播地址,或使用从某个统一资源定位符(URL)派生而来的地址。 在确定组地址之后,应用程序必须通知IP在某个指定的目标IP多播地址接收多播流量。例如,应用程序可以使用Windows Socket(Windows套接字)函数来通知IP关于所加入的多播组的情况。如果多个应用程序使用相同的IP地址,那么IP必须向每个应用程序传递多播数据包的一个副本。当应用程序加入或离开某个主机组时,IP必须跟踪哪个应用程序在使用哪个多播地址。此外,对于多宿主主机,IP必须跟踪每个子网的主机组的应用程序成员关系。 |
• | 将多播MAC地址注册到网络适配器。 如果所使用的网络技术支持基于硬件的多播,那么网络适配器会被告知将数据包传递给特定的多播地址。对于诸如以太网、FDDI和令牌环网这样的共享访问技术,Windows 2000 NdisRequest函数可用于通知网络适配器响应对应于某个IP多播地址的多播MAC地址。 |
• | 通知本地路由器。 主机必须通知本地子网路由器关于它正在侦听某个特定组地址的多播流量的情况。注册主机组信息的协议是“Internet组管理协议”。目前使用的IGMP有两个版本:IGMP第1版(IGMP v1)和IGMP第2版(IGMP v2)。Windows 2000和Windows XP TCP/IP支持IGMP v2。主机通过发送“IGMP主机成员关系报告”消息,在某个特定的主机组中注册成员关系。 |
路由器的IP多播支持
为了仅向那些存在组成员的子网转发IP包,IP多播路由器必须能够:
• | 接收所有IP多播流量。 |
• | 转发IP多播流量。 |
• | 接收和处理“IGMP主机成员关系报告”消息。 |
• | 查询连接的子网以了解主机成员关系状态。 |
• | 将组成员关系传达给其他IP多播路由器。 |
接收所有IP多播流量
对于共享访问技术,比如以太网和FDDI,通常的网络适配器侦听模式是单播侦听模式。侦听模式是网络适配器分析传入帧的目标MAC地址,以决定是否进一步处理它们的方式。在单播侦听模式下,唯一被认为需要进一步处理的帧在网络适配上的一个感兴趣的目标MAC地址表中。通常,唯一感兴趣的地址是适配器的广播地址(0xFF-FF-FF-FF-FF-FF)和单播地址,也称为MAC地址。
然而,为了使IP多播路由器能够接收所有IP多播流量,它必须将网络适配器置于一种称为混杂模式(promiscuous mode)的特殊侦听模式。多播混杂模式分析电子和电气工程师协会(IEEE)定义的Individual/Group(单独的/组,I/G)位,以确定该帧是否需要进一步的处理。以太网和FDDI地址的I/G位是目标MAC地址的第一个字节的最后一位。
I/G位的值如下:
• | 如果设置为0,那么该地址为单播(或单独的)地址。 |
• | 如果设置为1,那么该地址为多播(或组)地址。广播地址也会设置多播位。 |
当把网络适配器置于多播混杂侦听模式时,多播位设置为1的所有帧都会上传以作进一步的处理。
多播混杂模式不同于混杂模式。在混杂模式下,所有帧(不管目标MAC地址如何)都会上传以作进一步的处理。混杂模式由协议分析器(也称为网络探测器)应用,比如作为Microsoft Systems Management Server组成部分的完整版本的Microsoft Network Monitor(Microsoft网络监视器)。主机的网络适配器通常不会置于多播混杂模式。
转发IP多播流量
转发IP多播数据包的能力是TCP/IP协议的一个功能,Windows 2000所采用的TCP/IP包括了这个功能。当启用多播转发(通过“路由和远程访问”服务)时,非本地子网IP多播数据包将接受分析以确定该数据包是通过哪个接口转发的。分析是通过将源地址和目标组地址与IP多播转发表中的条目作比较来完成的。当接收到一个非本地IP多播数据包时,IP报头中的生存时间(TTL)将减去1。如果TTL在减去1之后仍大于0,则检查多播转发表。如果在多播转发表中找到一个与目标IP多播地址匹配的条目,该IP多播包将使用新的TTL通过适当的接口转发。
多播转发过程不区分本地连接的子网上正在接收多播流量的主机,或者跨越该子网上另一个路由器的本地连接的子网下游网段上的主机。换句话说,多播路由器可以转发其上没有主机在侦听的子网上的多播数据包。这样的多播数据包被转发是因为,该子网上的另一个路由器指出了在它的方向上有一个主机正在接收多播流量。
多播转发表没有记录每个主机组成员或主机组成员的数量;这只是因为一个特定的主地址至少有一个主机组成员。
接收和处理“IGMP主机成员关系报告”消息
多播路由器从所有本地连接的子网上的所有主机接收“IGMP主机成员关系报告”消息。这个信息用于跟踪主机组成员关系,也就是在多播转发表中放入条目。由于所有多播路由器都在以多播混杂模式侦听,它们将接收发送到任何组地址的“IGMP主机成员关系报告”消息。
为了改进离开延迟(某个子网上的最后一台主机离开该组和再没有多播流量被转发到该子网间的时间),可能是某个子网上的某个组的最后一个成员的主机将发送一条“IGMP离开组”消息。在通过“IGMP离开组”消息向该组发送特定于多播地址的IGMP查询之后,路由器就能够确定该子网上不再有组成员。
查询连接的子网以了解主机成员关系状态
在某个特定的子网上,可能存在IGMP v1和IGMP v2主机的混合。当IGMP v1主机停止接收某个特定组地址的IP多播流量(即这个主机离开该组)时,它不会发送“IGMP离开组”消息来通知本地路由器。结果,这个主机可能离开该组;如果它是这个子网的最后一个成员,那么本地路由器将继续向该子网转发这个组的多播流量。
为弥补IGMP v1主机报告功能的缺乏并避免可能丢失“IGMP主机成员关系报告和离开组”消息,多播路由器定期地向本地子网发送“IGMP主机成员关系”查询,以获得主机成员关系信息。仍然是某个多播组成员的主机将使用一条“IGMP主机成员关系报告”消息来响应该查询。为了防止某个特定子网上的多个主机发送相同组的“IGMP主机成员关系报告”消息,主机使用一个随机响应定时器来推迟“IGMP主机成员关系报告”消息的传输。如果这条消息是该子网上的另一个主机在响应定时器过期之前发送的,则不会发送消息。
对于Windows 2000 Server“路由和远程访问服务”,接收和处理“IGMP主机成员关系报告”消息以及查询连接的子网以获得主机成员关系状态的能力,是通过添加路由协议组件并在一个接口上启用IGMP路由器模式来提供的。
将组成员关系传达给其他IP多播路由器
为了创建支持多播的包含多个路由器的IP互联网络,多播路由器必须相互传达组成员关系信息,以便组成员能够接收IP多播流量,而可以忽略它们在该IP互联网络上的位置。
多播路由器使用某种多播路由协议交换主机成员关系信息,比如距离矢量多播路由协议(Distance Vector Multicast Routing Protocol,DVMRP)、多播开放最短路径优先(MOSPF)或者协议无关多播(PIM)。组成员关系信息要么显性地传递,即交换组地址和子网信息;要么隐性地传递,即通知上游路由器关于多播流量来源的下游是否存在组成员的情况。
多播路由协议的目标包括如下:
• | 从源转发出流量以防止循环。 |
• | 最小化或消除发送到不需要该流量的子网的多播流量。 |
• | 最小化路由器上的CPU和内存负载以实现可伸缩性。 |
• | 最小化路由协议的开销。 |
• | 最小化加入延时,即某个子网上的第一个主机成员开始接收组流量所花的时间。 |
多播路由要比单播路由更加复杂。对于单播路由,单播流量被转发到一个全局唯一的目的地。单播路线总结了全局唯一目的地的范围。网络中的单播路线是相当稳定的,仅在IP互联网络的拓扑结构发生变化时才需要更新。
对于多播路由,多播流量被转发到某个不明确的组目的地。组地址表示单独的组,并且一般不能在多播转发表中总结出来。组成员的位置是不稳定的,每当一个主机成员加入或离开某个主机组,多播路由器的多播转发表就可能需要更新。
正如单播路由协议更新单播IP路由表一样,多播路由协议将更新IP多播转发表。 Windows 2000 Server“路由和远程访问”服务没有包括任何多播路由协议,尽管它提供了一个可以运行第三方协议的平台。 Windows 2000 Server所提供的能够更新多播转发表中的条目的唯一组件是IGMP路由协议组件。