本文首先介绍以太网的特点,然后介绍 CSMA/CD 协议。

一、以太网的特点

最初的以太网是将许多计算机都连接到一根总线上。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。

👨‍💻 就像下图一样:

广播的方式

🍓 我们首先要明确,以太网采用广播方式发送 数据:

  • 1️⃣ 总线上的每一个工作的计算机都能检测到 B 发送的数据信号。
  • 2️⃣ 由于只有计算机 D 的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。
  • 3️⃣ 在具有广播特性的总线上实现了一对一的通信。

由此我们可以看到,以太网上面实现的是广播的一对一通信。

两个重要措施

🍉 不仅如此,以太网为了通信的方便,采取了两种重要措施:

  • 1️⃣ 采用较为灵活的无连接的工作方式
  • 2️⃣ 以太网发送的数据都使用 曼彻斯特 (Manchester) 编码

下面我们分别来解释一下这两点体现在哪里。


1、采用无连接的工作方式 :

不必先建立连接就可以直接发送数据。

🔥 以太网提供的服务是不可靠的交付,即尽最大努力的交付。

当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。

❓ 你可能会有疑问,什么都不做那数据直接被丢弃了岂不是不完整了。

📌 其实并不是真的什么也不做,只是当出现问题的时候他会向高层汇报,说:喂你好!你给我的外卖被我丢了,请再发一份给我。

于是高层就是重新发一份完整的 帧 给以太网 😁 。

2、以太网发送的数据都使用曼彻斯特编码

至于曼切斯特编码,您可以点击这里 曼切斯特编码 了解相关内容。

这里给出一张图片,带你快速回顾 👇 :

曼彻斯特编码缺点是:它所占的频带宽度比原始的基带信号增加了一倍。从图中也可以看出,原来的的 1 的位置对应了两个电波信号。

二、CSMA/CD 协议

首先说一下这些字母啥意思:

CSMA/CD 含义:载波监听多点接入 / 碰撞检测 (Carrier Sense Multiple Access with Collision Detection) 。

下面逐字解析:

  • 1️⃣ 载波监听:是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
  • 2️⃣ 多点接入:表示许多计算机以多点接入的方式连接在一根总线上。
  • 3️⃣ 碰撞检测:就是计算机边发送数据边检测信道上的信号电压大小。

概念不好理解,我们举个例子。

  • 📗 有一屋子的人在开讨论会,没有会议主持人控制发言。
  • 📘 想发言的随时可发言,不需要举手示意。
  • 📙 但我们还必须有个协议来协调大家的发言。
  • 📔 这就是:如果你听见有人在发言,那么你就必须等别人讲完了才能发言(否则就干扰了别人的发言)。但有时碰巧两个或更多的人同时发言了,那么一旦发现冲突,大家都必须立即停止发言,等听到没有人发言了你再发言。

👐 这就是 CSMA/CD 协议 的作用,协调各位的发言别冲突了。

版权声明:本文为CSDN博主「今天吃香菇酱」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43941364/article/details/105639195
👉 防 spider 用,读者忽略。


每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。

我觉得还是不好理解,不行,再举一个例子!


两辆车,相对而行,有约束如下:

  • 1️⃣ 路面是圆的
  • 2️⃣ 车一旦发出不能停止
  • 3️⃣ 司机只能直视前方

相信大家已经才到结果了,这铁定会相撞!

  • 路上可以有很多车🚗,相当于多点接入
  • 因为刚开始司机直视前方是看不到路上有没有车的,这就相当于载波监听,只不过司机眼镜不太好使,没监听到,而对面已经有车了。
  • 车一旦发出不能停止,就像数据报一样,发出之后就必须一直往前走了。
  • 所以会相撞,然后司机会发出求救信号,即碰撞检测

❓ 那么发生碰撞之后呢?

  • 除了交通事故当然是立即停车了⛔,而且要停到路边上,免得影响别人行驶,浪费道路资源。
  • 所以每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送 🏁 。

下面是碰撞的实际模拟:

A需要单程传播时延的 2 倍的时间,才能检测到与 B 的发送产生了冲突。

