# 最小帧长计算

众所周知，[Ethernet](https://zh.wikipedia.org/wiki/%E4%BB%A5%E5%A4%AA%E7%BD%91)的最小帧长是64 Byte。那么这个最小帧长是如何得到的呢？

## 数据碰撞问题

当多个主机挂载在bus型半双工信道上时我们都会存在一个信道争用问题，为解决这个问题我们发明了CSMA/CD协议。

当两个主机同时在bus型半双工信道上发送数据就会产生数据碰撞。数据发送过程如图所示

![碰撞检测](https://i.loli.net/2021/02/02/4SZ3mcQAJtBNjoM.png)

我们假设单向传播时延为 t ，图中发生数据碰撞时，A知道碰撞检测的时间为 2 t1 ，而B检测到碰撞的时间为 2 t2。

t = t1 + t2

最差的情况下，当A即将到达B时，B才发送数据，此时发生碰撞。所以最迟我们检测到数据碰撞的时间是 2t

## 如何确定最小帧长

因为如果我们自身数据全部发完后才检测到数据则数据会被误认为是正常的数据而被接收，所以我们要确保我们还没有发完数据时就检测到碰撞。

因此根据上面的时延计算，我们可以得出 **帧长 / 数据传输速率 >= 2 t**

**最小帧长 = 数据传输速率 x 传播时延 x 2**
