Why Ethernet Mandates a 64-Byte Minimum Packet: CSMA/CD Explained
Have you ever wondered why Ethernet (IEEE 802.3) forbids packets smaller than 64 bytes?
If you try to transmit a 20-byte payload, your network interface card (NIC) forcibly injects padding bytes to reach that exact 64-byte threshold.
This is not arbitrary protocol overhead—it is a physical law required by CSMA/CD (Carrier Sense Multiple Access with Collision Detection).
⚡ The Worst-Case Collision Dilemma
Over a shared copper cable, electromagnetic signals travel at a finite propagation speed: roughly 2 × 10⁸ m/s (about two-thirds the speed of light).
Let the propagation time between the two farthest hosts (A and B) be Tₚ:
Time t = 0: [ Host A ] ────(Signal in Transit ➔)─────── [ Host B ]
Time t = Tp - ε: [ Host A ] ──────────────────────(⚡ Collision!) [ Host B ]
Time t = 2 * Tp: [ Host A ] ◄──(Collision Wave Returns)───── [ Host B ]
- t = 0: Host A senses the cable is idle and begins transmitting.
- t = Tₚ - ε: A fraction of a microsecond before A's signal reaches Host B, Host B checks the cable. Because A's signal hasn't arrived yet, B senses an idle line and starts transmitting!
- Collision: Signals collide near Host B.
- Collision Echo: The resulting abnormal voltage spike propagates backward across the cable toward Host A.
- t = 2 × Tₚ: The collision echo finally reaches Host A.
THE GOLDEN INVARIANT:
Host A can only detect a collision if it is still actively transmitting bits when the collision echo returns! If A finished sending early, it cleared its transmit buffer and assumed total success.
📐 Deriving the 64-Byte Requirement
To guarantee that transmission time Tₜ is long enough to detect the worst-case collision echo:
Transmission Time (Tt) >= Round-Trip Time (2 * Tp)
Since Tt = Frame_Length (L) / Bandwidth (B):
L / B >= 2 * Tp ==> L_min = 2 * Tp * B
In standard 10 Mbps Ethernet:
- Round-Trip Time (
2 × Tₚ) over a maximum 2.5 km network =51.2 μs. -
L_min = 51.2 μs × 10,000,000 bits/s = 512 bits = 64 bytes!
🛠️ Truncated Binary Exponential Backoff
When a collision occurs, both hosts jam the wire and back off using:
# After n collisions (up to 10):
k = random.randint(0, 2**min(n, 10) - 1)
wait_time = k * 51.2 # microseconds (slot time)
Doubling the slot range on every collision prevents immediate re-collisions.
🚀 Experience the Live Space-Time Collision Simulator
Want to see electromagnetic propagation delay, collision waves, and exponential backoff animated live?
👉 Test the interactive CSMA/CD space-time simulator on Binary Dose.
Top comments (0)