华企号 后端开发 什么是自协商技术?

什么是自协商技术?

摘要:本文介绍了自协商的基本原理和工作模式,以及自协商相关细节介绍。

缩略语:

FLP:快速连接脉冲

NLP:普通连接脉冲

CSMA/CD:载波监听多路访问/冲突检测

PCS:物理编码子层

OSI :开放式系统互联参考模型

关键词:

自协商,FLP,NLP,CSMA/CD,PCS,全双工,半双工,并行检测

1.概述

1.1 产生背景

最早的以太网都是10M 半双工的,所以需要CSMA/CD 等一系列机制保证系统的稳定性。随着技术的发展,出现了全双工,接着又出现了100M,以太网的性能大大改善。但是随之而来的问题是:如何保证原有以太网络和新以太网的兼容?

于是,提出了自动协商技术来解决这种矛盾。自动协商的主要功能就是使物理链路两端的设备通过交互信息自动选择同样的工作参数。自动协商的内容主要包括双工模式、运行速率以及流控等参数。一旦协商通过,链路两端的设备就锁定在同样的双工模式和运行速率。

1.2 技术优点

自协商功能允许一个网络设备能够将自己所支持的工作模式信息传达给网络上的对端,并接受对方可能传递过来的相应信息,从而解决双工和10M/100M 速率自协商问题。自协商功能完全由物理层芯片设计实现,因此并不使用专用数据包或带来任何高层协议开销。

2.自协商介绍

2.1 概念及原理

802.3 标准中的第28条是这样定义自动协商功能的:它允许一个设备向链路远端的设备通告自己所运行的工作方式,并且侦测远端通告的相应的运行方式。自动协商的目的是给共享一条链路的两台设备提供一种交换信息的方法,并自动配置它们工作在最优能力下。

照字面上来讲,自动协商就是一种在两台设备间达到可能的最大传输速率的方式。它允许设备用一种方式“讨论”可能的传输速率,然后选择双方可接受的最佳速率。它们使用叫做快速链路脉冲的FLP 交换各自传输能力的通告。FLP 可以让对端知道源端的传输能力是怎样的。当交换FLP 时,两个站点根据以下从高到低的优先级侦测双方共有的最佳方式。

• 1000M 全双工  注:左边从上到下优先级依次递减

• 1000M 半双工

• 100M 全双工

• 100M 半双工

• 10M 全双工

• 10M 半双工

自协商功能的基本机制是:每个网络设备在上电、管理命令发出、或是用户干预时发出FLP(快速连接脉冲),协商信息封装在这些FLP 序列中。FLP 中包含有时钟/数字序列,将这些数据从中提取出来就可以得到对端设备支持的工作模式,以及一些用于协商握手机制的其他信息。

当一个设备不能对FLP 作出有效反应,而仅返回一个NLP(普通连接脉冲)时,它被作为一个10BASE-T 兼容设备。快速链路脉冲FLP 和普通链路脉冲NLP 都仅使用于非屏蔽双绞线上,而不能应用在光纤媒体。

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

2.2 相关术语

2.2.1 全双工和半双工概念

全双工是在微处理器与外围设备之间采用发送线和接受线各自独立的方法,可以使数据在两个方向上同时进行传送操作。指在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。

所谓半双工就是指一个时间段内只有一个动作发生,举个简单例子,一条窄窄的马路,同时只能有一辆车通过,当有两辆车对开,这种情况下就只能一辆先过,等到头后另一辆再开,这个例子就形象的说明了半双工的原理。早期的对讲机、以及早期集线器等设备都是基于半双工的产品。随着技术的不断进步,现在制造的网卡、交换机、路由器都支持全双工模式。半双工的网络设备已经逐渐退出历史舞台。

2.2.2 全双工和半双工以太网的特点

     1.半双工以太网

①任意时刻只能接收数据或者发送数据

②采用CSMA/CD 访问机制

③有最大传输距离的限制

2.全双工以太网

①同一时刻可以接收和发送数据

②传输数据帧的效率大大提高,最大吞吐量达到双倍速率

③全双工从根本上解决了以太网的冲突问题,以太网从此告别CSMA/CD

④消除了半双工的物理距离限制

2.2.3 协商脉冲FLP

自协商是通过一种叫做快速连接脉冲(Fast Link Pulse)的信号实现的,简称FLP。自协商的双方通过FLP 来交换数据。FLP 的编码方式如下图

图片

(1)FLP脉冲波形

图片

(2)FLP编码方式

在具备自协商能力的端口没有Link 的情况下,端口一直发送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。

2.2.4 并行检测

为了保证在对端不能支持自协商的情况下也能连接,引入了被称为并行检测(Parallel Detection)的机制。在一端打开自协商,另一端关闭自协商的情况下,连接的建立就依靠并行检测功能实现。

并行检测机制是这样的:在具有自协商能力的设备端口上,如果接收不到FLP,则检测是否有10M链路的特征信号或100M链路的特征信号。

如果设备是10M设备,不支持自协商,则在链路上发送普通连接脉冲(Normal Link Pulse)简称NLP。NLP仅仅表示设备在位,不包含其它的额外信息。NLP脉冲如图:

图片

