分类: 系统运维
2012-05-30 17:49:15
Internet Group Management Protocol (IGMP), which is used by hosts and routers that support multicasting. It lets all the systems on a physical network know which hosts currently belong to which multicast groups. This information is required by the multicast routers, so they know which multicast datagrams to forward onto which interfaces. IGMP is defined in RFC 1112 [Deering 1989].
Like
ICMP, IGMP is considered part of the IP layer. Also like ICMP, IGMP
messages are transmitted in IP datagrams. Unlike other protocols that
we've seen, IGMP has a fixed-size message, with no optional data.
IP header | IGMP message |
20 bytes | 8 bytes |
IGMP messages are specified in the IP datagram with a protocol value of 2.
IGMP Message
The format of the 8-byte IGMP message.
0~3 | 4~7 | 8~15 | 16~31 |
4-bit IGMP | 4-bit IGMP type (1-2) | unused | 16-bit checksum |
32-bit group address (class D IP address) |
The IGMP version is 1. An IGMP type of 1 is a query sent by a multicast router, and 2 is a response sent by a host.
The checksum is calculated in the same manner as the ICMP checksum.
The group address is a class D IP address. In a query the group address is set to 0, and in a report it contains the
group address being reported.
IGMP Protocol
Joining a Multicast Group
Fundamental
to multicasting is the concept of a process joining a multicast group
on a given interface on a host. (We use the term process to mean a
program being executed by the operating system.) Membership in a
multicast group on a given interface is dynamic-it changes over time as
processes join and leave the group.
We
imply here that a process must have a way of joining a multicast group
on a given interface. A process can also leave a multicast group that it
previously joined. These are required parts of any API on a host that
supports multicasting. We use the qualifier "interface" because
membership in a group is associated with an interface. A process can
join the same group on multiple interfaces.
Implied here is that a
host identifies a group by the group address and the interface. A host
must keep a table of all the groups that at least one process belongs
to, and a reference count of the number of processes belonging to the
group.
IGMP Reports and Queries
IGMP
messages are used by multicast routers to keep track of group
membership on each of the router's physically attached networks. The
following rules apply.
1. A host sends an IGMP report when the
first process joins a group. If multiple processes on a given host join
the same group, only one report is sent, the first time a process joins
that group. This report is sent out the same interface on which the
process joined the group.
2. A host does
not send a report when processes leave a group, even when the last
process leaves a group. The host knows that there are no members in a
given group, so when it receives the next query (next step), it won't
report the group.
3. A multicast router
sends an IGMP query at regular intervals to see if any hosts still have
processes belonging to any groups. The router must send one query out
each interface. The group address in the query is 0 since the router
expects one response from a host for every group that contains one or
more members on that host.
4. A host responds to an IGMP query by sending one IGMP report for each group that still contains at least one process.
Using
these queries and reports, a multicast router keeps a table of which of
its interfaces have one or more hosts in a multicast group. When the
router receives a multicast datagram to forward, it forwards the
datagram (using the corresponding multicast link-layer address) only out
the interfaces that still have hosts with processes belonging to that
group.
Implementation Details
There
are many implementation details in this protocol that improve its
efficiency. First, when a host sends an initial IGMP report (when the
first process joins a group), there's no guarantee that the report is
delivered (since IP is used as the delivery service). Another report is
sent at a later time. This later time is chosen by the host to be a
random value between 0 and 10 seconds.
Next,
when a host receives a query from a router it doesn't respond
immediately, but schedules the responses for later times. (We use the
plural "responses" because the host must send one report for each group
that contains one or more members.) Since multiple hosts can be sending
a report for the same group, each schedules its response using random
delays. Also realize that all the hosts on a physical network receive
all the reports from other hosts in the same group, because the
destination address of the report in Figure 13.3 is the group's address.
This means that, if a host is scheduled to send a report, but receives a
copy of the same report from another host, the response can be
canceled. This is because a multicast router doesn't care how many hosts
belong to the group-only whether at least one host belongs to the
group. Indeed, a multicast router doesn't even care which host belongs
to a group. It only needs to know that at least one host belongs to a
group on a given interface.
On a single
physical network without any multicast routers, the only IGMP traffic
is the reports issued by the hosts that support IP multicasting, when
the host joins a new group.
Time-to-Live Field
A
multicast datagram with an initial TTL of 0 is restricted to the same
host. By default, multicast datagrams are sent with a TTL of 1. This
restricts the datagram to the same subnet. Higher TTLs can be forwarded
by multicast routers.
By increasing the TTL an application can
perform an expanding ring search for a particular server. The first
multicast datagram is sent with a TTL of 1. If no response is received,
a TTL of 2 is tried, then 3, and so on. In this way the application
locates the closest server, in terms of hops.