Map Multicast MAC address to IP Multicast Addresses
In the course of reading through the BSCI authorize self-study guide, I’ve come across a multicast example where the author talks about the concepts behind the multicast IP to MAC address mapping.- In order to achieve the translation between a Layer 3 IP multicast address and Layer 2 multicast MAC address, the low-order 23 bits of the IP address (Layer 3) is mapped into the low-order 23 bits of the MAC address (Layer 2).
- The high order 4 bits of the Layer 3 IP address is fixed to 1110 to indicate the Class D address space between 224.0.0.0 through 239.255.255.255
- Ethernet MAC addresses start with 01:00:5E, allowing for a range from 01:00:5E:00:00:00 through 01:00:5E:7F:FF:FF.
- With 32 total bits present in an IP address and 4 high order bits of it set at 1110, we are left with 28 bits of unique IP addresses we can use (32 - 4 = 28).
- But remember, 23 low-order bits out of the 28 available bits are mapped to the MAC address, giving us 5 remaining bits of overlap.
- With the 5 bits of extra overlap, there are 32 (25 = 32) IP multicast address that map to one MAC multicast address.
The following is an example of how we arrive with those 32 IP addresses that map to a single MAC address:
For reference, use the following conversion chart for converting hex to binary and vice versa
Let’s start by using the example MAC address given in the book :
01:00:5e:0a:00:01
- Convert the hexadecimal MAC address 01:00:5e:0a:00:01 to binary
- Isolate the 23 low-order binary bits from the converted MAC address:
- 0000 0001 : 0000 0000 : 0101 1110 : 0000 1010 : 0000 0000 : 0000 0001
- Take the low order 23 bits from step 2 and plug it into the low-order 23 bits of the IP address (do this in binary):
- 1110 xxxx : x000 1010 : 0000 0000 : 0000 0000
- 1110 - First 4 high-order bits of the IP address for the multicast address space (224.x.x.x).
- xxxx x - 5 remaining bits after the 23bits of the IP address is mapped to the MAC address plus the 4 high order bits 1110. This is equal to 32 total IP addresses.
- 1110 xxxx : x000 1010 : 0000 0000 : 0000 0000
- Convert the binary equivalent of the IP addresses to decimal, replacing the x variables with all the values to get all 32 possible IP addresses:
- 11100000 : 0000 1010 : 0000 0000 : 0000 0001= 224.10.0.1
- 11100001 : 0000 1010 : 0000 0000 : 0000 0001= 225.10.0.1
- 11100010 : 0000 1010 : 0000 0000 : 0000 0001= 226.10.0.1
- 11100011 : 0000 1010 : 0000 0000 : 0000 0001= 227.10.0.1
- 11100100 : 0000 1010 : 0000 0000 : 0000 0001= 228.10.0.1
- 11100101 : 0000 1010 : 0000 0000 : 0000 0001= 229.10.0.1
- 11100110 : 0000 1010 : 0000 0000 : 0000 0001= 230.10.0.1
- 1110 0111 : 0000 1010 : 0000 0000 : 0000 0001= 231.10.0.1
- 11101000 : 0000 1010 : 0000 0000 : 0000 0001= 232.10.0.1
- 11101001 : 0000 1010 : 0000 0000 : 0000 0001= 233.10.0.1
- 11101010 : 0000 1010 : 0000 0000 : 0000 0001= 234.10.0.1
- 11101011 : 0000 1010 : 0000 0000 : 0000 0001= 235.10.0.1
- 11101100 : 0000 1010 : 0000 0000 : 0000 0001= 236.10.0.1
- 11101101 : 0000 1010 : 0000 0000 : 0000 0001= 237.10.0.1
- 11101110 : 0000 1010 : 0000 0000 : 0000 0001= 238.10.0.1
- 11101111 : 0000 1010 : 0000 0000 : 0000 0001= 239.10.0.1
- 11100000 : 1000 1010 : 0000 0000 : 0000 0001= 224.138.0.1
- 11100001 : 1000 1010 : 0000 0000 : 0000 0001= 225.138.0.1
- 11100010 : 1000 1010 : 0000 0000 : 0000 0001= 226.138.0.1
- 11100011 : 1000 1010 : 0000 0000 : 0000 0001= 227.138.0.1
- 11100100 : 1000 1010 : 0000 0000 : 0000 0001= 228.138.0.1
- 11100101 : 1000 1010 : 0000 0000 : 0000 0001= 229.138.0.1
- 11100110 : 1000 1010 : 0000 0000 : 0000 0001= 230.138.0.1
- 11100111 : 1000 1010 : 0000 0000 : 0000 0001= 231.138.0.1
- 11101000 : 1000 1010 : 0000 0000 : 0000 0001= 232.138.0.1
- 11101001 : 1000 1010 : 0000 0000 : 0000 0001= 233.138.0.1
- 11101010 : 1000 1010 : 0000 0000 : 0000 0001= 234.138.0.1
- 11101011 : 1000 1010 : 0000 0000 : 0000 0001= 235.138.0.1
- 11101100 : 1000 1010 : 0000 0000 : 0000 0001= 236.138.0.1
- 11101101 : 1000 1010 : 0000 0000 : 0000 0001= 237.138.0.1
- 11101110 : 1000 1010 : 0000 0000 : 0000 0001= 238.138.0.1
- 11101111 : 1000 1010 : 0000 0000 : 0000 0001= 239.138.0.1
- All the 32 IP addresses on step 4 map to MAC address 01:00:5e:0a:00:01
Convert IP Multicast Address to Multicast MAC Address
Conversely, a multicast IP address can be converted to its equivalent MAC address. Once you’ve figured out how to convert from Layer 2 MAC to Layer 3 IP, doing the reverse is easy.To start, we can pick any address from the 32 IP addresses we converted above. Let’s pick a random one like 227.138.0.1
- First convert the address 227.138.0.1 to binary:
- 11100011 : 10001010 : 00000000 : 00000001
- We’re only concerned with the red colored portion which represents the low-order 23bits of the IP address.
- Notice that we are dropping the high order bit of the second octet.
- Convert those 23 bits to hexadecimal:
- 0A:00:01
- We already know that the first 3-bytes (24 bits) of the MAC address is 01:00:5E.
This was established earlier in the article. Simply append the result
on step 2 to the first 3-bytes and you have your MAC address:
- 01:00:5E:0A:00:01
- *You can pick any of the 32 Ip addresses we have on the list above and you will always get 01:00:5E:0A:00:01 as your MAC address following the steps just mentioned.
- 1st octet – Notice that the first octet is left alone.
- 2nd octet – You only need to convert the last 7 bits to hex. The second octet in decimal is 138. But if you drop the highest order bit, it becomes a decimal 10 or hex 0A.
- 3rd octet – Convert it directly to hex.
- 4th octet – Convert it directly to hex.