如果是 100M 设备,不支持自协商,则在没有数据的情况下,在链路上一直发送4B/5B编码的Idle符号。

并行检测机制如果检测到NLP,则知道对方支持10M速率;如果检测到4B/5B编码的Idle符号,则知道对方支持100M 速率。但是对方是否支持全双工、是否支持流控帧这些信息是无法得到的。因此在这种情况下,认为对方只支持半双工,不支持全双工,且不支持流控帧。

基于以上原理,在对端不打开自协商时,打开自协商的一方只能协商成半双工模式。

802.3 协议规定,通过并行检测建立连接后,PHY 的状态寄存器(PHY标准寄存器地址1)的自协商完成bit(bit5)依然要置位成1,尽管链路上并非使用了真正的自协商操作。同时规定在自协商完成bit 为1 的情况下,本地自协商能力寄存器(PHY 标准寄存器地址4)和对端自协商能力寄存器(PHY 标准寄存器地址5)是有意义的。所以,要把寄存器5 中的数据更新。如果建立的连接为10M,则寄存器5 的10M能力bit(bit5)置1,其它bit置0,表示对端只能支持10M半双工;如果建立的连接为100M,则寄存器5 的100M能力bit(bit7)置1,其它bit置0,表示对端只能支持100M半双工。

2.3 以太网电口自协商

1.以太网口的两端工作模式(10M半双工、10M全双工、100M半双工、100M全双工、自协商)必须设置一致。

2.如果一端是固定模式(无论是10M、100M),另外一端是自协商模式,即便能够协商成功,自协商的那一端也将只能工作在半双工模式。

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

4.对于两端工作模式都是自协商,最后协商成的结果是“两端都支持的工作模式中优先级最高的那一类”。

5. 如果A端自协商,B端设置为100M全双工,A协商为100M半双工后,再强制将B改为10M全双工,A端也会马上向下协商到10M半双工;如果A端自协商,B端设置为10M全双工,A协商为10M半双工后,再强制将B改为100M全双工,会出现协商不成功,连接不上!这个时候,如果插拔一下网线,又会重新协商在100M半双工。

2.4 千兆光口自协商

千兆光口可以工作在强制和自协商两种模式。802.3规范中千兆光口只支持1000M速率,支持全双工(Full)和半双工(Half)两种双工模式。

自协商和强制最根本的区别就是两者再建立物理链路时发送的码流不同,自协商模式发送的是/C/码,也就是配置(Configuration)码流,而强制模式发送的是/I/码,也就是idle码流。

    千兆光口自协商过程:

    1.两端都设置为自协商模式

双方互相发送/C/码流,如果连续接收到3个相同的/C/码且接收到的码流和本端工作方式相匹配,则返回给对方一个带有Ack应答的/C/码,对端接收到Ack信息后,认为两者可以互通,设置端口为UP状态

    2.一端设置为自协商,一端设置为强制

自协商端发送/C/码流,强制端发送/I/码流,强制端无法给对端提供本端的协商信息,也无法给对端返回Ack应答,故自协商端DOWN。但是强制端本身可以识别/C/码,认为对端是与自己相匹配的端口,所以直接设置本端端口为UP状态

    3.两端均设置为强制模式

双方互相发送/I/码流,一端接收到/I/码流后,认为对端是与自己相匹配的端口,直接设置本端端口为UP状态

2.5 自协商注意事项

有关自动协商的大多数问题是由于有一方没有工作在自动协商方式。当一个站点工作在自动协商方式而另一方没有时,只有一方发送快速链路脉冲。另一方已经设定在特定的速率和双工方式下,这样就不会跟对端进行协商。他已经被强行设定,就不会再考虑他连接端的工作方式。

图片

由于强行设定的站点不会告诉正在协商的站点自己的速率和单双工方式,自动协商的站点就必须自己决定合适的速率和单双工方式来匹配对端,这叫做并行检测。协商站点监听从对端过来的链路脉冲能够辨别通信速率。10,100和1000Mbs以太网使用不同的信号方式,所以协商站点能识别对端的工作速率。

然而,全半双工又是另外一回事了。因为强行设定的站点不进行协商,协商站点没有方法知道强行设定站点工作在哪种双工方式下。协商站点为了避免全半双工不匹配,根据802.3标准,它必需与强行设定的站点使用相同的速率,但是它工作在半双工方式下。

不管速率如何(除了10Giga),半双工是以太网的默认方式。在许多情况下,这会产生全半双工不匹配问题。

图片

图片

图片

如上面几幅图,为了两端都达到全双工方式,要么两端都自动协商,要么两端都强行设定。务必不要一端自动协商,另一端强行设定。这会导致双工不匹配。建议把两端设置留在自动协商以减少人为错误。

3.参考文献

IEEE802.3ab

IEEE 802.3u

IEEE 802.3z

OSI

作者: 华企网通王鹏程序员

我是程序员王鹏,热爱互联网软件开发和设计,专注于大数据、数据分析、数据库、php、java、python、scala、k8s、docker等知识总结。 我的座右铭:"业精于勤荒于嬉,行成于思毁于随"
上一篇
下一篇

发表回复

联系我们

联系我们

028-84868647

在线咨询: QQ交谈

邮箱: tech@68v8.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部