以太网速度协商

发布时间 2024-01-04 19:03:41作者: 小小小学僧

  以太网自协商通过发送FLP(快速连接脉冲)包实现,FLP 中包含有时钟/数字序列,将这些数据从中提取出来就可以得到对端设备支持的工作模式,以及一些用于协商握手机制的其他信息。如果是100M模式设备不支持自协商也会在链路上一直发送4B/5B编码的Idle符号。

  如果发送NLP(普通连接脉冲)则被视为10BASE-T 兼容设备,需要注意的是FLP与NLP仅适用于非屏蔽双绞线不适用于光纤。

NLP波形图如下

  电口和光口自协商主要区别是在OSI 中它们所处的位置不同。对于电口来说,协商发生在链路信号传输之前;对于光口来说,自协商机制与PCS(物理编码子层)在同一层,这意味着光口的协商必须先建立链路同步以后才可以进行协商。

  自协商模式:若设备启用自协商在没有连接之前,会一直发送FLP,在FLP中包含着自己的连接能力信息,包括支持的速率能力、双工能力、流控能力等。这个连接能力是从自协商能力寄存器中得到的(PHY 标准寄存器地址4),依靠脉冲位置编码携带数据。一个FLP包含33个脉冲位置,其中17个奇数脉冲位置为时钟脉冲,16个偶数位置脉冲为数据脉冲,此位置有脉冲表示1,此位置没有脉冲表示0。这样1 个FLP的突发就可以传输16bit 的数据。如果两端都支持自协商,则都会接收到对方的FLP,并且把FLP中的信息解码出来。得到对方的连接能力。并且把对端的自协商能力值记录在自协商对端能力寄存器中(Auto-Negotiation Link Partner Ability Register , PHY 标准寄存器地址5 )。同时把状态寄存器(PHY 标准寄存器地址1)的自协商完成bit(bit5)置成1。在自协商未完成的情况下,这个bit一直为0。然后各自根据自己和对方的最大连接能力,选择最好的连接方式。比如,如果双方都即支持10M 也支持100M,则速率按照100M连接;双方都即支持全双工也支持半双工,则按照全双工连接。一旦连接建立后,FLP就停止发送。直到链路中断,或者得到自协商Restart命令时,才会再次发送FLP。

  如图16bit为100011110110010,对应支持的通信能力如下

  为了保证在对端不能支持自协商的情况下也能连接,引入了被称为并行检测(Parallel Detection)的机制。在一端打开自协商,另一端关闭自协商的情况下,连接的建立就依靠并行检测功能实现。自协商端可以通过并行检测,如果自协商端检测到对端发送的是NPL则可以判断对方为10M设备,但无法确定对方是全双工还是半双工,如果检测到的是4B/5B编码的Idle符号则可确定对方100M设备也无法确定是全双工还是半双工。

4B/5B编码波形如下

  如果一端工作在全双工模式,另外一端工作在半双工模式(包括自协商出来的半双工,也一样处理),Ping是没有问题的,流量小的时候也没有任何问题,流量达到约15%以上时,就会出现冲突、错包,最终影响了工作性能。

  需要注意的是对于USB网卡与单独的PHY稍有差异的一点,是USB网卡不管处于哪种模式,都会发送FLP包(FLP包的内容为实际设置的模式并且向下兼容)。