Loading learning content...
Every device that has ever connected to an Ethernet network—your laptop, smartphone, smart TV, IoT thermostat, data center server, or industrial controller—carries a unique identifier burned into its network interface hardware. This identifier is the Media Access Control (MAC) address, a 48-bit value that serves as the device's 'fingerprint' at the Data Link Layer of the OSI model.
Unlike IP addresses, which are logical and can be reassigned, MAC addresses are designed to be permanent and globally unique. They were conceived to solve a fundamental problem: when multiple devices share the same physical network medium, how does each device know which frames are meant for it, and which frames it should ignore?
Understanding MAC address format isn't merely academic trivia—it's essential knowledge for network troubleshooting, security analysis, network design, and understanding how modern switching and bridging work at the most fundamental level.
By the end of this page, you will understand the complete 48-bit structure of MAC addresses, including the OUI and NIC-specific portions, the bit-level significance of unicast/multicast and locally/universally administered flags, various notation formats, and the design rationale behind this addressing scheme.
A MAC address consists of 48 bits (6 bytes), providing a theoretical address space of 2^48 = 281,474,976,710,656 unique addresses—approximately 281 trillion possibilities. This seemingly astronomical number was chosen in the early 1980s to ensure that every network interface card (NIC) ever manufactured could receive a globally unique identifier.
The fundamental structure divides into two equal halves:
| Portion | Bits | Bytes | Purpose | Assigned By |
|---|---|---|---|---|
| OUI (Organizationally Unique Identifier) | 24 bits | First 3 bytes | Identifies the manufacturer/vendor | IEEE Registration Authority |
| NIC-Specific / Device Identifier | 24 bits | Last 3 bytes | Unique identifier within manufacturer's range | Hardware Manufacturer |
Visual representation of the 48-bit layout:
|<------ OUI (24 bits) ------>|<-- NIC-Specific (24 bits) -->|
| Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 |
|----------|---------|--------|---------|---------|----------|
| XX:XX:XX | : | : | XX:XX:XX| : | : |
| |
|-- Vendor Assigned --|-- Manufacturer Assigned ------------|
This division creates an elegant delegation system:
Address space per OUI:
With 24 bits for NIC-specific assignment, each OUI grants a manufacturer 16,777,216 unique addresses. When a manufacturer exhausts this allocation, they can register for additional OUIs.
When Bob Metcalfe and his team at Xerox PARC designed Ethernet in the 1970s, 48 bits seemed almost absurdly large. At the time, there were perhaps thousands of networked computers worldwide. Today, with billions of networked devices manufactured annually, the wisdom of this forward-thinking design is evident. Even now, the address space is far from exhausted.
Within the first byte of a MAC address, two specific bits carry special significance that fundamentally affects how the address is interpreted and processed by network hardware. Understanding these bits is crucial for network engineers and security professionals.
The two special bits in the first byte:
| Bit Position | Name | Value = 0 | Value = 1 |
|---|---|---|---|
| Bit 0 (LSB) | I/G (Individual/Group) Bit | Unicast address (single recipient) | Multicast/Broadcast address (group) |
| Bit 1 | U/L (Universal/Local) Bit | Universally administered (IEEE-assigned) | Locally administered (locally assigned) |
Deep dive into the I/G (Individual/Group) bit:
The I/G bit determines whether a frame targets a single destination or multiple destinations:
I/G = 0 (Unicast): The frame is intended for exactly one specific network interface. This is the normal case for point-to-point communication.
I/G = 1 (Multicast/Broadcast): The frame is intended for a group of recipients. When full six bytes are all 1s (FF:FF:FF:FF:FF:FF), it's a broadcast that all stations must receive.
Example analysis:
MAC Address: 00:1A:2B:3C:4D:5E
First byte: 00 = 0000 0000 in binary
Bit 0 (rightmost): 0 → Unicast
Bit 1: 0 → Universally administered
This is a standard, manufacturer-assigned unicast address.
MAC Address: 01:00:5E:00:01:00
First byte: 01 = 0000 0001 in binary
Bit 0 (rightmost): 1 → Multicast
Bit 1: 0 → Universally administered
This is an IPv4 multicast MAC address (used with multicast IP addresses).
Ethernet transmits the least significant bit (LSB) of each byte first (little-endian bit order within bytes). This is why the I/G bit, which is logically the 'type' indicator, is at bit position 0 (the first bit transmitted)—it allows network hardware to immediately determine if the frame is unicast or multicast before receiving the entire address.
Deep dive into the U/L (Universal/Local) bit:
The U/L bit indicates who assigned the address:
U/L = 0 (Universally Administered): The address was assigned by the manufacturer according to their IEEE-allocated OUI. It is expected to be globally unique.
U/L = 1 (Locally Administered): The address was assigned locally by a network administrator, software, or virtualization platform. Global uniqueness is not guaranteed.
When locally administered addresses are used:
Example of LAA format:
MAC Address: 02:00:00:00:00:01
First byte: 02 = 0000 0010 in binary
Bit 0: 0 → Unicast
Bit 1: 1 → Locally administered
This is a locally administered unicast address.
MAC addresses can be represented in several notation formats depending on the operating system, vendor, or documentation standard. While all represent the same 48-bit value, familiarity with each format is essential for cross-platform network administration.
The primary notation formats:
| Format | Example | Used By | Byte Separator |
|---|---|---|---|
| Colon-Separated | 00:1A:2B:3C:4D:5E | Linux, Unix, macOS, IEEE documentation | Colon (:) |
| Hyphen-Separated | 00-1A-2B-3C-4D-5E | Windows, Microsoft documentation | Hyphen (-) |
| Dot-Separated (Cisco) | 001A.2B3C.4D5E | Cisco IOS, networking equipment | Dot (.) every 4 hex chars |
| No Separator | 001A2B3C4D5E | Some database systems, compact representations | None |
| Binary | 00000000:00011010:00101011:... | Educational materials, bit-level analysis | Usually colon between bytes |
Case sensitivity:
MAC addresses are case-insensitive. 00:1a:2b:3c:4d:5e, 00:1A:2B:3C:4D:5E, and 00:1a:2B:3c:4D:5e all represent the same address. However, conventions vary:
Leading zero conventions:
Some formats omit leading zeros (0:1A:2B:3C:4D:5E), though this is uncommon and can cause parsing issues. Best practice is to always include leading zeros for all bytes.
Converting between formats:
12345678910111213141516171819202122232425
# Converting between MAC address formats in Python mac_colon = "00:1A:2B:3C:4D:5E" # Convert to hyphen-separated (Windows format)mac_hyphen = mac_colon.replace(":", "-")print(f"Hyphen format: {mac_hyphen}") # 00-1A-2B-3C-4D-5E # Convert to Cisco dot notationmac_no_sep = mac_colon.replace(":", "")mac_cisco = f"{mac_no_sep[:4]}.{mac_no_sep[4:8]}.{mac_no_sep[8:12]}"print(f"Cisco format: {mac_cisco}") # 001A.2B3C.4D5E # Convert to binary for analysismac_bytes = bytes.fromhex(mac_no_sep)mac_binary = ':'.join(format(byte, '08b') for byte in mac_bytes)print(f"Binary: {mac_binary}")# 00000000:00011010:00101011:00111100:01001101:01011110 # Check the special bitsfirst_byte = mac_bytes[0]is_multicast = bool(first_byte & 0x01)is_local = bool(first_byte & 0x02)print(f"Is Multicast: {is_multicast}") # Falseprint(f"Is Local Admin: {is_local}") # FalseCertain MAC address values are reserved for specific purposes and should never be assigned to regular network interface hardware. Understanding these special addresses is essential for proper network operation and troubleshooting.
| Address | Name/Purpose | Description |
|---|---|---|
FF:FF:FF:FF:FF:FF | Broadcast Address | Received by all stations on the LAN segment. Used for ARP requests, DHCP discovery, and other protocols requiring network-wide communication. |
01:00:5E:XX:XX:XX | IPv4 Multicast Range | Reserved for IPv4 multicast. The lower 23 bits map to the lower 23 bits of IP multicast addresses. |
33:33:XX:XX:XX:XX | IPv6 Multicast Range | Reserved for IPv6 multicast. The lower 32 bits are derived from the IPv6 multicast address. |
01:80:C2:00:00:00 | Spanning Tree Protocol (STP) | Destination for STP BPDUs (Bridge Protocol Data Units). |
01:80:C2:00:00:01 | IEEE 802.3x Pause Frames | Used for Ethernet flow control PAUSE frames. |
01:80:C2:00:00:02 | Slow Protocols (LACP, etc.) | Used for Link Aggregation Control Protocol and similar slow protocols. |
01:80:C2:00:00:0E | LLDP (Link Layer Discovery Protocol) | Destination for LLDP neighbor discovery frames. |
00:00:00:00:00:00 | Null/Invalid Address | Indicates uninitialized or invalid hardware address. Should never appear in actual traffic. |
01:00:0C:CC:CC:CC | Cisco Discovery Protocol (CDP) | Destination for Cisco's proprietary neighbor discovery protocol. |
01:00:0C:CC:CC:CD | Cisco PVST+ | Per-VLAN Spanning Tree Plus protocol frames. |
Switches never learn multicast or broadcast MAC addresses into their forwarding tables. These addresses are processed specially—broadcasts are flooded to all ports (except the source), and multicast handling depends on IGMP/MLD snooping configuration.
The IEEE 802.1D reserved address block:
The range 01:80:C2:00:00:00 to 01:80:C2:00:00:2F (48 addresses) is reserved for IEEE 802.1D bridge management functions. Frames with these destination addresses should never be forwarded by bridges—they are always processed locally or discarded.
This ensures that protocols like STP, LLDP, and flow control operate correctly within a single network segment without being inappropriately forwarded across bridges.
Network engineers frequently need to identify MAC addresses for troubleshooting, security analysis, and inventory management. Each major operating system provides commands for retrieving the MAC addresses of local interfaces.
123456789101112131415161718192021222324
# Method 1: Using ip command (modern, recommended)ip link show# Output includes "link/ether 00:1a:2b:3c:4d:5e" for each interface # View specific interfaceip link show eth0 # Method 2: Using ifconfig (legacy)ifconfig eth0# Look for "ether 00:1a:2b:3c:4d:5e" # Method 3: Read directly from sysfscat /sys/class/net/eth0/address # Method 4: List all interfaces with their MACsip -o link show | awk '{print $2, $(NF-2)}' # Method 5: Using nmcli (NetworkManager environments)nmcli device show | grep -E "DEVICE|HWADDR" # View ARP cache (other hosts' MAC addresses)ip neighbor show# or legacy:arp -aTo identify the manufacturer of a device by its MAC address, you can use the IEEE's official OUI lookup: https://regauth.standards.ieee.org/standards-ra-web/pub/view.html — or various online tools. The first 3 bytes (e.g., 00:1A:2B) identify the vendor. This is invaluable for network inventory and security audits.
Understanding where MAC addresses fit in the networking protocol stack clarifies their role and limitations. The MAC address operates exclusively at Layer 2 (Data Link Layer) of the OSI model, specifically in the MAC sublayer.
The layered addressing hierarchy:
| Layer | Address Type | Example | Scope | Changes During Transit? |
|---|---|---|---|---|
| Layer 2 (Data Link) | MAC Address | 00:1A:2B:3C:4D:5E | Local LAN segment | Yes—rewrites at each hop |
| Layer 3 (Network) | IP Address | 192.168.1.100 or 2001:db8::1 | End-to-end logical | No (usually)—preserved end-to-end |
| Layer 4 (Transport) | Port Number | 80, 443, 22 | Process/application identification | No—preserved end-to-end |
Critical concept: MAC addresses are local, not end-to-end
When a packet traverses multiple network segments (through routers), the original MAC addresses do not travel beyond the local segment:
This is fundamentally different from IP addresses, which typically remain constant from source to destination.
Because MAC addresses are only visible within a local network segment, a remote attacker cannot typically see your MAC address directly. However, devices on your same LAN segment (including malicious insiders or compromised machines) can observe all MAC addresses through ARP traffic and promiscuous capture.
Ethernet frame header structure showing MAC address placement:
+------------------+------------------+-----------+------------+------+
| Destination MAC | Source MAC | Type/Len | Payload | FCS |
| (6 bytes) | (6 bytes) | (2 bytes) | (46-1500) | 4 |
+------------------+------------------+-----------+------------+------+
↑ ↑
| |
| +-- Sender's MAC (Layer 2 source)
+-- Recipient's MAC (Layer 2 destination)
The destination MAC appears first in the frame because switches need it immediately to make forwarding decisions, minimizing latency.
The 48-bit MAC address format wasn't arbitrary—it emerged from specific engineering constraints and foresight at Xerox PARC in the 1970s.
The birth of Ethernet addressing:
When Robert Metcalfe and David Boggs developed Ethernet at Xerox PARC (1973-1976), they faced a key question: How do you identify devices on a shared medium where everyone can hear everyone else?
Design requirements considered:
The IEEE standardization (1980s):
When the IEEE standardized Ethernet as 802.3 (and the broader 802 family for other LAN technologies), the 48-bit MAC address format was adopted across all 802 standards:
This uniformity enables interoperability—a WiFi device can communicate seamlessly with wired Ethernet devices through access points because both use the same addressing scheme.
Modern challenges:
While the original design has held up remarkably well, new challenges have emerged:
The industry has responded with MAC randomization (using locally administered addresses) for privacy, and the IEEE has created new OUI assignment tiers for cost efficiency.
This page has provided a comprehensive examination of MAC address structure—the fundamental identifier at the Data Link Layer. Let's consolidate the key points:
Looking ahead:
With the format fundamentals established, the next page explores unicast and broadcast addressing in depth—examining how switches process these different frame types, the performance implications of broadcast traffic, and the mechanisms for efficient frame delivery.
You now understand the complete structure of MAC addresses, from the 48-bit format and OUI/NIC division to the special bits that govern unicast/multicast and universal/local administration. This foundational knowledge is essential for understanding Ethernet switching, network troubleshooting, and Layer 2 security considerations.