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

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

小编就经常反问自己的一句话就是:为什么会诞生它(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字节的帧都是由于冲突而异常中止的无效帧。收到这种无效帧就立即丢弃。

时间: 2024-10-21 13:19:20

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

CSMA/CD

CSMA/CD(Carrier Sense Multiple Access with Collision Detection)即带冲突检测的载波监听多路访问技术.在传统的共享以太网中,所有的节点共享传输介质.如何保证传输介质有序.高效地为许多节点提供传输服务,就是以太网的介质访问控制协议要解决的问题. 1基础篇 CSMA/CD是一种争用型的介质访问控制协议.它起源于美国夏威夷大学开发的ALOHA网所采用的争用型协议,并进行了改进,使之具有比ALOHA协议更高的介质利用率.主要应用于现场总线Eth

2016.6.20 计算机网络复习要点第三章之CSMA/CD协议

1.最早的以太网是将许多计算机都连接到一根总线上: (1)总线的特点是:当一台计算机发送数据时,总线上的所有计算机都检测到这个数据,这种就是广播通信方式: (2)为了实现在总线上的一对一通信,可以使每一台计算机的适配器拥有一个与其他适配器都不同的地址,当数据帧中的目的地址与适配器ROM中存放的硬件地址一致时,该适配器才能接收到这个数据帧: (3)人们通常把局域网上的计算机称为“主机”,“工作站”,“站点”或“站” 2.以太网为了通信方便采取的措施: (1)采用较为灵活的无连接的工作方式,即不必先

分分搞懂c#中的委托

分分搞懂c#中的委托: 不说废话,不来虚的概念,不管代码是否有意义,看我的优化之路,你会理解委托了: 源代码1 public class test { //我们不管代码是否有意义,我们直接看代码重构和一步步优化的过程 int flage = 1; public void show(int a) { if (flage == 1) { do1(a); } else if (flage == 2) { do2(a); } else if (flage == 3) { do3(a); } else i

【白话篇】10分钟搞懂字符编码

如上图所示为常见的,让人看了头晕的 几个种编码. 看懂下面几条规则,你就明白他们的关系了. [1]有些人说,GBK严格来说是字符集,而utf-8则是编码,这种区分已经相当模糊了,他们都是"字节到字符的映射关系",所以下面都用编码来说吧. [2] ISO-8859-1 这种编码是单字节编码,衍生于ASCII,表示范围0-255,只要按照ASCII的规则设计的编码,不管是几字节的,都可以和ISO-8859-1兼容. [3]比如说,GBK编码(双字节)能转化成ISO-8859-1编码,是因为

搞懂offsetY、offsetTop、scrollTop、offsetHeight、scrollHeight

先搞offsetTop,最难懂的就是它了 官方解释:返回当前元素的上边界到它的包含元素的上边界的偏移量,以像素为单位.这真TM坑爹啊!有木有!经过仔细研究查找得出结论:offsetTop是相对于离它最近的具有绝对或相对定位的父级元素的距离,有点绕口是不是?别急,咱慢慢剥开它...首先一定要明白offsetTop是一个相对值,那它到底是相对于谁的值呢,现在的女明星不都流行找干爹嘛,offsetTop也给自己找了一个,别人的要求是要有钱有权,而它的要求是要有position(只能是relative和

搞懂树状数组(转)

ps:转的,这篇写的不错. 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结.第一个接触树状数组还是两年前,用什么语言来形容当时的感觉呢?……太神奇了!真的,无法表达出那种感觉,她是那么的优雅,10行不到的代码,却把事情干的如此出色!没有了解她原理的前提下即使把代码倒背如流也理解不了!其中,我就是一直没搞懂地在使用她.时隔两年,又无意遇到了她,可能是两年的代码经验的积累,有了些新的认识,可以自信的说理解了吧!下面我争取用自己的方式让更多人明白她,而不是背诵她.为了更方便的说明,文

彻底搞懂最短路算法

转载自:戳 彻底弄懂最短路径问题 只想说:温故而知新,可以为师矣.我大二的<数据结构>是由申老师讲的,那时候不怎么明白,估计太理论化了(ps:或许是因为我睡觉了):今天把老王的2011年课件又看了一遍,给大二的孩子们又讲了一遍,随手谷歌了N多资料,算是彻底搞懂了最短路径问题.请读者尽情享用…… 我坚信:没有不好的学生,只有垃圾的教育.不过没有人理所当然的对你好,所以要学会感恩. 一.问题引入 问题:从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径——最短路径.解决

搞懂分布式技术7:负载均衡概念与主流方案

搞懂分布式技术7:负载均衡概念与主流方案 负载均衡的原理 原创: 刘欣 码农翻身 4月23日 这是1998年一个普通的上午. 一上班,老板就把张大胖叫进了办公室,一边舒服地喝茶一边发难:"大胖啊,我们公司开发的这个网站,现在怎么越来越慢了? " 还好张大胖也注意到了这个问题,他早有准备,一脸无奈地说: "唉,我昨天检查了一下系统,现在的访问量已经越来越大了,无论是CPU,还是硬盘.内存都不堪重负了,高峰期的响应速度越来越慢." 顿了一下,他试探地问道:"老

搞懂分布式技术10:LVS实现负载均衡的原理与实践

搞懂分布式技术10:LVS实现负载均衡的原理与实践 浅析负载均衡及LVS实现 原创: fireflyc 写程序的康德 2017-09-19 负载均衡 负载均衡(Load Balance,缩写LB)是一种网络技术,它在多个备选资源中做资源分配,以达到选择最优.这里有三个关键字: 网络技术,LB要解决的问题本质上是网络的问题,所以它实际上就是通过修改数据包中MAC地址.IP地址字段来实现数据包的"中转": 资源,这里的资源不仅仅是计算机也可以是交换机.存储设备等: 最优,它则是针对业务而言