找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5155

积分

0

好友

703

主题
发表于 前天 04:22 | 查看: 16| 回复: 0

大家好,我是bug菌~

最近跟同事聊到为什么现在的以太网还是够不上实时以太网呢?其中有个同事说了下主要是因为载波监听机制,导致发送的以太网数据存在碰撞,于是我又想了想,不对呀,现在不都是用交换机吗?交换机都是直接转发的,也没有什么碰撞呀,于是探究了一下。

1. 载波监听那些事儿

首先我们来聊一下什么是网络中的载波监听机制,其实全称也叫 “载波监听多路访问/冲突检测” ,别说真的挺长的,英文缩写为: CSMA/CD

CSMA/CD 其实是以太网的核心媒体访问控制协议,它就是用来解决: 当多个设备共享同一根线缆(或集线器)时,如何协调发送,以及发生冲突后如何恢复。

它的工作流程总结下来就是: 先听后说,边听边说;冲突则停,随机重传。

CSMA/CD载波监听多路访问冲突检测流程示意图

先载波监听,检测线路上是否有其他设备在发送,空闲了才发送;由于存在发送延时和信号传播存在延迟,两台设备可能几乎同时开始发送,导致信号在线路上叠加、破坏,这就是冲突。冲突发生后,等待一段随机时间后重新尝试发送,当然这中间还有一些退避算法,避免反复碰撞死锁。

网络节点A与B同时监听空闲发生信号冲突示意图

载波监听只能防止自己撞别人,不能防止别人撞自己。 这就是著名的 “暴露站问题” :你听着没声音开始发,但如果远处另一个节点也在同一时刻听着没声音开始发,信号传播到中间时还是会撞上。

2. 交换机如何消灭冲突

其实 CSMA/CD 主要在集线器的半双工时代做贡献。当我们进入廉价的交换机时代,交换机从两个层面优化了这个过程:

首先,交换机每个端口都是一个独立的冲突域。不像集线器会把信号复制给所有端口,交换机解析帧里的目标 MAC 地址,只向对应端口转发。这就好比把“大群对讲机”拆成了“交换机居中,每个人跟交换机之间是一根专线”。端口 A 给端口 B 发数据时,端口 C 和 D 完全不受影响,多个端口对可以同时通信,互不干扰。

集线器Hub与交换机Switch网络拓扑及冲突域对比图

其次,交换机端口通常工作在全双工模式,而且有缓存。物理上收发分开:网线里的发送线对和接收线对是独立的,设备可以在发的同时也收,不需要像对讲机那样“按下去就聋了”。缓存代替冲突解决:如果多个端口同时要向同一个目标端口发数据,交换机会把后来的帧暂时缓存起来,排队转发。数据不会在介质上撞成一团,只是多等一会儿。

于是,既没有信号碰撞,也不需要在发之前侦听信道有没有人,更不用“发中检测冲突”。于是,CSMA/CD 的两大任务—— “先听后说”和“碰撞检测” ——全都不需要了。协议虽然还在,但实际物理层上已经不用它了。

可能你会问,如果我不用交换机,两根网线直连会不会触发 CSMA/CD?在现代网卡直连即使没有交换机的情况下,通常不会触发载波监听(CSMA/CD),因为链路会工作在全双工模式。载波监听只在半双工模式下才会激活。 而且全双工交换式以太网中网卡不再需要靠载波监听来避免冲突,但载波监听电路仍然工作,解决的是“物理链路是否可用”,而不是冲突。

3. 那为什么还不是实时网络?

既然交换机把路径都拉顺了,为什么现在的以太网还是不能成为实时以太网呢?

交换机的本质是“存储-转发”,遇到多个入口同时想往同一个出口发帧,就会排队。就是这一排队,实时性就没了。

比如说你在交换机端口1,想给端口8发一个控制指令帧,只有一帧,非常小,你觉的应该很快就能够到达目的地。可是刚巧,与此同时,端口2、端口3正在往端口8发满带宽的巨型文件——它们先到达输出队列。

紧急控制指令帧被巨型文件流阻塞排队示意图

你的小指令帧就只能乖乖排在后面,等前面的帧发完。而这个等待时间,取决于当时其他端口的流量,而那些流量可能是突发的、不可预测的;队列可能深可能浅,有的还有优先级,但标准以太网的优先级只是“尽力而为”,不能给你硬性保障。

于是:这一帧的延迟是不可预知的,时大时小,最坏情况可能是几十甚至上百毫秒。对工业运动控制等场景来说,这已经失效了——它要的是“每 1ms 必达,抖动小于 1μs”。

当然如果你的场景是小数据、局域网、低负载 + UDP,经过合理的实时性调优(实时内核、核隔离、中断绑定等),也不是不可以实现可靠的 1 ms 周期通信。

总的来说,在没有任何改造的标准交换式以太网下,那确实很难达到硬实时。所以才有了 TSN 及各种工业实时以太网协议。

  • 标准的 TSN(时间敏感网络):在标准以太网上增加时间同步(802.1AS)、门控调度(802.1Qbv)、帧抢占(802.1Qbu)、流预留(802.1Qav)等,把排队变得可预测且可调度。
  • 大名鼎鼎的 EtherCAT:虽然物理层用标准以太网,但数据帧处理机制完全改变,从站“飞速”读取/插入数据,根本没有传统交换机的存储转发排队。
  • 西门子的 PROFINET IRT:在交换周期中划分实时通道和开放通道,对实时帧用 TDMA 方式调度,确保没有排队干扰。

好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个赞~





上一篇:国产AI算力竞赛升级:Kimi K3三季度发布,2.5万亿参数角逐顶流
下一篇:阿里Java面试复盘:高压下的情绪管理与工作稳定性实战攻略
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-1 16:53 , Processed in 0.616330 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表