If the destination is an IP multicast, the following steps are taken.
Note that the main differences between the forwarding of IP unicasts and the forwarding of IP multicasts are
Note that the forwarding of IP multicasts is still somewhat experimental. As a result, the algorithm presented below is not mandatory, and is provided as an example only.
(5a) Based on the IP source and destination addresses found in the datagram header, the router determines whether the datagram has been received on the proper interface for forwarding. If not, the datagram is dropped silently. The method for determining the proper receiving interface depends on the multicast routing algorithm(s) in use. In one of the simplest algorithms, reverse path forwarding (RPF), the proper interface is the one that would be used to forward unicasts back to the datagram source. (6a) Based on the IP source and destination addresses found in the datagram header, the router determines the datagram's outgoing interfaces. To implement IP multicast's expanding ring search (see [INTERNET:4]) a minimum TTL value is specified for each outgoing interface. A copy of the multicast datagram is forwarded out each outgoing interface whose minimum TTL value is less than or equal to the TTL value in the datagram header, by separately applying the remaining steps on each such interface. (7a) The router decrements the packet's TTL by one. (8a) The forwarder performs any IP option processing that could not be completed in step (3). (9a) The forwarder performs any necessary IP fragmentation, as described in Section [18.104.22.168]. (10a) The forwarder determines the Link Layer address to use in the Link Level encapsulation. The mechanisms for doing this are Link Layer-dependent. On LANs a Link Level multicast or broadcast is selected, as an algorithmic translation of the datagrams' IP multicast address. See the various IP-over-xxx specifications for more details. (11a) The forwarder encapsulates the packet (or each of the fragments thereof) in an appropriate Link Layer frame and queues it for output on the appropriate interface.