一丨为什么需要CSMA/CD协议
![48f505b22cf93e031a45343437b0dcf5.png](https://i-blog.csdnimg.cn/blog_migrate/0392251c6a3a9651bab14c477f6ffdab.png)
以太网协调总线上各计算机的工作使用的是CSMA/CD协议,那么我们为什么需要CAMA/CD协议呢?
这要从最早的以太网说起,很久很久以前(也不是特别久),许多计算机都连在一根总线上。
就像这样:
![46de0a10fd55071fe487778dd5f18146.png](https://i-blog.csdnimg.cn/blog_migrate/12a1002cc84969af71979b6645284577.png)
当时认为这样简单又无源的电缆线是最可靠的,当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。这样看起来很方便快捷。然而当多个站点同时发送数据时,信号的相互叠加会导致严重的失真,也就是发生了冲突。
![92078436f2e46244d4628f2fca12a129.png](https://i-blog.csdnimg.cn/blog_migrate/6c5a852df94e880ec54bf73c8ad8433c.png)
为了解决这个问题,聪明的人类想出了一个办法:
![0d0bd0a04fad32482ad3ba4a437a2147.png](https://i-blog.csdnimg.cn/blog_migrate/7c8983ac98d4eba1bd3d2afb0de61908.png)
CSMA/CD的基本原理是:每个节点都共享网络传输信道,在每个站要发送数据之前,都会检测信道是否空闲,如果空闲则发送,否则就等待;在发送出信息后,则对冲突进行检测,当发现冲突时,则取消发送。这样的机制可以节省时间和带宽。
二丨CSMA/CD协议三步骤
1
多点接入:
就是说明这是总线网络,许多计算机以多点接入的方式连接在一根总线上。协议的实质是“载波监听”和“碰撞检测”。
注:如果检查出来了帧有错,则是否重传由高层协议来确定,而数据链路层只是把它当成一个新的帧来传输,仅此而已。
2
载波监听 :
总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线有没有其他计算机发送的数据信号。载波监听实际上就是检测信道。在发送前,每个站不停地检测信道,是为了获得发送权;在发送中检测信道,是为了及时发现有没有其他站和本站发送的碰撞。总之,载波监听是全程都在进行的。
注:发送数据帧时有冲突,就立刻停止发送帧,就立刻停止发送帧,并向总线上发送一串阻塞数据帧通知总线上各点已有冲突发生,以提高总线的利用率。
3
碰撞检测:
在发送前检测信道,是为了获得发送权。如果检测出已经有其他站在发送,则直接就暂时不许发送数据,必须要等到信道变为空闲是才能发送。在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞。这就称为碰撞检测。
电磁波在总线上总是以有的限传播速率的影响
当某个站监听到总线是空闲时,也可能总线并非真正是空闲的。
A 向 B 发出的信息,要经过一定的时间后才能传送到 B。
B 若在 A 发送的信息到达 B 之前发送自己的帧(因为这时 B 的载波监听检测不到 A 所发送的信息),则必然要在某个时间和 A 发送的帧发生碰撞。
碰撞的结果是两个帧都变得无用。
![48a7fd5757f163f14e2c708ee3b7dc6e.png](https://i-blog.csdnimg.cn/blog_migrate/c811c0b57f928c8a2523fb2d2fdbf9f2.png)
电磁波在1km电缆的传播时延约为5μs,(应当记住!!!!)因此,A向B发出的数据,约在5us后才能传送到B。因此,B 若在 A 发送的信息到达 B 之前发送自己的帧(因为这时 B 的载波监听检测不到 A 所发送的信息),则必然要在某个时间和 A 发送的帧发生碰撞。碰撞的结果是两个帧都变得无用。
总线上的单程端到端的传播时延记为τ
发送数据的站希望尽早知道是否发生了碰撞。那么,A发送数据后,最迟要经过多长时间才能知道自己发送的数据和其他站发送的数据有没有发生碰撞????
从图中不难看出,这个时间最多是两倍的总线端到端的传播时延(2τ),或总线的端到端往返传播时延。
但是任意两个之间的传播时延有长有短,按最坏情况设计,取最大的端到端的传播时延,即两个站的距离最大的。
图例说明
在τ=0时,A发送数据。B检测到信道空闲。
在t=τ-δ时(这里τ>δ>0),A发送数据还没到达B时,由于B检测到信道是空闲的(为什么B检测是空闲的?因为电磁波1km的传播时延是5us,换言之就是5us后B才能检测到信道是忙的,5μs之前,B认为是空闲的,于是开始发送数据)。因此B发送数据。
经过时间δ/2后,即在t=τ-δ/2时,A发送的数据和B发送的数据发生了碰撞。这时,A和B都不知道发送了碰撞。
在T=τ时,只有B先检测到了发生碰撞,于是停止发送数据。
在T=2τ- δ时,A才检测到发生了碰撞,也停止发送数据。
然后A和B就随时选择一个时间,推迟,再重新发送。
图例总结
由此可知,每一个站,在发送数据时,在一定时间内,都存在碰撞的可能性。
这一小段时间是不确定的,它取决于另一个发送数据的站到本站的距离
因此以太网不能保证某一时间之内一定能够把自己的数据帧成功地发送出去(因为存在产生碰撞的可能)称为发送的不确定性。
如果希望在以太网上发生碰撞的机会很小,必须使整个以太网的平均通信量远小于以太网的最高数据率。
从图可知,最先发送数据帧的A站,在发送数据帧后至多经过时间2τ就可知道所发送的数据是否遭受了碰撞。
发送数据帧的A站,最多经历2τ时间就可以知道是否遭受碰撞了。我们把这2τ称为争用期,也叫碰撞窗口(collison window)。
经过这个争用期时间,检测没有发生碰撞,就能肯定这次发送的数据不会发生碰撞!!!!!!!
至此,碰撞问题还是没有解决。
专家们就发明了一种算法,
来减小发生碰撞的概率。
这个算法就是:
★二进制指数退避算法★
1 | 确定基本退避时间,一般定为2τ |
2 | 定义参数k,k≤10,k=min[重传次数,10] |
3 | 从整数集合[0,1,2, ……,(2^k-1)]中随机取出一个数,记为r |
4 | 当重传16次不成功,就丢弃该帧,传输失败,报告给高层 |
以上是官方解释,
可能有的小伙伴还是会满头问号
![288de28d1421529ead762ba41dd521ea.png](https://i-blog.csdnimg.cn/blog_migrate/ea62b16563c19d844d733e4b8fb98e29.png)
没关系,我们来看看这个算法过程
01
将冲突发生后的时间划分为长度为2τ的时隙
02
发生第一次冲突后,各个站点等待0或1个时隙再开始重传
03
发生第二次冲突后,各个站点随机地选择等待0,1,2或3个时隙再开始重传
04
第i次冲突后,在0至2^i-1间随机地选择一个等待的时隙数,再开始重传
05
10次冲突后,选择等待的时隙数固定在0至1023间
06
16次冲突后,发送失败,报告上层
![18811381903eb71c328c7f13052a1026.png](https://i-blog.csdnimg.cn/blog_migrate/d267b299720e36cadad44ee723daabb8.png)
最后希望
每位同学能够平安度过这个5月!
![c00dcab72fee83ea6f0145578c777256.png](https://i-blog.csdnimg.cn/blog_migrate/d5aa2b4072ea75f5b61b23b05f888cfd.png)
图文:梁靖宜、黄燕捷、沈海霞、高芷滺
审核:陈平平、费悦