1.4 三层组播是建立在TCP/IP协议栈中的
IP组播是建立在TCP/IP协议栈中的。也就是说,传输组播数据帧和数据包所需的协议是由Internet工程任务组(IETF)进行控制的。IETF成员通过RFC发布和管理相关协议,也就是说IP组播协议是开放标准。
注释
组播协议IETF标准适用于IPv4和IPv6组播技术;但和其他IP协议一样,这并不意味着所有厂商处理组播的方式都是相同的,同时也不意味着所有组播协议的实施都能够与标准完美兼容。
使用TCP/IP协议栈也意味着IP组播隶属于互联网数字分配机构(IANA)。IANA负责控制和协调公共地址空间中的IP地址,也包括分配组播地址。
1.4.1 这是个组
三层单播、广播和组播的对比和比较可以从组播传输的唯一性入手。广播和组播之间最主要的区别在于,组播接收方可以连接在任意网段或子网中,而子网的范围却决定了广播的边界,也称为广播域。因此路由器和交换机必须能够知道哪些网段或子网中连接着对(某个或某些)组播组感兴趣的组播主机。发送方和接收方通过组成员身份来管理这一过程。
在使用广播时,设备会在数据包中使用特定的目的 IP 地址,以便将这个广播数据包发送给所有接收方主机。路由器和交换机无须借助上层协议负载就能够识别出组播,因为子网指定了组播边界。下面我们把数据包头部的格式画出来,对比单播IPv4数据包、广播IPv4数据包和组播IPv4数据包的区别。图1-9展示了基本的单播IP数据包。
转发单播消息的工作很简单——沿着去往IP目的地的方向转发。广播的转发也很简单。广播数据包也是沿着去往目的地的方向转发,只不过需要把它复制多份,向所有本地以太网段(VLAN或子网)中的交换机端口进行转发。广播分为两类:所有主机广播和定向广播。所有主机广播是发给所有子网中的所有IP主机的数据包。定向广播是发给某个子网/超网或VLAN中所有IP主机的数据包。
注释
复制是指对数据包进行简单的拷贝,然后将其转发到网络中。只要单个数据包有多个接收方,就需要执行复制,比如广播或组播。复制也是所有网络设备(比如交换机或路由器)的基本功能。
如果组播中包含所有主机,那么本地交换机会根据收到这个数据包的逻辑网段,复制并向所有属于这个逻辑网段的接口发送这个广播数据包。
图 1-10 描绘了一个本地网段上的所有主机广播。路由器默认不会转发从属于某个子网的接口收到的所有主机广播,这样就把广播域与网络的其他部分隔离开来。
如果是定向广播的话,路由器会把它转发到目的子网,并且由那个子网中的交换机将其复制给所有主机,如图1-11所示。
同一个子网中组播和广播主机的区别比较有趣。如果子网中只有一部分主机需要接收数据包该怎么办?这些主机可以注册一个组地址,然后发送方向这个组地址发送消息,这样可以减轻发送数据包的负担,只向网段中的某些主机发送,减少了复制成本,并且只会占用主机所属LAN中的带宽。图1-12展示了这种情景。
广播和组播之间的主要区别在于,组播流的注册主机可以位于多个网段中。如何能够让路由器和交换机只把组播数据包复制给这些注册主机,而不会复制给一个网络中或Internet中所有网段上的所有主机?组播发送方使用特殊的目的IP地址传输IP数据包,这种目的IP地址称为组地址,这个IP地址对应着特殊的组播MAC地址。你可能已经注意到了,组播数据帧中的二层目的地址并不是本地子网中的地址。第2章将对组播MAC地址进行详细说明。
1.4.2 IPv4三层组播编址中定义的组
组地址(Group Address)代表一组对这条数据流感兴趣的节点。组地址与源IP地址结合在一起标识了组播流。接收方主机要向上游组成员网络设备表达它对这个组播流感兴趣的意愿。表达意愿的行为称为加入组。
IPv4和IPv6组地址的编址由几个IETF RFC进行控制。最重要并且当前使用的RFC是5771,这个文档记录了组播组地址空间的最终分配方案,以及空间中的每个组类型。组播组使用的地址空间来自于IPv4有类地址空间。表1-2中列出了有类路由编址的划分方案。
RFC 5771为组播组保留了D类地址空间,这个RFC文档代替或更新了几个RFC,其中包括RFC 988。RFC 988是1986年颁布的,它是最初将1110保留为IPv4组播组地址开头4比特的文档。RFC 988代替了RFC 966,后者是最初的IP组播理论RFC。RFC 988和RFC 966都是重要的组播历史文档,如果读者希望更深入地学习组播技术和术语,可以从这个两个文档入手,详细了解组播的理论。
1.4.3 IPv4组播组地址的分配
RFC 5771根据IANA对于组播组地址的分配和部署建议,进一步细化了D类地址的分配。表1-3中列出了分配方式。
接下来简要解释一下每个组播类别及其适用场合。
本地网络控制(224.0.0.0/24):本地控制地址块用于具体的协议控制流量。路由器接口会侦听但不会转发本地控制组播;比如OSPF“所有路由器”(224.0.0.5)。IANA负责控制这个地址块中的地址分配。在IANA网站(www.iana.org)中可以看到完整的本地网络控制地址列表。
注释
只有当节点上启用了控制组特性,路由器才会侦听本地控制数据包。比如路由器接口上只启用了RIPv2,那么这个接口就只会处理RIPv2的控制组数据包(组地址为224.0.0.9)。
互联网络控制(224.0.1.0/24):互联网络控制地址块用于路由器接口可能会转发到ASN(自治系统编号)或Internet中的协议控制流量。比如RFC 4330中定义的NTP(网络时间协议),组播地址为224.0.1.1,或者RFC 2730中定义的组播DHCP发现协议,组播地址为224.0.1.68。互联网络控制组中的地址分配也是由IANA进行统一管理的。
点对点(I:224.0.2.0~224.0.255.255;II:224.3.0.0~224.4.255.255;III:233.252.0.0~233.255.255.255):传统上这些地址块中的地址是分配给既不属于本地,也不属于互联网络控制的应用。路由器接口可能会在全球范围内转发点对点(AD-HOC)数据包。大多数使用点对点地址块的应用都需要多个地址(比如小于/24的地址空间)。IANA负责控制公共点对点地址块的分配,未来将会从点对点III中分配地址,如果相关应用无法与本地控制或互联网络控制相符合的话。在公共网络中也可以使用为分配的点对点地址。
SDP/SAP(224.2.0.0/16):会话描述协议/会话通知协议(SDP/SAP)地址块用于通过SAP接收地址的应用,定义在RFC 2974中。
指定源组播(232.0.0.0/8):SSM(指定源组播)编址定义在RFC 4607中。SSM是一种IP组播组模式,在这种模式中,组播流会被转发给接收方,同时接收方会明确表达它们只希望接收一些组播源发来的组播流。SSM多用于一对多应用中。使用SSM地址块不需要IANA的官方分配,因为这些应用对于主机来说是位于本地的;不过依照IANA的策略,这些个址块是专为SSM应用保留的,不能用于其他目的。本章及其他章节中会进一步讨论SSM。
注释
IANA最早将232.0.0.0/8分配给VMTP(多用消息处理协议)。
GLOP(233.0.0.0/8):这些地址是在全球范围内静态分配的。每个静态分配的GLOP都对应着一个16比特的ASN(自治系统编号),ASN也是由IANA分配的。ASN会以点分十进制格式(X.Y)插入到组播组地址中,成为组播组地址中间的2字节。比如ASN为X.Y,GLOP分配的地址就是233.X.Y.0/24。被分配了32比特ASN的域应该请求点对点III地址块中的地址分配。另一种用法是用在IPv6组播组编址中。因为SAN是公共的,因此IANA无须分配GLOP组。GLOP地址块是用于公共事务、网络和Internet运营商的。IANA将GLOP编址当作实验性编址,233.252.0.0~233.255.0.0是保留地址。
管理范围(239.0.0.0/8):管理范围的地址旨在用于私有域本地,定义在RFC 2365中。这些组地址的功能与RFC 1918私有IP地址块(比如10.0.0.0/8或172.16.0.0/16~172.31.0.0/16地址块)的功能类似。网络架构中可以使用这个地址块来创建地址规划方案,要求这个方案能够完美符合私有域的需求,并且未来还可以因为不同的地址位置、应用或网络进一步细分。第5章详细介绍了这个地址块中的地址划分。