概述
网线上有计算机发送数据时,网线的传输资源就被占用了。但是这个跟计算机内部总线被占用不同,总线的占用有cpu做调节,所以不会争抢,但是网线是没有cpu来调节的,所以连接在网线上的各个主机必须要遵循一个协议,来避免网线的抢占。
用一个形象的比喻这个协议就是,开会发言。会议上的人都保持一个谦逊的态度,每当发言的时候,听到别人也发言了,那么就马上停止发言,等一会,再发言。
这个CSMA/CD就是这样一个协议,每台主机都检测着网线是否被占用,一旦检测到别的主机的信号,就意识到这个网线被别的主机占用了,就立即放弃发送信号。
其中有几个要点:
首先我们要明白,计算机信息传输是有时间的,就跟人讲话一样,即使声音传播相当快,也会有时间的影响。(我想到了网上视频会议,当把会议网络延迟达到一个惊人的高时,应该就很好体会这个协议的意义了吧。)
假设数据传输时间,即一个比特脉冲从主机A发送出来,再到达B的所用的时间为t。那么如果主机A发送了一个比特,经过t后到达B。
如果0-t的时间里,没有别的主机发送比特,那么就没什么问题,所有主机在了t时刻接受到了主机A的比特,就会根据协议,谦让的不再发送消息。
但是如果有发送过比特,那么两个脉冲就会撞在一起,结果的话,脉冲的信息就是乱的,不可用了。
脉冲撞在了一起,主机需要做的事情是重新发送。但是什么时候重新发送呢,会根据协议规定的之后的一个随机时间再重新发送。
但是碰撞发生的情况下,主机B在0-t(A的第一个比特发出 ~ 到达)的任何时间都有可能发送比特,比特传输了p的时间,那么主机A在p ~ t+p(B在A发第一个比特时就发了第一个比特的情况下这个比特到达的时刻 ~ B在A发第一个比特到达前发送了一个比特的情况下这个比特到达的时刻)的时间里都可能感受到这个B发送的比特。
或许主机A在p ~ t+p这个时间段内已经完成了消息的所有比特的传输,总共花了k的时间,然后这个主机B发送的比特才到来。这个时候主机A就蒙了,这个主机B的比特,是t+k (主机A最后一个比特到达主机b)之后(这之后B发的比特是没有跟A碰撞)发出来的,还是之前(发生碰撞)发出来的。所以我们一定要保证,这个没碰撞的比特最早到达A的时间是t+k+p,在之前到达的比特一定是和A发生了碰撞的,之后到达的就不是碰撞的了。那么实际上主机A在0~t+k+p的时间里没有检测到有主机B的信号,就是不会发生碰撞的了。
但是协议做的比较简单,因为大多数时候,t和p是相等的,主机B在t ~ t+k这段时间里也不可能发比特,所以我们只要检测0 ~ 2t的时间有没有主机B发来的比特就可以了。
然而为了更加方便一些,我们不如直接将每一帧做的需要发送2t以上的时间的大小,那么一旦收到的大小只需要2t以下的时间发送的帧,不就直接可以判错了嘛。而大小在以上的就一定正确,极大的节省了判断难度,也不用等待到2t的时间,来检测是否发生碰撞。
所以以太网协议干脆规定,最小帧为64字节,最大端到端的时延小于25.6us。这样就保证了最小帧大小必然大于等于两倍时延所能发送的大小了。
最后
以上就是怕孤单音响为你收集整理的计算机网络 CSMA/CD载波监听多点接入/碰撞检测协议的全部内容,希望文章能够帮你解决计算机网络 CSMA/CD载波监听多点接入/碰撞检测协议所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复