码迷,mamicode.com
首页 > 其他好文 > 详细

搞懂CSMA/CD,你就明白为什么以太网最小帧是64字节。

时间:2016-07-05 06:28:49      阅读:475      评论:0      收藏:0      [点我收藏+]

标签:网络攻城狮阿龙;csma/cd

每出现一个新的东西,新的技术,

小编就经常反问自己的一句话就是:为什么会诞生它(CSMA/CD)呢?why?

技术分享

每个东西的产生或发明都是有它的存在的原因或背景的。


我们先来看看最初的以太网的构思吧!


把相距有一定距离的一些电脑连接起来,实现计算机之间互相通信就可以了。


最初都是把这些计算机连接在一根网线上,这种方式实现起来简单又可靠。


技术分享

总线的特点是:当一台计算机发送数据时,总线上的所有计算机都能监听到这个数据。这也是我们常说的:广播通信。但现实中,我们并不总是需要一对多通信。所以为了实现一对一通信,专家们就使用了一个叫做适配器的东西,也是我们说的网卡,在上面进行烧录不同的MAC地址进行区分。计算机在发送时,就在数据帧中的“目的Mac”字段填上接收站的地址即可。好比,现实中,我们寄快递一样,写上收件人的地址一样。


通信世界中里的“收件人地址(目的MAC地址):

技术分享


网卡:

技术分享



规则:仅当数据帧中的目的MAC地址与接收站的网卡烧录的mac地址一致时,才会接收。否则就丢弃。


总线工作有一个特点:总线上只要有一个台计算机在发送数据,总线的传输资源就被占用了。所以,在同一个时间内,只能允许一台计算机来发送数据,否则各个计算机之间就会互相干扰,导致数据不可用。

阿龙给大家举个场景吧!这样,更容易理解:

好比一条宽度有限、并且同一时间内只允许一个方向行驶的公路,但又好多个入口或出口,在每个入口有汽车想驶入。

技术分享

同一时间内,一个方向上只能行驶通行一辆车,多了吧!就会发生碰撞事故啦!

技术分享

那么这时,就需要一种机制来进行协调通信。就像,路上我们经常看到的红绿灯啊、警察叔叔在指挥交通一样,大家都遵循这个规则、手势,这样交通才能有序通行。通信的世界里,也是一样的,以太网的专业术语叫做:CSMA/CD

(Carrier Sense Multiple Access/Collision Detect),即载波监听多点接入访问/冲突检测机制。


理解CSMA/CD,主要有三个方面:

1、多点接入:

2、载波监听

3、碰撞检测。


这里值得一提的是,CSMA/CD 使用场景是在一个站不能同时发送数据和接收数据,即适用场景为 半双工通信。


多点接入:就是说这是总线型网络,许多计算机接在总线上。


载波监听:发送前先监听。就是每个计算机在发送数据前,先要检测一下总线上是否有其他站在发送数据。如果有,则暂时不发送数据,等待信道变为空闲时在发送。你可以理解为,汽车要驶入路口时,先按一下喇叭,看看道路内有没有其他车辆。如果有人回应了,那表明狭窄道路上有车辆,暂时不用驶入。


碰撞检测:边发送边监听。网卡边发送数据边监听信道上的信号电压的变化情况,以此来判断自己在发送数据时是否有其人正好也在发送数据。如果确实发送了,总线上的信号电压变化幅度是会增加的(互相叠加),这是总线就认为产生了碰撞。传输的信号会严重失真,失真就是数字信号无法还原成模拟信号(语音、视频)。网卡监听到碰撞了,就会立即停止发送,这样可以节省网络资源的浪费,然后等一会儿(等一个随机时间)再发送。



这时,你可能会有疑问,为什么发送前都已经载波监听了,空闲时才发送,怎么会出现碰撞呢?


这是因为电磁波在总线传播是以有限的速率传播的。可能A机现在检测是空闲的,B机也同时检测是空闲的,于是他们同时发送数据,然后的然后就发送碰撞了。

