In IPv4, there is a specific range of addresses reserved for multicast use (224.0.0.0 to 239.255.255.255). In IPv6, multicast addresses are all addresses inside the prefix FF00::/8. In other words, an IPv6 address is a multicast address if and only if the first byte is FF (255 in decimal). An IPv6 address is 128 bits long, and these bits are divided into groups that are used to signify specific things. After the first 8 bits (which define a multicast address), there are 4 bits each for flags and scopes. This leaves 112 bits to specify a group ID, which, because of the expansive size of the IPv6 address space, is massive compared to IPv4 addressing.

Now we will to look at the flag bits. Currently, the first three of these four bits are unused (and subsequently set to 0). The fourth flag bit is called the transient bit. Its purpose is to indicate whether an address is permanent or temporary. If the address is permanently assigned (issued by IANA), this bit is set to zero. However, if the transient bit is a one, the address is temporary (or transient). Perfect examples of permanently assigned addresses would be FF02::2 (All Routers) or FF02::6 (OSPF DR Routers).

The remaining four bits of interest to us in a multicast address are known as the Scope ID bits. There are 16 different combinations than can be created using these 4-bits. Not all 16 available values are currently in use at this time, but seven of them are used to determine an address scope. As an example, if the address scope is 1110 or “global,” that address is valid across the entire Internet. These are the currently defined scope ID bits:

Decimal Value Binary Value Address Scope
0 0000 Reserved
1 0001 Node-Local
2 0010 Link-local
5 0101 Site-local
8 1000 Organization-local
14 1110 Global Scope
15 1111 Reserved

It must be noted that enforcement of flags and flooding scopes does not take place in software in any way. In addition, flooding scope enforcement must be configured administratively using multicast filtering. The prefixes just use the field for ease of administrative management.

Most of IPv6 multicast functionality is similar to IPv4 multicast, with some modifications.

PIMv2 for IPv6 only supports Sparse Mode and SSM functionality unlike its IPv4 counterpart. Most of the other features are similar. As soon as you type the command ipv6 multicast-routing , PIMv6 becomes active on all IPv6-capable interfaces and so does MLD. You may disable this on an interface-by-interface basis by using the command no ipv6 pim . PIM uses link-local addressing only for IPv6.

The only significant operational difference between IPv4 PIM-SM and IPv6 PIM-SM is the source registration process. When a source starts multicasting, the DR on the segment is supposed to register it with the RP. This is normally performed by sending PIM register messages to the RP and encapsulating the original data packet inside them. With IPv6, as soon as a multicast IPv6 router learns the RP address, it creates a tunnel interface connecting the router to the RP router. This tunnel is automatically enabled for multicasting, so multicast traffic sent down the shared tree is simply forwarded out the tunnel toward the RP. The tunnel is used only for the duration of the registration process, and then the receivers switch to the optimal path, which will not transit the tunnel. The use of this tunnel allows consistent multicast packet flooding behavior using the same code and simple tunneling of PIM registration messages. You may see a list of all currently active tunnels by using the command show ipv6 pim tunnel .

Multicast Listener Discovery Protocol (MLD), based on ICMPv6, has replaced IGMP as the membership signalling protocol. MLDv1 is functionally equivalent to IGMPv2 while MLDv2 translates to IGMPv3. MLDv2 is the IOS default. MLDv2 is required for SSM.

MLD supports three message types:

  • Query
  • Report
  • Done

Done is very similar to IGMPv2’s Leave message.

R1(config)# ipv6 access-list MLD_FILTER
R1(config-acl)# permit ipv6 any ff08::/64
R1(config)# ipv6 multicast routing
R1(config)# interface GigabitEtherne0/1
R1(config-if)# ipv6 mld access-group MLD_FILTER
R1(config-if)# ipv6 mld query-interval 10
R1(config-if)# exit
R1(config)# interface GigabitEthernet0/2
R1(config-if)# no ipv6 pim
R1(config-if)# exit

Notice the use of an IPv6 access-list below to control the groups that a host may join. The access-list entry [permit|deny] ipv6 <part1> <part2> allows for both SSM and normal multicast group filtering. If you want to filter just MLDv1 joins, leave <part1> as “any”; this specifies any source. The parameter configured in <part2> is responsible for the multicast-group being joined. So it is possible with this one filter to permit or deny the specific multicast groups that can be joined by specific hosts.

IPv6 multicast addresses map to the reserved MAC address range of 33-33-00-00-00-00 through 33-33-FF-FF-FF-FF. The low order 32 bits of the IPv6 Multicast address map directly to the low order 32 bits of the MAC address, appended to 33-33.