Layer 2 switches build a table of MAC addresses and the ports that lead to them. Switches learn about MAC addresses and associated ports by looking at the source MAC address on received traffic. To cope with startup, frames to unknown MAC addresses are flooded out all ports within the broadcast domain when the MAC is empty. Unintended recipients simply note that the destination is not their MAC address and ignore the traffic.
This system works fine for broadcasts. A broadcast address is never a source address and is therefore not in the MAC table. Broadcasts are therefore flooded.
Multicasts also qualify as "unknown" because multicast addresses only show up as the destination address. Switches flood multicasts and it is up to the individual PC to sort out the frames in which it is interested.
Multicasts to an uninterested device waste bandwidth. To compound the situation, unsophisticated network cards may not be able to discriminate between interesting and uninteresting frames and involve the processor in those decisions. This eats into the available processor cycles on the device and slows down other processes.
There are three methods of optimizing Cisco switches to handle this situation. All three work to limit multicasts to ports where the traffic is wanted and to hide multicasts from other hosts:
Static MAC table entries (creating manual MAC entries)
Cisco Group Management Protocol (CGMP)
IGMP Snooping
Creating manual MAC entries is the most easily understood of these methods, but it cannot react dynamically to changes. This method also involves touching a lot of switches to make a change and the workload becomes immense as the network grows. Therefore, manually creating MAC entries is not the recommended approach.
CGMP is a Cisco-proprietary solution. CGMP is a protocol that runs between switches and routers. When routers receive IGMP messages, they pass the MAC of the requestor and the multicast group requested on to the switch. The switch then cross-references the requestor with its MAC table and enables the multicast group for a port.
Another method of accomplishing the same result is to enable the switch to recognize requests for multicast traffic that use the Internet Group Management Protocol (IGMP). This is called IGMP snooping and it allows the switch to understand the requested multicast group and the port of the requestor. This could create a processing burden for the switch, but modern Cisco routers support snooping in hardware.
Before routers can forward multicast traffic, they must first understand where clients are located. IGMP is the protocol used by clients to identify themselves to the router and request multicast service.
To receive multicast traffic from a source, recipients join a common multicast group (identified by a multicast IP address). A host joins a group by sending a request to its local router. The request is accomplished through the Internet Group Management Protocol (IGMP). IGMPv1 is defined in RFC 1112; its successors, IGMPv2 and IGMPv3, are defined in RFC 2236 and RFC 3376, respectively.
To join a multicast group, a host dynamically sends a Membership Report IGMP message to its local router. This message tells the router which multicast address (group) the host is joining. The multicast address is used as the destination IP address and is the group address listed in the message. Multicast routers must intercept all multicast packets to receive the membership reports and add hosts to the appropriate groups.
Every 60 seconds, one router (the querier) on each network segment sends a query to the all-hosts address (224.0.0.1) to see if there is at least one host still interested in receiving the multicast group. Only one host needs to respond to maintain the forwarding. Interested hosts respond with a membership report (if another host has not already reported).
Note
Notice that the querier sends its invitations to a multicast group address, 224.0.0.1. Does this mean that every host on a network must first join the 224.0.0.1 group? Actually, every host is inherently a member of this group, without a formal IGMP exchange. That is why it is called the "all-hosts" address.
Hosts can join multicast groups at any time. However, IGMPv1 does not have a mechanism to allow a host to leave a group when it is no longer interested in the content of that group. Instead, routers "age out" a multicast group if no membership reports are received for three consecutive query intervals. This means that multicast traffic is still sent onto a segment up to 3 minutes after all group members have stopped listening.
A router does not keep a complete membership list for each multicast group that is active. Instead, it needs to record only which multicast groups are active on which interfaces. Whether 1 host or 100 hosts on a network segment are members of a group, the router still needs to send only one copy of a multicast packet onto that segment.
IGMP version 2 (RFC 2236) enhances the IGMP feature set. This section describes those improvements and briefly explains IGMPv2 operation.
IGMPv2 includes four significant improvements:
Queries can be sent as general queries to the all-hosts address (as in IGMPv1) or group-specific queries, which are sent only to members of a specific group.
Hosts can now leave a group dynamically.
Querier election.
Query-interval response time.
When a host decides to leave a group it has joined, it sends a Leave Group message to the all-routers address (224.0.0.2). All routers on the local segment take note, and the querier router responds with a group-specific query message (sent to the group address), asking if others are still interested in receiving that group. Interested hosts must reply with a membership report, or the querier assumes there is no need to continue forwarding the group on that segment.
Note
Because IGMPv1 routers cannot understand IGMPv2, if an IGMPv1 router is present on a segment, all routers must run IGMPv1. In this way, IGMPv2 is backward-compatible.
On interfaces where PIM is configured, IGMPv2 is enabled by default. PIM is covered in the next section. To change the IGMP version, you can use the following interface-configuration command:
Switch(config-if)# ip igmp version {1 | 2 | 3}
IGMPv2 also adds a querier election mechanism. In version 1, election was handled by the routing protocol. In version 2, all routers start as queriers and transition to non-queriers if they hear another querier with a higher IP address.
The final significant change in IGMPv2 is that version 2 adds a query-interval response time. A query now includes a field to tell members how long they have to respond, which should prevent a rush to respond.
Members may join a multicast group at any time by producing an unsolicited report sent to the desired multicast address. Attached routers simply track whether there is at least one client interested in a group. To see the current membership records of a router, use the command show ip igmp group, as shown in Example 18-1.
Router# show ip igmp group
IGMP Connected Group Membership
Group Address Interface Uptime Expires Last Reporter
227.100.100.1 FastEthernet0/0 0d0h28m 00:02:19 192.168.0.105 |
From the output shown in Example 18-1, you can see that 227.100.100.1 has been active on fastethernet0/0 for 28 minutes. The group will expire if a membership report is not received in a little over two minutes. The last device to send a report was 192.168.0.105.
In IGMPv1, hosts leave the group passively; they just stop responding to membership queries. Eventually the router will get the message. The problem is that in the interim—between when a host no longer needs the traffic and the router recognizes that it no longer needs to forward the traffic—network capacity is absorbed with sending unneeded multicasts.
In IGMPv2, hosts leave explicitly by sending a Leave message. The last reporter field from show ip igmp group is significant for leave operations. If a device other than the last reporter sends a leave message, the router assumes that at least one user is still present. If the last reporter sends a Leave, the router sends a Membership Query. In this way, leave latency is reduced.
IGMPv3 (RFC 3376) builds on IGMPv2 and adds support for multicast source filtering. With source filtering, a recipient host can request membership in a multicast group and also supply a list of IP addresses representing multicast sources from which it will accept traffic.
A router running IGMPv3 can coexist with routers running older versions. To do this, the router must degrade itself to the highest common IGMP version in each multicast group.
Note
IGMPv3 is primarily used for source-specific multicast (SSM). SSM is based on PIM sparse mode, with a separate source-distribution tree for each source that is used within each group. IGMPv3 is discussed here in less detail than the previous versions, because SSM is beyond the scope of the BSCI course and exam.
The best way to look at the IGMP parameters used by a router is to use the command show ip igmp interface, as shown in Example 18-2.
router>show ip igmp interface fastethernet0/0
FastEthernet0/0 is up, line protocol is up
Internet address is 192.168.0.1, subnet mask is 255.255.255.0
IGMP is enabled on interface
Current IGMP version is 2
CGMP is disabled on interface
IGMP query interval is 60 seconds
IGMP querier timeout is 120 seconds
IGMP max query response time is 10 seconds
Inbound IGMP access group is not set
Multicast routing is enabled on interface
Multicast TTL threshold is 0
Multicast designated router (DR) is 192.168.0.1 (this system)
IGMP querying router is 192.168.0.1 (this system)
Multicast groups joined: 224.0.1.40 227.100.100.1 |
In this example, the current IGMP version is version 2.
As described in the previous section, the Internet Group Management Protocol (IGMP) is used to allow end systems to request the multicast traffic that they desire from the local router. Without IGMP, your router would not understand which channels were desired. This section describes enabling IGMP groups and configuring IGMP snooping.
IGMP is used to identify multicast groups that the clients require. When troubleshooting multicast, you need to verify that IGMP is enabled on the client-facing interfaces and that users are subscribing to groups.
The show ip igmp interface command shows the status of IGMP on a given interface.
In Example 18-3, notice that the router supports IGMP version 2. Details about timers, activity, and groups joined can also be seen from this command.
Stewart#show ip igmp interface e0 Ethernet0 is up, line protocol is up Internet address is 172.16.24.1/29 IGMP is enabled on interface Current IGMP version is 2 CGMP is disabled on interface IGMP query interval is 60 seconds IGMP querier timeout is 120 seconds IGMP max query response time is 10 seconds Last member query response interval is 1000 ms Inbound IGMP access group is not set IGMP activity: 3 joins, 0 leaves Multicast routing is enabled on interface Multicast TTL threshold is 0 Multicast designated router (DR) is 172.16.24.1 (this system) IGMP querying router is 172.16.24.1 (this system) Multicast groups joined: 224.0.1.40 |
Use show ip igmp groups to provide specifics about the active groups. In Example 18-4, three groups have been active for about a half hour.
Stewart#show ip igmp groups
IGMP Connected Group Membership
Group Address Interface Uptime Expires Last Reporter
239.255.255.250 Ethernet0 00:33:05 00:02:59 192.168.0.102
235.80.68.83 Ethernet0 00:33:08 00:02:44 192.168.0.1
224.0.1.40 Ethernet0 00:33:14 never 172.16.24.1 |
Note
To join a router to a group, use the command ip igmp join-group—for instance, ip igmp join-group 227.0.0.1. This can be useful for troubleshooting the group. Since the router responds to ping, ICMP echo-requests sent to the group will result in a reply from the router. The multicast version of ping is called mping.
The ip igmp static-group command allows a router to be statically joined to a group. This is useful if you use a group to support a common application. Imagine that your company uses 227.0.0.1 as a multicast group for an internal application—using static joins on every router cuts out the processing of joins and leaves, removes the need for queries, and allows the router to fast switch the traffic.
Just to be clear—neither of these commands are commonly used. Joining a router to a group forces the router to process a lot of traffic that it cannot use, such as video captures. However, joining a group can be useful in troubleshooting a new multicast network. In a similar vein, static joins are useful if all traffic uses a well-known address. Multicast traffic tends to be fairly unpredictable, however, so this is not a solution for most networks.
IGMP snooping allows a switch to identify end systems that request multicast traffic and limit forwarding of a multicast address to specific ports. IGMP snooping is enabled by default, and can be manually enabled by the command ip igmp snooping. You can use the show multicast group and show multicast router commands to display the learned groups and associated router ports.
Example 18-5 shows these commands applied to a working switch. Notice that show ip igmp snooping goes through the IGMP settings, that show multicast router shows that port 1/1 is active, and that show multicast group shows two groups active.
Code View: Stewart-Switch#show ip igmp snooping vlan 6 vlan 6 ---------- IGMP snooping is globally enabled IGMP snooping TCN solicit query is globally disabled IGMP snooping global TCN flood query count is 2 IGMP snooping is enabled on this Vlan IGMP snooping immediate-leave is disabled on this Vlan IGMP snooping mrouter learn mode is pim-dvmrp on this Vlan IGMP snooping source only learning age timer is 10 IGMP snooping is running in IGMP_ONLY mode on this Vlan IGMP snooping report suppression is enabled on this Vlan Stewart-Switch# show multicast router igmp Port Vlan ---------- ---------------- 1/1 6 Total Number of Entries = 1 '*' - Configured '+' - RGMP-capable Stewart-Switch> show multicast group igmp VLAN Dest MAC/Route Des [CoS] Destination Ports or VCs / [Protocol Type] ---- --------------------------------------------------------------------- 6 01-00-5e-00-01-28 1/1 6 01-00-5e-01-02-03 1/1-2 Total Number of Entries = 2 |