CSMA/CD 以太网中的冲突

Bar*_*ran 4 networking ethernet collision-detection

我对 CSMA/CD 以太网中的冲突感到困惑。什么时候会发送堵塞信号?为什么会发送堵塞信号?如果两个同时的数据包传输相互干扰,两个传输节点可以知道电压过大,所以他们可以结束传输,然后传输一个 32 位的阻塞信号,但为什么呢?有人能把所有的事件按时间顺序一一写出来吗?

Spi*_*iff 11

首先,请注意现代交换以太网 LAN 不再是 CSMA/CD。CSMA/CD 是一种应用于使用集线器而非交换机的 10mbit/sec 和 100mbit/sec 以太网的技术。老实说,周围从来没有很多 100BASE-TX 集线器;那个时候大家都去换了。千兆以太网 (1000BASE-T) 规范需要交换机;没有 GigE 集线器这样的东西。

在现代交换以太网上,您不再拥有共享介质。当您插入交换机时,“冲突域”仅存在于您和交换机端口之间。如果您处于全双工模式(交换机几乎总是如此),那么您根本就没有任何冲突的可能性。如果您不能发生碰撞,您将永远不会检测到碰撞,因此您将永远没有理由发送堵塞信号。

所以回到集线器时代(和共享电缆,如thinnet/cheapernet/10BASE-2 coax 和thicknet 10BASE-5),它是如何工作的:

想象一下,您有一个大型 10BASE-T LAN,其中有许多集线器和最大长度的电缆线路,最大限度地提高了 LAN 上任意两个设备之间最多 4 个中继器(集线器)的“中继器规则”。由于集线器上的信号传播延迟,从主机 A 传输的信号到达网络上最远的主机(主机 B)可能需要 IEEE 规范最大 232 位时间。

现在想象一下,主机 A 开始传输一个帧,不幸的是,位于网络另一端的主机 B,距离 232 位时间,在主机 A 开始传输后仅 231 位时间开始传输帧。由于网络上的传播延迟,当主机 B 发送其前导码的第一个比特时,主机 B 不知道主机 A 的传输中已经有 231 比特。现在,主机 B 将在主机 B 传输的第一个(比如说)32 位内检测到此冲突,这可能比主机 A 检测到它快大约 232 到 264 位时间。如果主机 B 碰巧在传输的第一个比特上检测到它,并且在检测到这个冲突的那一刻就停止传输,那么它可能没有在介质上停留足够长的时间让主机 A 也检测到它并意识到发生了冲突(你可以' t 保证接收器会在冲突的第一个比特上检测到冲突)。这将意味着主机 A 不知道执行正确的冲突处理程序。因此,主机 B 不是停止传输,而是传输 Jam 信号,使其在介质上停留足够长的时间,以确保主机 A 意识到发生了冲突。

这也是以太网帧的最小长度为 64 字节的原因。这保证了主机 A 在介质上停留的时间足够长,以便可以在网络的另一端一直检测到冲突,并且来自主机 B 的 Jam 信号可以一路返回网络,以便主机当 Jam 信号通过时,A 仍在介质上,因此它能够意识到有人与它的传输发生了碰撞。

  • @Ashwin 交换机必须缓冲它同时接收的两个帧之一(在两个单独的端口上,因此不会发生冲突),然后将一个在另一个之前发送到目标主机。 (2认同)