在局域网的分析中,常把总线上的单程端到端传播时延记为 τ τ τ

🔥 下面是图中的一些重要的时刻:

  • 👉 在 t 0 t=0 t0 时,A 发送数据。B 检测到信道为空闲。
  • 👉 在 t τ δ t=τ−δ tτδ 时(这里 τ > δ > 0 τ>δ>0 τ>δ>0 ),A 发送的数据还没有到达 B 时,由于 B 检测到信道是空闲的,因此 B 发送数据。
  • 👉 经过时间 δ / 2 δ/2 δ/2 后,即在 t τ δ / 2 t=τ−δ/2 tτδ/2 时,A 发送的数据和 B 发送的数据发生了碰撞。但这时 A 和 B 都不知道发生了碰撞。
  • 👉 在 t τ t=τ tτ 时,B 检测到发生了碰撞,于是停止发送数据。
  • 👉 在 t 2 τ δ t=2τ−δ t2τδ 时,A 也检测到发生了碰撞,因而也停止发送数据。
  • 👉 A 和 B 发送数据均失败,它们都要推迟一段时间再重新发送。

🚩 最先发送数据帧的 A 站,在发送数据帧后至多经过时间 2 τ 2τ 就可知道所发送的数据帧是否遭受了碰撞。这就是 δ 0 δ→0 δ0 的情况。因此以太网的端到端往返时间 2 τ 2τ 称为争用期(contention period),它是一个很重要的参数。争用期又称为碰撞窗口(collision window)。这是因为一个站在发送完数据后,只有通过争用期的考验,即经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。这时,就可以放心把这一帧数据顺利发送完毕 🏁 。

就好像一辆火车 🚆 一样,如果火车头没有和对面来的火车相撞的话,那么无论这个火车有多长他都能安全的通过,因为对面会不断的进行信道检测,检测到有火车他是不会发车的。

下面介绍一个重要的算法.

三、二进制指数类型退避算法

❓ 还记得我们之前介绍说,发生了碰撞之后要等一会再发送吗?

那么到底要等多长时间呢?现在来解释一下。

✅ 这里使用了,二进制指数类型退避算法 (truncated binary exponential type)。

不要被名字吓住了,其实很简单的。

  • 1️⃣ 基本退避时间取为争用期 2 τ 2τ
  • 2️⃣ 从整数集合 [ 0 , 1 , , ( 2 k 1 ) ] [0, 1, … , (2^k-1)] [0,1,,(2k1)] 中随机地取出一个数,记为 r r r。重传所需的时延就是 r r r 倍的基本退避时间。
  • 3️⃣ 参数 k k k 按下面的公式计算: k = M i n [ , 10 ] k=Min[重传次数, 10] k=Min[,10]
  • 4️⃣ 当 k < 10 k<10 k<10 时,参数 k k k 等于重传次数。
  • 5️⃣ 当重传达 16 16 16 次仍不能成功时即丢弃该帧,并向高层报告。

争用期的长度

  • 10 M b i t / s 10 Mbit/s 10Mbit/s 以太网取 51.2 μ s 51.2 \mu s 51.2μs 为争用期的长度。
  • 对于 10 M b i t / s 10 Mbit/s 10Mbit/s 以太网,在争用期内可发送 512 b i t 512 bit 512bit,即 64 64 64 字节。

这意味着:以太网在发送数据时,若前 64 字节没有发生冲突,则后续的数据就不会发生冲突。

由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节。

以太网规定了最短有效帧长为 64 字节,所以凡是长度小于 64 字节的帧都是由于冲突而异常中止的无效帧。

四、总结

总结一下 C S M A / C D CSMA/CD CSMA/CD 协议的要点:

  • 1️⃣ 准备发送。但在发送之前,必须先检测信道。
  • 2️⃣ 检测信道。若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在 96 96 96 比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。
  • 3️⃣ 检查碰撞。在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:
    • ✅ 发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到 1️⃣。
    • ❎ 发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待 r r r 512 512 512 比特时间后,返回到步骤 2️⃣,继续检测信道。但若重传达 16 16 16 次仍不能成功,则停止重传而向上报错。