一种交换机管理网口报文收发实现方法与流程

文档序号:28942585发布日期:2022-02-19 07:10阅读:313来源:国知局
一种交换机管理网口报文收发实现方法与流程

1.本发明涉及通信设备技术领域,尤其涉及一种交换机管理网口报文收发实现方法。


背景技术:

2.交换机一般会在业务口之外提供一管理口,该网口与业务口数据隔离,管理员可通过该网口登录交换机进行相关配置。
3.目前交换机产品主要是运行在linux环境下,大多数实现方法是在收取报文时通过网卡驱动将网卡上收到的报文送到kernel tcp/ip协议栈,应用态通过socket系统调用获取该报文;发送报文时处理流程相反,应用态通过socket系统发送报文到kernel协议栈,协议栈将报文通过网卡驱动发送出去。
4.目前的实现方法比较单一,在用户态通过标准的socket获取数据,协议的处理部分完全交给内核协议栈。而kernel协议栈是基于通用目的实现,对部分协议支持不是很好,且在不同版本的kernel中有些协议实现有细微差别,使得大多数厂商实际使用自身维护的协议栈,业务数据走的就是该协议栈,里面有很多自有功能及管理控制模块。
5.管理口数据是走kernel协议栈,有些功能(如限流,报文优先级控制等)需在kernel中实现,导致如果产品升级kernel需要对kernel做修改或打补丁;另外kernel中报文到用户态进行了多次报文拷贝,数据收发的线速也受影响。


技术实现要素:

6.本发明设计开发了一种交换机管理网口报文收发实现方法,本发明的发明目的是让管理口报文直接收发到自有协议栈中处理,报文可以统一控制和监控;并可以减少收发报文时的报文拷贝,提高传输效率。
7.本发明提供的技术方案为:
8.一种交换机管理网口报文收发实现方法,包括如下步骤:
9.步骤1、确定管理口待处理数据;
10.步骤2、发送报文,使数据经自有协议栈发送到数据队列,网卡驱动从队列读取报文通过网卡发送出去;
11.步骤3、接收报文,使网卡驱动将报文收到报文存到数据队列中,用户态程序从队列中获取报文送到协议栈中处理。
12.优选的是,在发送报文时包括如下步骤:
13.步骤2.1、发送数据队列存放需通过管理网口向外发送的数据报文,在用户态发送任务和内核态轮询任务间共享;
14.步骤2.2、上层应用模块按各自协议标准封装报文,调用协议栈发送接口,按指定ip发送;
15.步骤2.3、协议栈模块收到报文,根据目的ip判断,如果从管理口发送,将数据写入
共享发送数据队列,如果不从管理口发送,将数据写入原有业务数据处理模块,封装各层帧头;
16.步骤2.4、内核中的发送任务是新增任务,常驻内核态,该任务实时轮询发送数据队列,查询队列是否有数据,如果队列中有数据报文,将数据帧取出,调用网卡驱动发送接口将数据帧发送出。
17.优选的是,在接收报文时包括如下步骤:
18.步骤3.1、接收数据队列存放需通过管理网口接收的数据报文,在用户态接收任务和内核态接收报文任务间共享;
19.步骤3.2、内核中管理口网卡驱动接收报文,驱动模块接收到管理口进来的报文,将报文写入接收数据队列;
20.步骤3.3、用户态的接收任务为新增任务,运行在用户态,实时轮询接收数据队列,如果队列中有数据,将数据帧取出,调用自有协议栈报文处理接口,送到协议栈处理;
21.步骤3.4、协议栈解析报文,逐层剥离2/3层报文头,根据解析出的报文类型将报文发送到对应业务模块处理。
22.优选的是,在所述步骤2.2中,所述上层应用模块为ftp/tftp。
23.本发明与现有技术相比较所具有的有益效果:
24.1、本发明方案实施中,无需报文在kernel协议栈中处理,只需修改网卡驱动即可,流量监控及管理部分在自有协议栈中实现;而网卡驱动可作为单独模块编译和加载,使得软件可移植性强,后续升级kernel,无需在kernel中做修改,可平滑升级;
25.2、原有socket传输数据方式在内核和用户态,以及网卡驱动到内核协议栈之间都会有报文拷贝,当管理口数据量较大时,导致cpu占用过高,影响系统业务;本方案在内核和用户态之间使用共享队列做数据缓存,减少了报文拷贝,提高了数据处理性能;
26.3、本发明数据报文不再经内核协议栈到用户态,报文由自有协议栈处理,在用户态和内核态之间共享数据队列(接收和发送队列),用户态和内核态通过该队列交互数据,不再通过socket系统调用。
附图说明
27.图1为本发明所述的交换机管理网口报文收发实现方法的示意图。
28.图2为本发明所述的发送报文处理流程图。
29.图3为本发明所述的接收报文处理流程图。
具体实施方式
30.下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
31.如图1所示,本发明提供一种交换机管理网口报文收发实现方法,具体包括:
32.本方案在网卡驱动及自有协议栈之间共享一数据队列,该队列为无锁循环队列,在用户态应用程序和内核态报文处理任务中共享,管理口数据处理和自有协议栈是原有已实现模块,本发明利用自有协议栈,不再使用kernel协议栈,发送报文时,数据经自有协议栈发送到队列,网卡驱动从队列读取报文通过网卡发送出去,接收报文时,网卡驱动将报文
收到报文存到数据队列中,用户态程序从队列中获取报文送到协议栈中处理。
33.如图2所示,发送报文处理流程包括:
34.发送数据队列存放需通过管理网口向外发送的数据报文,在用户态发送任务和内核态轮询任务间共享;
35.上层应用模块如ftp/tftp等按各自协议标准封装报文,调用协议栈发送接口,按指定ip发送;
36.协议栈模块收到报文,根据目的ip判断是否报文从管理口发送,并封装各层帧头;如果从管理口发送,将数据发写入共享发送数据队列,否则走原有业务数据处理模块;
37.内核中的发送任务是新增任务,常驻内核态,该任务实时轮询发送数据队列,查询队列是否有数据,如果队列中有数据报文,将数据帧取出,调用网卡驱动发送接口将数据帧发送出。
38.如图3所示,接收报文处理流程包括:
39.接收数据队列存放需通过管理网口接收的数据报文,在用户态接收任务和内核态接收报文任务间共享;
40.内核中管理口网卡驱动负责接收报文,驱动模块接收到管理口进来的报文,将报文写入接收数据队列;
41.用户态的接收任务为新增任务,运行在用户态,实时轮询接收数据队列,如果队列中有数据,将数据帧取出,调用自有协议栈报文处理接口,送到协议栈处理;
42.协议栈解析报文,逐层剥离2/3层报文头;再根据解析出的报文类型将报文发送到对应业务模块处理。
43.实施例
44.在具体的应用中,设备经常会通过管理口升级软件,远程控制等;升级时通过ftp/tftp等协议传输数据到设备,经过上述收包流程将数据报文送到升级模块,升级模块解析报文并将数据写入存储介质中。
45.本技术利用自有协议栈便于数据管理和监控,实际上的数据就是下面提到的能在高负荷时减低cpu使用。
46.本技术在我司机架主控交换机多款产品上已应用,在实际测试过程中,当管理口有大流量报文时,相同流量,改进方案别原有方案cpu占用率低10%-20%。
47.尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1