网线使用时为了网络质量一般不超过100m,那我每隔100m接一个交换机是不是就可以无限延长了?
完全没有问题。
但是慎用无限、永远、永恒这些字眼,“爱你到永远”这句山盟海誓,看看现在的离婚率就知道有多么不靠谱。
但是,工程上并不这么使用,会使用传输距离(无需中继)高1-3个数量级的光纤。为什么要用费钱、费力、费时间、低可靠性、高延迟的网线方案呢?
题主想象中的交换机中继:
接收端口物理层将网线中的电信号,由于传输距离衰减,使用功率放大器将其放大,然后从出端口发送出去。到达终点之前每个交换机都是玩的,数据帧在每个交换机由于信号放大而引起的延迟微小到可以忽略不计。从起点到终点传输时延,只和传输距离成正比。
真实的交换机中继:
接收端口物理层心中就一个想法:检测同步信号,由于Preamble(同步信号)里是周期性重复的模拟波形,采样成离散信号(香农采样原理),因此计算机只能处理离散信号,而无法处理连续信号。用信号的前一个周期(多个采样点)与下一个周期(相同采样点)进行相关匹配,相关系数位于0-1之间。0是不相关,1完全相同的采样。
如果这个相关系数高于一个预设的阈值(比如0.7或0.8),意味着检测到同步信号。物理层立马来精神了,触发检测SFD,SFD检测成功,SFD屁股后面的一串串采样才是数据帧。
物理层将这些离散采样点de-modulation、decode、de-scramble成0、1组成的数据帧,然后notification一个消息给MAC层,MAC层接收并计算FCS。如果FCS错误,丢了。
如果FCS正确,问题来了,MAC层怎么处理?
很显然,MAC层需要将接收的数据帧(0、1组成)。可是MAC层凭自己是无法将0、1变成模拟信号,必须借助物理层。
MAC层联系物理层,Hi,老弟请把这串数据从出口发出去。
物理层于是添加同步信号(preamble + SFD),并将数据帧做了scramble、encode、modulation,上载波,信号就发了出去。
到了下一个交换机的接收端口,重复一遍上文的故事,直到到达终点。
延迟
看出问题了吧,每一个交换机中继数据帧,是从模拟信号到数字信号,然后再从数字信号到模拟信号的处理过程,这个处理延迟尽管小,但是也有几个us到几十个us不等,取决于数据帧的长度以及硬件处理速度。如果中继的交换机不多,可能感受不到,但是一旦中继数量上升到很多,叠加在一起的时延是巨大的。
可靠性
假设每个中继线的可靠性是99.99%,失效概率= 0.01%/中继。
10个中继失效概率= 10 * 0.01%= 0.1%
100个中继失效概率= 100 * 0.01%= 1%
1000个中继失效概率= 10 * 0.01%= 10%
…
到1000个中继的失效概率 =10%,网络已经无法使用了,更不要说什么无限了。
失效一般是如何造成的?
网线的屏蔽差,我方的send线到达对方,信号由于距离衰减。
对方恰好也有数据要发给我方,通过我方的receive先发送,但是和我方信号擦肩而过时,由于对方刚离开端口,信号较强(距离短,衰减小),通过屏蔽线泄露了出来,污染了我方的信号(cross-talk),对方接收的信号 = 我方衰减的信号 + 对方泄露的信号。
在我方信号眼里,对方泄露的信号是随机信号(噪音)。
- 如果和我方信号正相关,对我方信号是放大,这是加分项。
- 如果和我方信号正0相关,对我方信号没有影响,不加不减。
- 如果和我方信号负相关,对我方信号抵消,这是减分项。
失效通常发生在减分项,即对方的数据和我方数据波动在相反的极性。
在大多数的情况下(99.99%),处于0相关或者接近0相关,所以不受影响。
如果屏蔽线质量高,可以减少cross-talk的能量,那么网线的可靠性会大大提高。
作者|车小胖谈网络|公众号