Why are ethernet jumbo frames 9000 bytes?

In a marathon of Bryan Cantrill interviews, Bryan wondered out loud why “jumbo” ethernet frames are 9000 bytes. These days, that’s not a particularly jumbo number, and it’s also a bizarre number. Why not a power of two, or at least a nice round 10000?

Thankfully, Wikipedia has a link to source material. It was a discussion between Internet2 and the US federal government, and they settled on 9k for 4-ish reasons.

First, they wanted to send 8192 byte TCP frames, so “something a bit larger than 8k” was desirable, to account for the various protocol headers. The memo doesn’t specify specifically why they wanted 8k payloads, but one possible reason is that the default NFSv2 packet size is 8192 bytes. There’s certainly a performance incentive to not fragment NFS traffic.

Second, at the time of this discussion, it turns out most routers could handle 9k ethernet frames. However, above that number the universe of working vendors started to drop off, so 9k was a sensible upper bound for rapid adoption.

Third, it was thought that PMTU discovery would work better if everyone agreed on common MTU values, so there was a desire to standardize on something, rather than just encourage people to max out the MTU capabilities of their current hardware. In hindsight, it’s not clear to me that standardizing MTU sizes did help PMTU discovery (i.e. it’s still broken for most people with a PPPoE hop in their network path), but I don’t have more context on the thought process there.

And finally: “9000 is an easy number to remember.” Presumably 10000 would have been even easier, but that ran afoul of the previous point about what existing network hardware supported.

And so, Internet2 and the US government agreed on a 9k MTU, and it became a mandatory requirement for equipment sold to the government. So, all vendors made sure they could do 9k jumbo frames to be able to get the juicy contracts.

Since then, it seems that nobody’s seriously pushed for a standardized increase. Perhaps understandable given how hilariously little adoption there’s been of jumbo frames on the wider internet. We’re still sending mostly 1500 bytes, and that seems to be going mostly fine, so why bother?

Still, it’s an interesting detour into a niche part of our industry’s history. Turns out the answer to “why 9000” is a bunch of random situational factors, and “9000 sounds nice.” It’s the kind of random “eh, that’s probably fine” decision that turns seamlessly into the unchanging bedrock of computing. Just like how /usr only exists because early Unix couldn’t fit on a single hard drive, so a second one got mounted at /usr.

And of course, IPv6 supports 65k packets out of the box, and already has an extension in case you want to send more than 65k per packet. Meanwhile, the internet will be over here, still sending 1500 bytes at a time.