这里需要先记住的是:电磁波在1km电缆的传播时延约为5us。


在局域网分析时,我们经常把单程端到端的传播时间记为 τ

技术分享


A发送数据,须经过多久才能检测到发送了碰撞了?


从图中,不难看出,最坏的情况,最多需要经历两倍的“单程端到端的传播时延(时间)=2τ”即,传播端到端的往返时延。


技术分享

T=0时,A发送数据。B检测到信道为空闲。


T=τ时(这里τ>δ>0),A发送数据还没到达B时,由于B检测到信道是空闲的(为什么B检测是空闲的?前面我们说了,电磁波1km的传播时延是5us,换言之就是5us后B才能检测到信道是忙的,5us之前,B认为是空闲的,于是开始发送数据)。因此B发送数据。


经过时间δ/2后,即在T=τ-δ时,A发送的数据和B发送的数据发生了碰撞。这时,A和B都不知道发送了碰撞。


T=τ时,只有B先检测到了发生碰撞,于是停止发送数据。


在T=2τ- δ时,A才检测到发生了碰撞,也停止发送数据。


然后A和B就随时选择一个时间,推迟,再重新发送。


由此可知,每一个站,在发送数据时,在一定时间内,都存在碰撞的可能性。


发送数据帧的A站,最多经历2τ时间就可以知道是否遭受碰撞了。我们把这2τ

称为争用期,也叫碰撞窗口。

经过这个争用期时间,检测没有发生碰撞,就能肯定这次发送的数据不会发生碰撞。


至此,碰撞问题还是没有解决。专家们就发明了一种算法,来减小发生碰撞的概率,这个算法就是:退避算法


退避,意思就是推迟,发送碰撞了,利用一种算法,来选择推迟多久才发送数据。



退避算法的思想如下:

1、确定基本退避时间。就是争用期2τ。以太网把争用期2τ定为51.2us 。(至于为什么是这个值,就没必要去纠结了,反正当时专家这么定,你就这么记咯!)

对于10Mb/s以太网,在争用期内可发送512bit,即64字节


512bit怎么来的? 就是速率乘以时间,就等于数据量。 

10Mb/s*51.2us=[10*10^6b/s] * [51.2^(-6)s]=512bit 


2、从离散的整数集合随机取出一个数[0,1,2,3……,(2^k-1)]  ,取出来的数,记为r。重传推迟的时间就是r倍的争用期。T=r*2τ

上面k的参数,按照这个计算k=Min[重传次数,10]。  可见,当重传次数不超过10时,参数k=重传次数。如果重传次数超过10时,k就不再增加了,一直等于10。


3、当重传达16次,仍然会不能成功时,就丢弃该帧,向高层报告。说明发送的人太多了,导致连续发送碰撞。


举例:

在第一次重传时,k=1,随机数r从整数{0,1}中选一个数,  可得重传的推迟时间要么为0,要么为1*2τ, 这两个选择一个。


如果再次发送,即第二次重传,k=2,代入[0,1,2,3……,(2^k-1)] ,随机数r从整数{0,1,2,3}选一个数,可得重传推迟时间是0,2τ,4τ,6τ 这4个值随机选择一个。


同理,再次发送碰撞,以此类推。


结论

到这里,我们就可以看出,以太网在发送数据时,如果帧的前64字节没有发送冲突,那么后续的数据就不会发送冲突。换句话说,就是如果发送冲突,就一定是在发送的前64字节之内。因为检测到冲突就停止发送,这时已经发送出去的数据一定小于64字节。

因此以太网规定了最短有效帧长为64字节,只要长度小于64字节的帧都是由于冲突而异常中止的无效帧。收到这种无效帧就立即丢弃。


技术分享


本文出自 “网络攻城狮阿龙” 博客,转载请与作者联系!

搞懂CSMA/CD,你就明白为什么以太网最小帧是64字节。

标签:网络攻城狮阿龙;csma/cd

原文地址:http://engineeralong.blog.51cto.com/6643425/1795774

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!