[转载]以太网的最小帧长度64B是如何计算出来的?

简介:
以CSMA/CD作为MAC算法的一类LAN称为以太网。CSMA/CD冲突避免的方法:先听后发、边听边发、随机延迟后重发。一旦发生冲突,必须让每台主机都能检测到。关于最小发送间隙和最小帧长的规定也是为了避免冲突。
考虑如下极限的情况,主机发送的帧很小,而两台冲突主机相距很远。在主机A发送的帧传输到B的前一刻,B开始发送帧。这样,当A的帧到达B时,B检测到冲突,于是发送冲突信号。假如在B的冲突信号传输到A之前,A的帧已经发送完毕,那么A将检测不到冲突而误认为已发送成功。由于信号传播是有时延的,因此检测冲突也需要一定的时间。这也是为什么必须有个最小帧长的限制。
下面介绍一下碰撞槽时间的概念.
假设公共总线媒体长度为S,帧在媒体上的传播速度为0.7C(光速),网络的传输率为R(bps),
帧长为L(bps),Tphy为某站的物理层时延;
则有:碰撞槽时间=2S/0.7C+2Tphy      2S是因为要计算往返传输距离
因为Lmin/R=碰撞槽时间, 意思是Lmin的帧完全传输到对端所需的时间,应该大于对端发过来的指示发生碰撞的帧所需要的时间.
所以:Lmin =(2S/0.7C+2Tphy )×R
Lmin 称为最小帧长度。
碰撞槽时间在以太网中是一个极为重要的参数,有如下特点:
(1)它是检测一次碰撞所需的最长时间。
(2)要求帧长度有个下限。(即最短帧长)
(3)产生碰撞,就会出现帧碎片。
(4)如发生碰撞,要等待一定的时间。t=rT。(T为碰撞槽时间)
按照标准,10Mbps以太网采用中继器时,连接最大长度为2500米,最多经过4个中继器, 介绍一个公式如下:
Lmin/R = 2*S/(0.7*C) + 2*Tphy + 2*n*Tr
Lmin – 最小帧长
R – 网络速率(10M等)
S – 碰撞域   (*2 表示一来一回,划个图就明白了)
C – 标准光速(*0.7表示在双绞线中,用光纤的话别论)
Tphy – 物理层延时(*2 是因为要经过一收一发两个主机的物理层)
Tr – 中继器延时(一般来说,相当于两个物理层的延时
如图所示,
主机 A                中继器 B                主机 B
——————————————————————
|                         物理层                         |
——————————————————————
+—————————+    +————————+
|<——————————S ——————–——>|
根据以太网媒体访问控制机制,A 在发出长度为La的数据流后如果收到B返回的碰撞指示,则停止该帧的发送,并且发32bit的010101…以强化碰撞;并延时t = r*T 这样长的时间;其中T = 1/C,r是一个在(0, 2^k)内的随机数,k = min(n,10) n 为本次发生连续碰撞的次数,如果n过大则上交高层处理。
所以,如果我们规定了某种介质的碰撞域S,就可以通过上面的公式计算出Lmin。反之,如果先定义了Lmin,同样可以定出S。
如 IEEE 802.3 Lmin = 64B;设R = 10M bps Tphy = 15us Tr = 0   则可以计算出 S = 2.3km 
按照标准,10Mbps以太网采用中继器时,连接最大长度为2500米,最多经过4个中继器,因此规定对于10Mbps以太网规定一帧的最小发送时间必须为 51.2μs(电气标准)。51.2μs也就是512位数据在10Mbps以太网速率下的传播时间,常称为512位时。这个时间定义为以太网时隙。512 位时=64字节,因此以太网帧的最小长度为512位时=64字节。
512位时是主机捕获信道的时间。如果某主机发送一个帧的64字节仍无冲突,以后也就不会再发生冲突了,称此主机捕获了信道。由于信道是所有主机共享的,为避免单一主机占用信道时间过长,规定了以太网帧的最大帧长为1500。
100Mbps以太网的时隙仍为512位时,以太网规定一帧的最小发送时间必须为5.12μs。
1000Mbps以太网的时隙增至512字节,即4096位时,4.096μs。
最小MTU应该是传输介质物理特性和链路层协议特性共同决定的。以太网封装下帧最大MTU为1500,这个是标准规定的值,目的也是因为以太网介质是一个带冲突检测的共享的链路。


本文转自jasonccier 51CTO博客,原文链接:http://blog.51cto.com/jasonccie/391047,如需转载请自行联系原作者
相关文章
|
6月前
|
算法
【算法专题突破】滑动窗口- 将 x 减到 0 的最小操作数(12)
【算法专题突破】滑动窗口- 将 x 减到 0 的最小操作数(12)
25 0
|
3月前
|
算法 测试技术 C#
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
|
3月前
|
C++
比特位计数(C++)
比特位计数(C++)
29 0
|
8月前
离散信道的线性分组编码和译码实现
离散信道的线性分组编码和译码实现
43 0
Day13——滑动窗口最大值&&前 K 个高频元素(未解决)
Day13——滑动窗口最大值&&前 K 个高频元素(未解决)
69 0
无序数组如果排序之后相邻数之间的最大差值
无序数组如果排序之后相邻数之间的最大差值
|
Java 编译器
位图法:判断一个数是否在40亿个整数中?
位图法:判断一个数是否在40亿个整数中?
250 0