📜  CSMA/CD 退避算法的实现

📅  最后修改于: 2021-09-27 15:16:13             🧑  作者: Mango

先决条件 – CSMA/CD 的回退算法
以太网网络可用于提供一组连接节点对连接节点的物理介质的共享访问。据说这些节点形成了一个碰撞域。当有数据等待发送时,每个传输网卡也会监控自己的传输。如果它观察到冲突,它会立即停止传输,而是传输一个 48 位的阻塞序列。

传输过程的流程图如下所示。

流程图 –回退

发送器将当前帧的传输次数 ( N ) 初始化为零,并开始侦听电缆以查看是否有任何消息位正在传输。如果电缆不空闲,它会等待(延迟)直到电缆空闲。在载波空闲后,它等待更多 9.6 微秒,让节点为即将发生的传输做好准备。这样做是为了避免饥饿。

  • 传输帧:
    它通过电缆传输帧,如果没有发生冲突,则消息发送成功。如果在消息帧将返回给您时发生冲突,那么检测到冲突的每个站点都应该发出干扰信号,以便每个检测到的站点都应该停止发送信号。

  • 干扰信号:
    为干扰信号保留不同类型的频率。发送它是为了阻止所有站点丢弃您已接受的数据包。在看到干扰信号后,发送方中止发送数据包。

    碰撞后,碰撞次数 if 增加( N++ ),如上图所示。

  • 测试次数:
    如果网络繁忙,重传仍可能与某些其他重传帧(或可能是另一个 NIC 首次发送的新帧)发生冲突。因此,测试计数使用变量N计算重传尝试的次数,并尝试重传同一帧最多 15 次。 15 之后,它被中止。

    笔记 :
    N 的值因局域网而异。它依赖于实现。

    如果 N 的值小于 15,则检查 N 的值是否小于 10。如果小于 10,则变量R将设置为与 N 相同,但如果 N 的值大于 10,则R 的值将设置为 10。这给出了R值限制为 10 的想法。

  • 选择随机:
    从( 0 到2 R -1 )的范围中选择一个随机整数。然后评估等待时间 ( K * 51.2 )。这里的 51.2 是给一个站的时隙时间(T slot )。同样,它取决于实现,它因局域网而异,具体取决于带宽是多少。
    之后,再次重复整个过程。

例子 :
假设2个站点A和B同时开始传输数据,那么就会发生冲突。两次碰撞后,N = 2,因此 R = 2,并且集合为 {0, 1, 2, 3} 给出了四分之一的碰撞机会。这对应于从 {0, 51.2, 102.4, 153.6} 微秒中选择的等待。

3次碰撞后,N = 3,因此R = 3,集合为{0, 1, 2, 3, 4, 5, 6, 7},即八分之一的碰撞机会。

但是4次碰撞后,N=4,因此集合变成{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},即16 分之一的碰撞机会。缩放通过乘法执行,称为指数退避。这就是 CSMA/CD 扩展到大量 NIC 的方式——即使可能发生冲突。该算法包括 1024 的阈值。对于 10 次碰撞,即使 N 的值增加到 15,我们也将 R 的值设置为 10,如果碰撞次数超过 15,则中止。原因是随着碰撞次数的增加,需要的网卡数量也越来越多,需要延迟的站点周期也大。由于一组数字 {0, 1, …, 1023} 是一个很大的数字集合,因此进一步增加集合大小的优势很小。

每次传输发生时,单个帧的重传次数限制为 16 次尝试(N = 15)。在此之后,该帧被丢弃。但实际上,除非或直到网络未过载,否则不允许以这种方式丢弃数据包。

解释 :
第一次传输帧时 – 复位:N = 0。

如果发生冲突,第一次重传尝试将使用 N = N + 1 = 0 + 1 = 1,R = 1,节点将从 { 0, 1 } 的范围中选择一个随机数 K。

如果节点在传输同一帧时面临另一次冲突,则 N = N + 1 = 2,R = 2,节点将从 { 0, 1, 2, 3 } 范围中选择一个随机数 K。

等等…