# Internet Group Management Protocol (IGMP)
## Multicast
Multicast allows source send messages to a group of destinations/receivers by flooding multicast traffic to all the ports in a broadcast domain (or the VLAN equivalent).
ps. There are three types of network transmissions: Braodcast, Multicast, and Unicast.
![](https://i.imgur.com/p9hwQ1t.png)
## IGMP Introduction
- IGMP, an intergrated part of **IP multicast**, operates between a **host** and a **local multicast router** on IPv4 networks to establish multicast group memberships.
- Multicast Sender: **Stream Source**, Hosts: **Receiver**
- Multicast management on **IPv6** networks is handled by **Multicast Listener Discovery (MLD)**.
- It allows stream source transmits packets to a selected and dynamic group of hosts by referring **one class D address**.
![](https://i.imgur.com/UJRtg7j.png)
- Applications: **One-to-many networking applicastions** such as online streaming vedio and gaming.
- Benifits:
- Prevent hosts on a local network from receiving multicast traffic they haven't explicitly joined since multicast uses flooding to all ports in a local network.
- Conserving **bandwidth** on communication links: *5 Unicast packets are sent to receiver from source -> 1 packet (flooding)*
![](https://i.imgur.com/EeLbtpX.png)
## Dynamic Multicasting
Keywords: **IGMP membership query** & **IGMP snooping**
### Layer 3 Devices (Routers or Switches)
- Multicasts are sent to which **Subnet**
- maintain **Multicast routing tables**.
- **IGMP membership queries**, aka IGMP general queries, are sent for confirming any port want to receive multicast messages. (QA: Only router? Will switches? A: Yes, switch send general queries when ports join/leave a multicast group table)
- This mechanism will automatically executes in a period of time (severl seconds by defualt)
- IGMP general queries from the IGMP querier must be unconditionally forwarded by all switches involved in IGMP snooping.
- Routers/ layer 3 Switches listen **join/leave messages** from clients then update routing tables
- 看不懂就 drop 掉
### Layer 2 Devices (Switches)
- Multicasts are sent to which **host**
- Layer 2 devices maintain **Multicast group tables** and manage it by **port**.
- **Dynamically forward the traffic to only the ports participations in the group.**
- **IGMP snooping listen to IGMP network traffic between hosts and routers and maintain a map of which links need which IP multicast transmission.**
- IGMP snooping with **proxy reporting (or report suppression)** actively filters IGMP packets in order to reduce load on the multicast router. A switch determines the router need the join/leave information or not (depens on will it affect the status of the group or not from the router's point of view ).
- IGMP membership queries when **ports** join/leave Multicast group tables
- If no join/leave messages -> **flooding**
- Using RSTP,RTP,RTCP protocols at the first time. If host can reads packets then take it. (AQ: PIM?)
- 看不懂就 snooping
## Communication address
![](https://i.imgur.com/y0FAnmc.png)
### IP based
224-239 (**Class D**): All Multicast routers
![](https://i.imgur.com/A3hsRe4.png)
- 224.xxx.xxx.xxx - 239.xxx.xxx.xxx
- Overlapping problems such as 224.1.10.10 and 224.129.10.10 has the same corresponding multicast MAC address.
- Moxa's products MAC address: 01:00:5E:xx:xx:xx
*### BPDU based*
## IGMP Versions
### v1
- Defines **Querier, Host**, and Join mechanism
- Routers send **queries** to **224.0.0.1** (all multicast-cabable hosts). (QA: 送什麼?送完會發生甚麼事?)
- **Membership reports** are sent to the group's multicast address. (QA:內容?)
- 尚未有 leave 機制
### v2
- Accelerates the process of leaving a group and adjusts other timeouts.
- Hosts send **leave-group** messages to **224.0.0.2** (all Multicast routers).
- **Group-specific** queries are sent to the group's multicast address.
- Introduces a means for routers to select an IGMP querier for the network.
### v3
- Introduces **source-specific** multicast.
- In addition to the Rx expressing interest in traffic to a multicast address, the Rx expresses interest in receiving traffic from only specific source sending to that multicast address.
- Relieves the network of discovering many multicast sources
- Reduces the amout of multicast routing information that the network must maintain
- Membership reports are sent to **224.0.0.22**.
- *Black/Whitelist, Specific source, include/exclude, router alert(Without reading payload)*
![](https://i.imgur.com/bii88fQ.png)
### Messages
**General membership queries**: multicast routers -> routers/switches.
- These queries are sent for confirming any port want to receive multicast messages.
- To determine which **multicast addresses** are of interest to systems attached to the network(s) they serve.
- To refresh the group membership state for all systems on its network.
- Layer 3 devices kepp track of which ports belong to which Multicast groups.
**Group-specific membership queries**: routers -> routers/switches
- Used for determining the reception state for a particular multicast address
**Group-and-source-specific queries**: routers -> routers/switches
- Allow the router to determine if any systems desire reception of messages sent to a multicast group from a source address specified in a list of unicast addresses
**Membership reports**: multicast receivers -> switche
- In response to a membership query or asynchronously when first registering for a multicast group
**Leave group messages**: multicast receivers -> switche
- When specified multicast transmissions are no longer needed at the receiver
![](https://i.imgur.com/yODPMs5.png)
**Group Address** is the multicast address being queried when sending a Group-Specific or Group-and-Source-Specific Query. *The field is zeroed when sending a General Query.* (QA: What's GQ? general membership query?)
![](https://i.imgur.com/PCNFJCB.png)
![](https://i.imgur.com/3BQIxhe.png)
![](https://i.imgur.com/0Vu5DAM.png)
## Practices
1. DA (224.10.7.100) 換算 Ethernet Multicast Add.
- Convert the last 3 octects to binary: 0000.1010.0000.0111.0110.0100
- Change the leftmost bit to 0, if it's not already 0: 0000.1010.0000.0111.0110.0100
- Convert each nibble into hex: 0a-07-64
- Prepend Moxa's ID 01-00-5e: 01-00-5e-0a-07-64
3. H/W 會遇到什麼問題&怎麼設定
## References
- [Internet Group Management Protocol](https://en.wikipedia.org/wiki/Internet_Group_Management_Protocol)
- [IGMP snooping](https://en.wikipedia.org/wiki/IGMP_snooping)
- Reverse Path Forwarding (RPF) Check: Avoides duplicate copy of packets.
![](https://i.imgur.com/sJVJkxV.png)
- ?? ![](https://i.imgur.com/EBrFqWV.png)
- Prune messages: Avoides duplicate copy of packets