发明内容
为了解决现有技术中的不足,本发明提出了一种堆叠设备间交换口快速传递流控信息的方法,通过在以太前导码中引入流控信息,流控信息的传递仅在两点堆叠设备间的堆叠口内完成,不影响普通业务报文处理,不再受设备内交换时延影响;同时支持报文切片和空闲帧的插入,大大提高了堆叠设备间交换口流控传递效率和响应速度,提高了网络可靠性。
为实现上述目的,本发明采用如下的技术方案。
在本发明实施例中,提出了一种堆叠设备间交换口快速传递流控信息的方法,该方法包括如下步骤:
S1第一堆叠设备检测到接收端某个端口流控状态发生变化;
S2所述第一堆叠设备向上下游的发送侧广播流控信息;
S3第二堆叠设备接收到所述第一堆叠设备发送的流控信息,根据全局端口映射表对所述流控信息进行响应并更新输出流控状态到设备内部,同时将接收的流控信息给到发送侧。
进一步的,所述全局端口映射表为堆叠设备全局信息,包含堆叠设备、流控组和端口的全局定义,以及所有端口对应的输出端口。
进一步的,所述流控信息包括堆叠设备号、堆叠端口流控和校验结果三部分;所述堆叠设备号用于区分系统内堆叠设备;所述堆叠端口流控则包含流控有效指示和流控组内端口流控状态;所述校验结果则是对整个前导码字段的保护;所述流控信息字段共7个字节,占用以太前导码固定字段0xFB之后的位置。
进一步的,所述流控有效指示为1bit,表示相应流控组内流控状态是否更新,0x1表示流控状态更新;0x0表示流控状态保持之前状态。
进一步的,所述端口流控状态标识组内端口状态;所述端口流控状态为总线,用流控独热码分别表示设备每个交换口是否起流控,0x1表示起流控,下游需要响应流控;0x0表示无流控。
进一步的,支持报文切片和空闲帧插入,用以提高流控传递效率,达到快速处理快速响应。
进一步的,所述端口流控状态变化时,触发流控报文的广播。
进一步的,设备堆叠数量、流控组和支持端口号根据应用需求灵活定义,可以压缩部分报文帧间隙来扩展流控信息字段。
本发明的有益效果在于,针对现有的网络通信统中存在的问题,提出了一种堆叠设备间交换口快速传递流控信息的方法,通过在以太前导码中引入流控信息,流控信息的传递仅在两点堆叠设备间的堆叠口内完成,不影响普通业务报文处理,不再受设备内交换时延影响;同时支持报文切片和空闲帧的插入,大大提高了堆叠设备间交换口流控传递效率和响应速度,提高了网络可靠性。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。以下实施用例仅用于更加清楚地说明本发明的系统方法及技术方案,而不能以此来限制本申请的保护范围。
根据本发明的实施方式,本发明提出了一种堆叠设备间交换口快速传递流控信息的方法,通过在以太前导码中引入流控信息,流控信息的传递仅在两点堆叠设备间的堆叠口内完成,不影响普通业务报文处理,不再受设备内交换时延影响;同时支持报文切片和空闲帧的插入,大大提高了堆叠设备间交换口流控传递效率和响应速度,提高了网络可靠性。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
图1是一种堆叠设备间交换口快速传递流控信息的方法的处理流程示意图。如图1所示,该方法包括如下步骤:
S1第一堆叠设备检测到接收端某个端口流控状态发生变化;
S2所述第一堆叠设备向上下游的发送侧广播流控信息;
S3第二堆叠设备接收到所述第一堆叠设备发送的流控信息,根据全局端口映射表对所述流控信息进行响应并更新输出流控状态到设备内部,同时将接收的流控信息给到发送侧。
所述流控信息包括堆叠设备号、堆叠端口流控和校验结果三部分;所述堆叠设备号用于区分系统内堆叠设备;所述堆叠端口流控则包含流控有效指示和组内端口流控状态;所述校验结果则是对整个前导码字段的保护;所述流控信息字段共7个字节,占用以太前导码固定字段0xFB之后的位置。
所述流控有效指示为1bit,表示相应流控组内流控状态是否更新,0x1表示流控状态更新;0x0表示流控状态保持之前状态。
所述端口流控状态标识端口状态;所述端口流控状态为总线,用流控独热码分别表示设备每个交换口是否起流控,0x1表示起流控,下游需要响应流控;0x0表示无流控。
具体实施时,所述全局端口映射表为堆叠设备全局信息,包含堆叠设备、流控组和端口的全局定义,以及所有端口对应的输出端口。
具体实施时,支持报文切片和空闲帧插入,用以提高流控传递效率,达到快速处理快速响应。
具体实施时,所述端口流控状态变化时,触发流控报文的广播。
具体实施时,设备堆叠数量、流控组和支持端口号根据应用需求灵活定义,可以压缩部分报文帧间隙来扩展流控信息字段。
需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
为了对上述一种堆叠设备间交换口快速传递流控信息的方法进行更为清楚的解释,下面结合一个具体的实施例来进行说明,然而值得注意的是该实施例仅是为了更好地说明本发明,并不构成对本发明不当的限定。
实施例一:
一种堆叠设备间交换口快速传递流控信息的方法,具体包括堆叠口流控定义以及堆叠口流控处理。
堆叠口流控定义如下:
堆叠设备间交换口的流控信息被插入到以太报文的前导码字段,如图2所示,传统以太网报文前导码字段固定为0xFB55_5555_5555_55D5,0xFB(8个字节,48bit)为报文起始标记,不能被替换,其余7个字节0x555555_555555D5可以替换为流控信息字段。
流控信息分为堆叠设备号、堆叠端口流控和校验结果三部分;具体如下:
堆叠设备号用于区分系统内堆叠设备;
堆叠端口流控则包含流控有效指示和流控状态;
校验结果则是对整个前导码字段的保护,多项式为G(x)=x8+x2+x+1;x为前导码;G(x)为校验结果;
流控有效指示为1bit表示该组流控状态是否更新,0x1表示流控状态更新;0x0表示流控状态保持之前状态。
由于前导码长度限制,无法一次表征全部端口的流控信息,所以需要对端口分组。相应组流控以及流控信息都是全局信息,所有堆叠设备都可以看到。
具体实施时,通常每个堆叠设备的端口编号是连续的,为了简化设计,端口分组通常依据堆叠设备号区分。流控组(端口分组)编号可以为具体的端口分组也可以为堆叠设备编号,下文中流控组编号等同于堆叠设备号。
假设堆叠设备支持256个端口,如果每个堆叠设备支持16个端口,则需要16个堆叠设备。此时按照16bit分一组,每组分别对应一个堆叠设备,所以256bit流控信息,由4bit组数(堆叠设备号0~15)和16bit流控信息组成。堆叠组网内每个堆叠设备都要维护一张全局的接口交换表,如设备1的端口0(全局端口号为16)输出数据给设备3的端口0(全局端口号为48)和设备15的端口1(全局端口号为241),此时设备3的流控信息为16’b0000_0000_0000_0001,表示端口48流控置起,此时设备1的端口0就要响应流控,停止发流,无论端口241(设备15的端口1)的是否起流控。
端口流控状态为总线,用流控独热码分别表示该设备每个控交换口是否起流控,0x1表示起流控,下游需要响应流控;0x0表示无流控。当某个堆叠设备的交换口流控状态一直没有变化时,线路上无需一直传递本设备无变化的流控信息,此时发送侧可以把流控有效指示置为0,下级如果有新流控产生可以利用该帧插入新的流控信息。一旦接口作为堆叠口使用,所有报文都必须插入堆叠头。
独热码含义其实就是每个bit独立表示1个端口的流控状态,如组数为4’b0001(因为用4bit表示16个堆叠设备,设备编号为0~15,所以组数为1,表示堆叠设备1,即第二组。),流状态为16’b0000_0000_1100_0000就表示端口22和23(端口编号为:组数+组内偏移,4b'0001表示第二组,组内偏移为6,7;对应端口号为16+6和16+7,即为22和23。)流控置起,关联两个端口的发送端需停止发流。
本发明中设备堆叠数量和支持端口号可以根据需要灵活定义。以替换标准以太网原有前导码字段有6字节48比特为例:前导码8个字节,去除帧起始第一个字节0xFB和最后一个字节用于CRC校验,剩余只有6字节,堆叠设备号+设备内端口流控状态只有48bit可用。当流控状态相较之前未发生变化时,为了减少流控响应的频次,额外增加1bit用于标识当前传输流控相较上次是否有更新。所以48bit前导码被划分为三段,1bit流控更新指示;7bit堆叠设备号;40bit设备内端口流控状态。若40bit传递单设备流控信息,此时系统最大可以支持5120个端口,具体的:7bit支持128个流控设备,每个流控设备支持40bit流控信息总计128*40=5120个通道
具体实施时,也可以压缩部分报文帧间隙来扩展该字段,最大可以压缩4字节帧间隙,使流控信息字段达10字节,80bit,此时支持单点64交换口多达1024以上设备堆叠。
堆叠口流控处理流程如下:
图3给出了4个设备堆叠场景的流控处理框图。具体流程如下:
1、当堆叠设备0接收端某个端口流控状态变化时,即流控状态1(置起)变为流控状态0(撤销)或流控状态0变化为流控状态1;
2、从堆叠设备0和堆叠设备1两个端口的发送侧广播流控信息(堆叠设备有上游和下游,双向广播流控可使上下游流控同时响应);
每个设备的流控都是通过发送端输出,而输出的流控的来源有2类,一类是本端设备的发送口产生的,此时会产生新的流控帧并配置设备号0发送;另一类是接收到远端设备的发送口产生,此类流控帧如果设备号与本端不同则透传,相同则本地丢弃该帧。
具体实施时,若堆叠设备0接收端某个端口状态置起,则所述流控信息包括堆叠设备0的编号(假设7bit);流控有效指示位0x01,即更新;流控状态为0x01,则端口状态为置起。
假定设备0(本实施例中,组信息用堆叠设备号表示)的接收端口为0,此时端口0接收端缓存将满,产生本地流控,此时所有的发送端口广播该流控信息,{1’b1,7’h0,40’h00_0000_0001};此时接收端口接收到设备号为1的流控帧,内容为:{1’b1,7’h1,40’h00_0000_FF00},表示设备1的端口8~15产生流控,此时设备0用设备号1+端口8~15反映射查询本端设备是否有发送端口需要响应流控信息,同时把设备1的流控帧透传到下游。
3、堆叠设备1和堆叠设备3接收到堆叠设备0发送的流控信息解析后,根据堆叠设备编号和堆叠端口流控有效指示反查决定该流控信息哪些比特位流控需要响应并更新输出流控状态到设备内部,同时把接收的流控信息给到发送侧(堆叠口的发送侧)。具体如下:
发送侧把流控信息插入到发送的数据帧头部,如果此时堆叠设备1和堆叠3也更新了本端流控,此时发送端还要插入本端新产生的流控。如果链路上报文数量不足以传递流控帧头,此时需要自行插入64字节空闲报文(数据报文为全0),专用于流控帧头插入。如果流控信息更新时线路上正在传输巨帧,此时为了流控信息能尽快输出更新到对端,此时需要对报文进行打断分片操作,打断操作报文切割粒度>=256字节。
堆叠本质是通过多个交换设备互联形成一个更大的交换网络,当网络交换发生在多个设备间时,设备间就需要传递流控信息来保证跨设备交换的流量无损。因此每个设备发送的流控信息只包含本端的流控信息,其它设备接收到流控信息后只流控解析和响应。
堆叠设备1此时传递带流控信息报文0和1(两者传递无顺序要求,报文0是设备0发送的仅携带设备0流控信息的数据帧,设备1解析响应完成报文0后会继续把报文传递到下游,报文1则是设备1发送的仅携带设备1流控信息的数据帧。两者的差异在于,一个是路过报文0,一个起始报文1)。
堆叠设备3传递带流控信息报文0和3(对于设备3而言0就设备0发送的路过设备3的数据帧;3就是设备3发送的起始的数据帧。),后续以此类推,需要注意的是,广播流控传递一圈之后会回到流控生成端,此时接收带流控信息帧的堆叠设备号等于本端堆叠设备号,此时接收到流控信息将被终结,该信息不再传递给发送端继续广播,如果此时本端又有新的流控产生,新的流控将重新广播。总之,广播流控帧的生存周期只有一圈,一圈后回到本端流控将被终结。
每个设备只能产生和终结本节点流控信息,其他节点流控解析后根据发送侧报文情况进行转发,同时根据端口映射关系(每个堆叠设备会维护整个堆叠网络全局的端口映射表项,如设备0的端口0根设备1的端口1,设备2的端口2有数据交换,此时设备0发送的报文会携带端口0的流控信息,设备1和设备2接收到报文0后需要根据上述端口映射关系,把设备0端口0的流控信息提取出来响应。)决定发送端是否响应该流控。为了保证线路上有效流控帧能及时传递,流控的产生必须是独热码,流控信息变化后才发送到线路上,否则线路上传递空闲流控帧(流控信息字段为全0),每个节点上电默认到其他节点的端口不起流控,当其他节点产生流控后再响应。
具体实施时,可支持报文切片和空闲帧插入,用以提高流控传递效率,达到快速处理快速响应。当线路上持续传递巨帧时,流控信息的传递效率受巨大影响,此时堆叠口会根据实时需更新的流控状态对巨帧做切片操作用以保证实时流控信息能够及时传递到对端;当线路空闲时,此时若有实时流控信息需传递时,堆叠口会插入空闲帧仅用于传递实时流控信息。
节点接收到流控信息调度采用先进先出原则,不改变其他节点流控产生先后顺序,而本节点新生成流控信息则根据流控碰撞决定,如果本点产生新流控时没有其他节点流控信息传递,则直接发送本点流控信息,如果本点流控跟其他节点冲突,则优先发送其他节点流控信息,本点待到冲突结束后发送。流控信息的调度采用FIFO方式设计。设备发送的流控帧有本端新产生和远端接收两类,两种都写入到流控帧缓存中待调度,写入的原则采用先入先出,当本地产生和远端接收碰撞时,优先远端写入,本地延迟一拍后写入。
图4给出流控处理模块的结构框图,节点接收到流控解析的堆叠设备号、堆叠端口流控信息和校验结果之后,输出给流控处理模块,该模块先根据校验结果值判断流控信息是否更新(接收到远端流控信息更新,首先流控帧校验要正确,其次对应流控状态要0->1(XOFF->XON),即0变化为1,或1->0
(XON->XOFF),即1变化为0),校验结果为1表示流控帧头错误,不更新,校验结果为0表示流控帧头正确需更新(根据端口映射关系提取相应的流控信息,如流控置起XON,流控撤销XOFF);更新后的堆叠设备号和堆叠流控端口反查堆叠组网的端口映射表来决定本节点是否更新并响应流控。
具体实施时,流控响应需要根据设备号+端口号反查端口映射表决定本端设备发送口是否需要响应流控。如设备1端口0接收来自设备0端口0的数据,当设备1端口0接收端流控置起后,设备0接收到设备1的流控帧后解析出端口0的流控XON,此时反查端口映射表,发现设备0端口0发送数据到设备1端口0,此时设备0端口0需要停发数据以响应设备1端口0发出的流控。
每个堆叠设备会维护整个堆叠网络全局的端口映射表项,如设备0的端口0,根设备1的端口1,设备2的端口2,此时设备0发送的报文会携带端口0的流控信息,设备1和设备2接收到报文0后需要根据上述端口映射关系,把设备0端口0的流控信息提取出来响应。
所述端口映射表即本设备端口数据输出到哪些设备的哪些端口。该端口映射表为堆叠设备全局信息,即每个输出端口包含全部端口信息,如堆叠系统64口堆叠,则端口0输出数据的目的端至多有64个,通过独热码方式表示,如64’h0000_0000_0000_0011就表示端口0输出数据到端口0和端口4,如果0或4的接收端产生流控,则端口0发送端需停发。
堆叠流控处理模块处理流程,根据接收堆叠设备号判断流控信息本点终结还是重新插入转发;根据本端发送时接口产生的本地流控和接收端基于流控帧解析的端口流控做冲突检测写入缓存。
报文处理模块流程,根据缓存状态(非空)决定是否存在有效流控信息需要在线路上发送,如果有此时在前导码插入堆叠口流控信息,如果流控信息发送后还有信的流控信息需要传递,但是此时发送报文长度过大导致流控信息无法插入,此时强行打断该报文插入新的流控的信息;如果线路是没有数据帧,此时产生空闲帧,用于新流控信息及时传递。
本发明的有益效果在于,针对现有的网络通信系统中存在的问题,提出了一种堆叠设备间交换口快速传递流控信息的方法,通过在以太前导码中引入流控信息,,流控信息的传递仅在两点堆叠设备间的堆叠口内完成,不影响普通业务报文处理,不再受设备内交换时延影响;同时支持报文切片和空闲帧的插入,大大提高了堆叠设备间交换口流控传递效率和响应速度,提高了网络可靠性。具体优势如下:
1、本发明中流控信息的传递仅在两点堆叠设备间的堆叠口内完成,流控帧通过替换前导码字段完成,不占用报文内容不影响普通业务报文处理;
2、本发明中流控信息直接在源交换口,堆叠口和目的交换口传递和响应,不再受设备内交换时延影响;大大提高了堆叠设备间交换口流控传递效率和响应速度,提高了网络可靠性;
3、本发明支持报文切片和空闲帧插入,用以提高流控传递效率,达到快速处理快速响应。
本发明申请人结合说明书附图对本发明的实施用例做了详细的说明与描述,以上实施用例仅为本发明的优选实施方案,详尽的说明只是为了帮助读者更好地理解本发明精神,而并非对本发明保护范围的限制,相反,任何基于本发明的发明精神所作的任何改进或修饰都应当落在本发明的保护范围之内。