Ethernet – Why was the MTU size for ethernet frames calculated as 1500 bytes

ethernetmtuprotocol-theory

Why was ethernet MTU calculated as 1500 bytes?

What specific calculation was done to arrive at 1500 byte ethernet MTUs, and what factors were considered for that calculation?

Best Answer

The answer is in draft-ietf-isis-ext-eth-01, Sections 3-5. Ethernet uses the same two bytes different ways in the Ethernet II (DIX) and 802.3 encapsulations:

  • Ethernet II uses the first two bytes after the Ethernet source mac-address for a Type
  • 802.3 uses those same two bytes for a Length field.

I'm including an annotated diagram below of each frame type, which shows exactly where the conflicting bytes are in the ethernet header:

  • RFC 894 (commonly known as Ethernet II frames) use these bytes for Type

        +----+----+------+------+-----+
        | DA | SA | Type | Data | FCS |
        +----+----+------+------+-----+
                  ^^^^^^^^
    
        DA      Destination MAC Address (6 bytes)
        SA      Source MAC Address      (6 bytes)
        Type    Protocol Type           (2 bytes: >= 0x0600 or 1536 decimal)  <---
        Data    Protocol Data           (46 - 1500 bytes)
        FCS     Frame Checksum          (4 bytes)
    
  • IEEE 802.3 with 802.2 LLC / SNAP (used by Spanning-Tree, ISIS) use these bytes for Length

        +----+----+------+------+-----+
        | DA | SA | Len  | Data | FCS |
        +----+----+------+------+-----+
                  ^^^^^^^^
    
        DA      Destination MAC Address (6 bytes)
        SA      Source MAC Address      (6 bytes)
        Len     Length of Data field    (2 bytes: <= 0x05DC or 1500 decimal)  <---
        Data    Protocol Data           (46 - 1500 bytes)
        FCS     Frame Checksum          (4 bytes)
    

Both Ethernet II and 802.3 encapsulations must be able to exist on the same link. If IEEE allowed Ethernet payloads to exceed 1536 bytes (0x600 hex), then it would be impossible to distinguish large 802.3 LLC or SNAP frames from Ethernet II frames; ethernet's Type values start at 0x600 hex.

EDIT:

I am including a link to pdf copies of the Ethernet Version 1 spec and Ethernet Version 2 spec, in case anyone is interested...