不少人在配置网络设备时,会碰到“半双工”和“全双工”这两个词。最常见的解释是:半双工是同一时刻只能一个方向传输,全双工是收发可以同时进行。
这句话本身没错,但它容易让人以为两者的差别只是速度——半双工慢一点,全双工快一倍。
实际上,差别不在速度,在“要不要抢路”。
01 半双工的真面目:一套公共秩序,不只是“轮流”
半双工像一条单行道,两头的车都想过,只能商量着轮流走。全双工像修了两条路,一边一条,谁也不用等谁。
早年的以太网,一根线上挂着多台设备,共享同一段介质。这种结构有个绕不开的问题:没有谁在指挥,凭什么保证不会有两台设备同时开口?
答案是:保证不了,只能事后处理。于是有了一套办法——CSMA/CD(载波监听多路访问/冲突检测)。
先听后发:要发数据之前,先听听线上有没有人在传输。空闲就发,有人在传就等。
边发边听:发出去之后不能撒手不管,还得继续盯着线上。万一另一台也刚好判断“空闲”、同时开口了,两股信号撞在一起,波形就乱了,这叫冲突。
撞了就退:检测到冲突,双方都立刻停下,各自等一个随机长度的时间再重试。随机是关键——如果两边等一样久,重试时还会再撞。
这套办法还带来两条连带规矩:
帧不能太短。要能发现自己撞了,冲突信号传回来时发送方必须还在发送。如果数据太短,发完就停了,撞车的信号回来时已经不听了,会误以为发送成功。所以以太网规定了最小帧长,不够长的要填充到那个长度再发出去。
网段不能太长。距离越远,冲突信号回来得越晚。线拉得太长,等信号回来时发送方早就发完了,“边发边听”就失效了。所以共享式以太网对网段长度有硬性上限,例如双绞线网段最长100米,半双工光纤网段最长412米。
半双工不是“慢一半”,而是一套需要全体成员遵守的公共秩序。设备越多、网络越忙,碰撞和等待就越多,真正用来传数据的时间越少。
02 交换机做的事:不是提速,是把规矩废掉
那这套规矩是怎么退场的?
早年有一种设备叫集线器,所有接口在电气上连成一片——信号从一个口进来,就往其余所有口发送。这等于所有设备还是挤在同一条单行道上,全套规矩照旧。
交换机不一样。它的每个接口是独立的,而且通常一个口只接一台设备。
这一下把问题的前提抽掉了:一根线上只有两个参与者,收和发又各有各的通道,那“两台同时开口撞在一起”这件事根本不会发生。
没有冲突,检测冲突的机制就没有存在的理由——直接关掉。
全双工不是半双工的加速版,而是不需要那套规矩的另一种工作方式。
顺便说一下那两条连带规矩后来怎么了。最小帧长这条留下来了,但它原来的理由已经不适用——全双工下不存在要检测的冲突,它继续存在主要是为了保持格式统一、跟老设备兼容。网段长度的限制同样还在,但今天的上限来自信号本身在铜缆上的衰减,跟“冲突信号能不能及时传回来”是两码事了。
规矩的形式有时候会留下,理由却已经换了一个。这在网络里很常见,看到一条规矩别急着套它的老解释。
03 千兆网线里到底怎么做到“同时收发”
问一个人全双工怎么实现的,多数会回答:网线里有好几对线,一对负责发、一对负责收,各走各的,所以能同时。
百兆以太网确实是这么干的。八芯双绞线里只用两对,一对发、一对收,物理上分得干干净净。
但千兆不是这样。千兆把四对线全部用上了,而且每一对线上,两个方向是同时在传的。同一对铜线上,自己发出去的信号和对方发过来的信号叠在一起。
那怎么区分哪部分是对方的?靠信号处理:设备知道自己刚发了什么,就把线上属于“自己那一份”的成分减掉,剩下的才是对方发来的。自己的信号在线上还会有反射回来的回声,这些也要一起消掉。
千兆的“全双工”不是靠物理上修两条路,是靠算得清自己刚说过什么。
这个细节有个很实际的后果:千兆需要八根芯全部通,而百兆只要四根就够。水晶头压得不好、少接了两对线的情况下,会出现一个典型现象——接上能用,但速率只能协商到百兆。看起来像“线不行”,其实是“线只够百兆用”。
04 双工不匹配:最隐蔽的网络故障
现在的设备基本不用手动操心双工方式了,因为有自协商:两端一上电就互相商量,把速率和双工方式谈定,正常情况下谈出来的就是全双工。
既然自动就能谈好,为什么还要了解这个?因为有一种故障至今没绝迹,而且最难查——双工不匹配。
它的成因很固定:链路一端被人手动强制成了全双工,另一端还开着自协商。而自协商需要双方都参与——对面根本不发协商信号,这一端谈不出结果,就会按保守策略退回半双工。
于是两端进入了两种不同的世界观:
被强制成全双工的那端:随时可以发,不用听。
退回半双工的那端:得先听,还得边发边听,撞了要退避。
后果是:全双工那端在对面正在发数据时照样发,半双工那端听到线上有别人的信号,就判定撞车、停下、退避、重试。它没有坏,它在严格执行半双工的规矩,只是对面已经不遵守了。
这个故障最阴的地方在症状:
ping 得通
打开网页 过
传一个大文件 崩,慢到不像话
接口上的错误计数一直在涨(CRC错误、冲突计数等)
它不是“断了”,是“半通”。所有“能不能通”的检查全都过得去,第一反应几乎都会跑去查路由、查DNS、换网线,而问题其实在两端接口的配置上。
处方很简单:别去手动强制。两端都设成自协商,比一端定死一端自动要可靠得多。如果真需要定死,那就两端都定死、并且定成一样的。
05 半双工在工业设备中依然存在
有线网络通过“给每台设备一条专线”把抢路问题解决了。但在工业场景中,半双工依然存在——工业以太网交换机通常支持手动设置端口的工作模式:自适应、10M/半双工、100M/半双工、10M/全双工、100M/全双工等。
对于部署在工业现场的网关、路由器等设备,如果与交换机之间的双工模式配置不匹配,同样会触发“双工不匹配”故障。以星恒讯ComIn I2350工业路由器为例,它提供五个百兆以太网接口,在接入工业以太网交换机时,两端端口的自协商状态需要保持一致——要么都开启自协商,要么手动指定为相同的速率和双工模式。
06 工程选型建议
在工业网络项目中,关于双工的选型和配置,记住以下几点:
默认用自协商。大多数情况下,两端都设成自协商是最稳妥的做法。只有当设备明确不支持自协商时,才考虑手动指定。
手动指定时必须两端一致。如果交换机端口强制设为100M全双工,对端设备也必须手动设为100M全双工。一端强制一端自协商,就会触发双工不匹配。
排查网络慢时多看一眼双工状态。遇到大文件传输极慢、丢包率高、但ping和网页访问基本正常的现象,优先检查两端端口的双工协商结果。
千兆需要八芯全通。布线时注意,千兆全双工依赖全部四对线正常工作。如果水晶头只压了四根芯,速率只能跑到百兆。
总结一句话:半双工与全双工的差别不在速度,在要不要和别人抢同一段介质。交换机把共享介质换成点对点之后,冲突不再发生,检测冲突的那套机制就被整个关掉了。全双工是另一种工作方式,不是加速版。而在工业现场,最值得警惕的不是选错双工,是一端强制、一端自协商造成的双工不匹配。