我对 CSMA/CD 以太网中的冲突感到困惑。什么时候会发送拥塞信号?为什么发送干扰信号吗?如果两个同时进行的数据包传输相互干扰,则两个传输节点可以知道电压过大,因此它们可以结束传输,然后发送 32 位干扰信号,但为什么呢?有人可以按时间顺序逐一写下所有事件吗?
答案1
首先,请注意,现代交换式以太网 LAN 不再是 CSMA/CD。CSMA/CD 是一种适用于使用集线器而非交换机的 10mbit/sec 和 100mbit/sec 以太网的技术。老实说,当时并没有太多 100BASE-TX 集线器;那时每个人都使用交换机。千兆以太网 (1000BASE-T) 规范需要交换机;没有千兆以太网集线器这样的东西。
在现代交换式以太网上,您不再拥有共享介质。当您插入交换机时,“冲突域”仅在您和交换机端口之间。如果您处于全双工模式(交换机几乎总是如此),那么您根本不可能发生冲突。如果您无法发生冲突,您将永远无法检测到冲突,因此您永远没有理由发送干扰信号。
因此,回顾集线器(以及共享电缆,例如细网/廉价网/10BASE-2同轴电缆和粗网10BASE-5)的时代,它的工作方式如下:
假设您有一个大型 10BASE-T LAN,其中有大量集线器和最大长度的电缆,最大程度地满足了“中继器规则”,即 LAN 上任何两个设备之间最多有 4 个中继器(集线器)。由于信号在集线器之间的传播延迟,从主机 A 传输的信号到达网络上最远的主机(主机 B)可能需要 IEEE 规范规定的最大值 232 位时间。
现在假设主机 A 开始传输帧,而不幸的是,在网络另一端,相距 232 位时间的主机 B 在主机 A 开始传输后仅 231 位时间就开始传输帧。由于网络传播延迟,当主机 B 发送其前导码的第一位时,主机 B 并不知道主机 A 已经传输了 231 位。现在,主机 B 将在主机 B 传输的前 32 位(比如说)内检测到此冲突,这可能比主机 A 检测到它的时间早 232 到 264 位时间。如果主机 B 碰巧在传输的第一位检测到它,并在检测到此冲突的那一刻停止传输,那么它可能没有在介质上停留足够长的时间,主机 A 也来不及检测到它并意识到发生了冲突(您不能保证接收器会在冲突的第一个位上检测到冲突)。这意味着主机 A 不知道要执行正确的冲突处理程序。因此,主机 B 不会停止传输,而是传输 Jam 信号,以便该信号在介质上停留足够长的时间,以确保主机 A 意识到发生了冲突。
这也是以太网帧最小长度为 64 字节的原因。这保证了主机 A 在介质上停留足够长的时间,以便网络另一端可以检测到冲突,并且来自主机 B 的 Jam 信号可以一路穿过网络返回,这样当 Jam 信号通过时,主机 A 仍然在介质上,因此它能够意识到有人与其传输发生了冲突。