CN105306373B - 一种igmp报文处理方法以及装置 - Google Patents
一种igmp报文处理方法以及装置 Download PDFInfo
- Publication number
- CN105306373B CN105306373B CN201410366591.4A CN201410366591A CN105306373B CN 105306373 B CN105306373 B CN 105306373B CN 201410366591 A CN201410366591 A CN 201410366591A CN 105306373 B CN105306373 B CN 105306373B
- Authority
- CN
- China
- Prior art keywords
- igmp
- message
- information
- igmp message
- specify
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种IGMP报文处理方法以及装置,应用于IGMP设备,其中,所述方法包括:调用内核接收IGMP报文,解析并提取出所述IGMP报文的指定信息;将所述IGMP报文的指定信息储存于缓存模块;在进程接收到信息获取信号时,调用进程读取并处理所述缓存模块储存的所有指定信息。本发明可有效减少内存占用,防止更多的IGMP报文被丢弃。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种IGMP报文处理方法以及装置。
背景技术
IGMP(Internet Group Management Protocol,互联网组管理协议)是TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联协议)协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
随着组播技术在网络应用的普及,对于网络设备处理突发组播报文的能力要求越来越高,特别是在现实应用和压力测试时,对于IGMP报文要达到实时处理,才不会出现丢包的情况。
目前的网络设备在内核接收到的IGMP报文经过协议栈后,根据socket队列限制的长度将一定数量的IGMP报文通过socket机制上送组播进程,等待进程依次处理。在用户较多,或有突发IGMP组播报文时,由于socket上送队列限制,在队列排满后,则会导致后续接收到的IGMP报文因为无法排列到队列中而被丢掉。
发明内容
有鉴于此,本发明提供了一种IGMP报文处理方法以及装置来解决上述问题。
本发明提供一种IGMP报文处理方法,应用于IGMP设备,其中该方法包括:
调用内核接收IGMP报文,解析并提取出所述IGMP报文的指定信息;
将所述IGMP报文的指定信息储存于缓存模块;
在进程接收到信息获取信号时,调用进程读取并处理所述缓存模块储存的所有指定信息。
本发明还提供一种IGMP报文处理装置,应用于IGMP设备,其中该装置包括:
内核调用单元,用于调用内核接收IGMP报文,解析并提取出所述IGMP报文的指定信息;
信息存储单元,用于将所述IGMP报文的指定信息存储于缓存模块;
进程调用单元,用于在进程接收到信息获取信号时,调用进程读取并处理所述缓存模块储存的所有指定信息。
本发明提供的IGMP报文处理方法通过调用内核接收IGMP报文,提取并存储其指定信息,同时调用进程读取并处理该指定信息,能有效减少内存占用,防止更多的IGMP报文被丢弃。
附图说明
图1是本发明IGMP报文处理装置所在网络设备的硬件架构示意图;
图2是本发明的IGMP报文处理装置逻辑结构示意图;
图3是本发明的IGMP报文处理方法流程示意图。
具体实施方式
目前的网络设备在内核接收到的IGMP报文经过协议栈后,根据socket队列限制的长度将一定数量的IGMP报文通过socket机制上送组播进程,该一定数量的IGMP报文会被排列在队列中等待进程依次处理。然而,内核接收报文的过程和进程处理报文的过程无法同步进行,只有进程处理完一个报文,队列才能接收下一个报文。同时进程在处理该IGMP报文时,只需要根据该IGMP报文中的部分信息处理即可,若将整个报文排列在队列中等待处理则会占用很多的内存,这样就无法在待处理的队列中加入更多的IGMP报文。特别是用户较多,或有突发IGMP组播报文时,由于socket上送队列限制,在队列排满后,则会导致后续接收到的IGMP报文因为无法排列到队列中而被丢掉。
针对上述问题,本发明提供了一种IGMP报文处理方案,通过调用内核接收IGMP报文,提取出所述IGMP报文的指定信息储存于缓存模块,并通知进程读取并处理所述缓存模块储存的所有指定信息。
本发明提供的IGMP报文处理装置应用于IGMP设备,该IGMP设备可以是路由器、交换机等网络设备。请参考图1,为本发明IGMP报文处理装置所在网络设备的硬件架构示意图,该IGMP设备的基本硬件环境包括CPU、内存、转发芯片、非易失性存储器以及其他硬件。图2为该IGMP报文处理装置的逻辑结构示意图,其从本质上说是一个逻辑装置。在本实施方式中,以软件实现为例,该IGMP报文处理装置在逻辑层面上包括:内核调用单元、信息存储单元以及进程调用单元。
请参考图3,在一个示例性的实施方案中,该IGMP报文处理装置在运行过程中执行如下处理流程:
步骤301,内核调用单元调用内核接收IGMP报文,解析并提取出所述IGMP报文的指定信息;
所述内核调用单元还包括报文识别子单元,用于在中央处理器CPU调用内核接收报文,根据报文的协议号判断该报文是何种协议的报文,并从中过滤出IGMP报文。例如,IGMP协议的协议号为“2”,那么协议号为“2”的报文则为IGMP报文。
所述内核调用单元还包括解析执行子单元,用于在根据协议号过滤出IGMP报文之后,进一步判断接收该IGMP报文的端口是否使能IGMP功能,即端口的IGMP功能为“down”或“up”。在各接口开启IGMP功能,即端口的IGMP功能为“up”,同时内核根据自身需要向系统申请预设大小的内存作为缓存模块,以存储待处理的IGMP的指定信息。
本发明实施方式提供的IGMP报文处理装置会事先收集各端口的IGMP配置信息,该IGMP配置信息包括端口的IGMP使能情况。并将收集的IGMP配置信息通过系统调用下发至内核保存。若期间某端口的IGMP使能情况发生改变,该内核保存的IGMP配置信息也会随之更新。
对于内核接收的IGMP报文,首先检查内核保存的IGMP配置信息中接收该IGMP报文端口的IGMP功能使能情况,若为“down”,说明该端口未使能IGMP功能,则丢弃所述接收的IGMP报文;若为“up”,说明该端口使能IGMP功能,并对该IGMP报文进一步处理。
具体地,在接收IGMP报文的端口使能IGMP功能的情况下,内核对接收的IGMP报文进行解析,并提取出IGMP报文的指定信息,以调用进程对该IGMP报文进行处理。该指定信息可以包括:所述IGMP报文的目的IP地址、所述IGMP报文的加组信息、所述IGMP报文的离组信息以及所述IGMP报文的接收端口信息中的至少一项。
步骤302,信息存储单元将所述IGMP报文的指定信息储存于缓存模块;
现有技术中,当调用内核接收到IGMP报文后,根据socket队列限制的长度将一定数量的待处理的IGMP报文整个排列在队列中。然而,进程在处理该IGMP报文时,只需要根据该IGMP报文中的部分信息处理即可,若将整个报文排列在队列中等待处理则会占用很多的内存。本发明实施方式根据进程处理IGMP报文的规则,将IGMP报文中进程所需要的指定信息提取出来,并仅将该提取的指定信息存储于开启IGMP协议时所申请的内存中,即所述缓存模块中,并不是如现有技术中将整个IGMP报文排列在处理队列中,这样就可以批量处理更多的IGMP报文,避免丢弃较多的IGMP报文。
由于IGMP报文可包括IGMP加组报文以及IGMP离组报文,上述缓存模块可根据IGMP报文的不同设为多个缓存模块,或者将该缓存模块进行分区,分别存储IGMP加组报文的指定信息以及IGMP离组报文的指定信息。例如该缓存模块可以分为igmp_join_buf以及igmp_leave_buf,其中,igmp_join_buf用以存储从IGMP加组报文中提取出来的指定信息,igmp_leave_buf用以存储从IGMP离组报文中提取出来的指定信息。
本发明优选地实施方式中,该IGMP报文处理装置还包括信号发送单元,用于在提取到IGMP报文的指定信息后,首先检查所述缓存模块是否为空,若该缓存模块为空,那么可以在将该指定信息存储于缓存模块后,调用socket机制向进程发送信息获取信号,通知进程读取该缓存模块中存储的指定信息,同时内核同步接收新的IGMP报文,解析并存储提取其中的指定信息。
具体地,判断缓存模块是否为空可以为:
内核在将提取的指定信息存储于缓存模块时,对所述缓存模块进行计数。在存储第一个报文的指定信息之前,该缓存模块会被初始化为空,即计数为0,在存储第一个报文的指定信息之后,对该缓存模块计数为1,后续每存储一个指定信息,该计数会递增1。因此在存储指定信息前,若该缓存计数为0,则判断该缓存模块为空。
在判断缓存模块为空时,将该指定信息存储于缓存模块,之后向进程发送信息获取信号,通知进程读取该缓存模块中存储的指定信息。其中向进程发送信息获取信号可以为:
将接收的第一个IGMP报文通过调用socket机制发送至进程,以通知进程可以读取该缓存模块中存储的指定信息。当然,上述判断缓存模块是否为空,以及向进程发送信息获取信号均可以使用现有技术中的其他形式进行,本发明对此并无限制。
以该缓存模块可以分为igmp_join_buf以及igmp_leave_buf为例,在对缓存模块计数时,可以对igmp_join_buf以及igmp_leave_buf分别计数,比如igmp_join_buf以及igmp_leave_buf初始化状态为空,即其计数均为0,将第一个加组报文的指定信息存储于igmp_join_buf后,对该igmp_join_buf计数1,并向进程发送信息获取信号;之后再接收到第一个离组报文时,将该第一个离组报文的指定信息存储于igmp_leave_buf,对该igmp_leave_buf计数1,并再次向进程发送信息获取信号。
通常,进程首次收到信息获取信号到读取指定信息之间,所读取的信息个数比较少(例如几十个),其处理速度会很快。当缓存模块的指定信息增加后,进程在处理信息的时间也会相应增加,这样,内核收报文、解析报文以及存储指定信息的时间也会比较长,进程每次从内核中读取报文的指定信息会增加到几百条甚至上千条。例如要批量处理4K的IGMP报文,使用现有技术的方法会调用4K次socket机制,而使用本发明方法只需要调用十几次socket机制即可,大大减轻了系统socket的频繁调用。
步骤303,进程调用单元在进程接收到信息获取信号时,调用进程读取并处理所述缓存模块储存的所有指定信息。
在进程接收到信息获取信号时,说明内核的缓存模块中已存储有待进程处理的指定信息,进程调用单元调用进程通过ioctl读取并处理缓存模块中已存入的所有指定信息,可以同时向内核发送将缓存模块计数清零的通知,以通知内核将缓存模块的计数清零。内核在接收到将缓存模块计数清零的通知后,一种实现方式可以为:仅清零缓存模块的计数值,后续在判断缓存模块计数为0时(缓存模块为空),将新接收到的IGMP报文的指定信息覆盖该缓存模块内储存的原有指定信息;另一种实现方式可以为:在清零缓存模块计数值的同时,清空缓存模块内的指定信息,后续在判断缓存模块计数为0时(缓存模块为空),将新接收到的IGMP报文的指定信息直接存储于该缓存模块。
进程在处理读取的指定信息时,可以根据指定信息中IGMP报文的目的IP地址(组播组IP地址)以及IGMP报文的接收端口信息为各个接收IGMP报文的端口所对应的组播组分别建立表项,并下发至对应的端口。该表项参考表1所示:
组播组IP地址 | 端口 | 组状态计时器 |
224.0.2.31 | 1 | 130s |
224.0.2.32 | 1 | 3s |
224.0.2.33 | 1 | 130s |
表1
表1为组播组与报文接收端口的对应关系表项,该表项仅为进一步理解本发明而举例说明。表1为表征经由端口1接收到的多个IGMP报文,该多个IGMP报文的目的IP地址分别为:224.0.2.31、224.0.2.32以及224.0.2.33。在建立了表项之后,若再次接收到经由端口1接收的其他组播组的报文,可直接将其他组播组的信息添加至该表1中,无需再重新建立表项。对于经由其他端口接收的IGMP报文,其表项建立与表1一致,在此不再赘述。
本发明装置各使能IGMP功能的端口还设有端口计时器,假设该端口计时器设为60s,那么每60s向与该端口连接的目的IP地址为224.0.0.1的设备发送一次IGMP查询报文,目的IP地址为224.0.0.1的设备在接收到IGMP查询报文后通常会回复IGMP加组报文,以告知有哪些加组信息。另外,为了便于对各组播组的管理,该表项中每一组播组还对应一组状态计时器。假设各组状态计时器计时时长为130s,若向与该端口连接的目的IP地址为224.0.0.1的设备发送IGMP查询报文后的130s内,接收到包含有表1中的某条组播组信息的IGMP加组报文,那么将该组播组对应的组状态计时器的计时时长重置为130s,并保持与该组播组的连接;若向与该端口连接的目的IP地址为224.0.0.1的设备发送IGMP查询报文的130s内,在接收到回应的IGMP加组报文的加组信息未有表1中的某条组播组信息,那么则将表1中该条组播组信息老化掉,并与该组播组断开连接。若接收到源IP地址为224.0.0.1的设备发送的IGMP离组报文,那么根据该IGMP离组报文中的组播组IP地址,将表1中对应的组播组的组状态计时器设置为较短的时长,例如3s,并向目的IP地址为224.0.0.1的设备发送特定组查询报文,报文中包含离开组播组IP地址,对离组的报文进行查询,若在3s内收到回应的IGMP加组报文,且该IGMP加组报文中包含该组播组的加组信息,那么将该计时器计时重置为130s,若在3s内未收包含该组播组加组信息的IGMP加组报文,则将该表项中对应的组播组信息老化,并与该组播组断开连接。
综上所述,本发明提供的IGMP报文处理方法以及装置通过调用内核接收IGMP报文,提取并储存其指定信息,同时通知进程读取并处理该指定信息。与现有技术将接收的整个报文排列在处理队列相比,本发明仅将IGMP报文的指定信息存储于缓存模块,能有效减少内存占用,防止更多的IGMP报文被丢弃。并且在进程处理指定信息时,内核仍在接收新的IGMP报文,使得内核接收以及存储报文与进程处理报文的过程同步进行,进而显著提高IGMP报文的处理效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (8)
1.一种IGMP报文处理方法,应用于组管理协议IGMP设备,其特征在于,所述方法包括:
调用内核接收IGMP报文,解析并提取出所述IGMP报文的指定信息,所述指定信息包括至少一项下述信息:所述IGMP报文的目的IP地址,所述IGMP报文的加组信息、所述IGMP报文的离组信息、所述IGMP报文的接收端口信息;
将所述IGMP报文的指定信息储存于缓存模块;
在进程接收到信息获取信号时,调用进程读取并处理所述缓存模块储存的所有指定信息。
2.如权利要求1所述的方法,其特征在于,所述将IGMP报文的指定信息存储于缓存模块前还包括:
若所述缓存模块为空,向所述进程发送信息获取信号。
3.如权利要求2所述的方法,其特征在于,向所述进程发送信息获取信号具体为:通过调用套接字socket向进程发送信息获取信号;
所述读取缓存模块储存的所有指定信息具体为:通过I/O通道管理ioctl读取所述缓存模块储存的所有指定信息。
4.如权利要求1所述的方法,其特征在于,所述调用内核接收IGMP报文,解析并提取出所述IGMP报文的指定信息具体包括:
在调用内核接收到报文后,根据所述报文的协议号识别出IGMP报文;
判断接收所述IGMP报文的端口是否使能IGMP功能,若是,解析并提取出所述IGMP报文的指定信息。
5.一种IGMP报文处理装置,应用于IGMP设备,其特征在于,所述装置包括:
内核调用单元,用于调用内核接收IGMP报文,解析并提取出所述IGMP报文的指定信息,所述指定信息包括至少一项下述信息:所述IGMP报文的目的IP地址,所述IGMP报文的加组信息、所述IGMP报文的离组信息、所述IGMP报文的接收端口信息;
信息存储单元,用于将所述IGMP报文的指定信息存储于缓存模块;
进程调用单元,用于在进程接收到信息获取信号时,调用进程读取并处理所述缓存模块储存的所有指定信息。
6.如权利要求5所述的装置,其特征在于,所述装置还包括:
信号发送单元,用于在所述缓存模块为空时,向所述进程发送信息获取信号。
7.如权利要求6所述的装置,其特征在于,所述信号发送单元具体用于:通过调用socket向进程发送信息获取信号;
所述进程调用单元具体用于:通过ioctl读取所述缓存模块储存的所有指定信息。
8.如权利要求5所述的装置,其特征在于,所述内核调用单元包括:
报文识别子单元,用于在调用内核接收到报文后,根据所述报文的协议号识别出IGMP报文;
解析执行子单元,用于判断接收所述IGMP报文的端口是否使能IGMP功能,若是,解析并提取出所述IGMP报文的指定信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410366591.4A CN105306373B (zh) | 2014-07-29 | 2014-07-29 | 一种igmp报文处理方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410366591.4A CN105306373B (zh) | 2014-07-29 | 2014-07-29 | 一种igmp报文处理方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105306373A CN105306373A (zh) | 2016-02-03 |
CN105306373B true CN105306373B (zh) | 2019-03-15 |
Family
ID=55203141
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410366591.4A Active CN105306373B (zh) | 2014-07-29 | 2014-07-29 | 一种igmp报文处理方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105306373B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1359727A2 (en) * | 2002-04-08 | 2003-11-05 | Wiznet Corp. | Internet protocol system using hardware protocol and relating parallel data processing method |
CN1539227A (zh) * | 2001-03-02 | 2004-10-20 | �йȲ��� | 用于对查询节点分类的方法和装置 |
CN101834685A (zh) * | 2010-04-16 | 2010-09-15 | 华为技术有限公司 | 1588报文提取处理方法及设备 |
CN102694734A (zh) * | 2012-06-11 | 2012-09-26 | 烽火通信科技股份有限公司 | 二层交换设备基于Linux内核桥实现组播的方法 |
CN103457861A (zh) * | 2013-08-23 | 2013-12-18 | 深圳市共进电子股份有限公司 | 一种ONU的基于VLAN的IGMP Snooping实现方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8189584B2 (en) * | 2009-07-27 | 2012-05-29 | Media Patents, S. L. | Multicast traffic management in a network interface |
CN103634229B (zh) * | 2013-11-26 | 2017-09-29 | 华为技术有限公司 | 一种片间通讯方法及控制装置 |
-
2014
- 2014-07-29 CN CN201410366591.4A patent/CN105306373B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1539227A (zh) * | 2001-03-02 | 2004-10-20 | �йȲ��� | 用于对查询节点分类的方法和装置 |
EP1359727A2 (en) * | 2002-04-08 | 2003-11-05 | Wiznet Corp. | Internet protocol system using hardware protocol and relating parallel data processing method |
CN101834685A (zh) * | 2010-04-16 | 2010-09-15 | 华为技术有限公司 | 1588报文提取处理方法及设备 |
CN102694734A (zh) * | 2012-06-11 | 2012-09-26 | 烽火通信科技股份有限公司 | 二层交换设备基于Linux内核桥实现组播的方法 |
CN103457861A (zh) * | 2013-08-23 | 2013-12-18 | 深圳市共进电子股份有限公司 | 一种ONU的基于VLAN的IGMP Snooping实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105306373A (zh) | 2016-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101494143B1 (ko) | 무선 자원 최적화 방법, 장치 및 시스템 | |
CN106603736B (zh) | Mac地址处理方法及装置 | |
CN101119246B (zh) | 数据包抽样统计的方法及装置 | |
CN106685827B (zh) | 一种下行报文的转发方法及ap设备 | |
CN110087226B (zh) | 流量统计方法、装置、存储介质及电子装置 | |
KR20160142784A (ko) | 패킷 손실 감지 방법, 장치, 및 시스템 | |
CN107204924B (zh) | 链路发现方法及装置 | |
CN109151245B (zh) | 基于fpga的图像数据传输方法、系统、存储介质及fpga | |
CN103327129A (zh) | 针对多wan口网关设备的域名解析方法 | |
CN104123942B (zh) | 一种语音识别方法及系统 | |
CN105306373B (zh) | 一种igmp报文处理方法以及装置 | |
CN102025730B (zh) | 基于http协议的数据传输装置及其实现方法 | |
CN112714159A (zh) | 消息转发方法和装置、存储介质及电子装置 | |
CN109547287B (zh) | 带宽测试方法及装置、存储介质 | |
CN106658388A (zh) | 蓝牙网关 | |
CN111064729A (zh) | 报文的处理方法及装置、存储介质和电子装置 | |
CN113992364B (zh) | 一种网络数据包阻断优化方法以及系统 | |
CN113206794B (zh) | 一种转发限速方法及装置 | |
US10050897B2 (en) | Control method and topology network structure for transmitting packet | |
CN113422760B (zh) | 数据传输方法、装置、电子装置和存储介质 | |
CN112188562B (zh) | 中继基站的多播调度方法和装置、存储介质及电子装置 | |
CN110336759B (zh) | 基于rdma的协议报文转发方法及装置 | |
CN108810829B (zh) | 一种彩信拦截处理方法及装置 | |
CN112612670A (zh) | 一种会话信息统计方法、装置、交换设备及存储介质 | |
CN112738803A (zh) | 一种终端设备入网方法、装置及网关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: Binjiang District and Hangzhou city in Zhejiang Province Road 310051 No. 68 in the 6 storey building Applicant after: Hangzhou Dipu Polytron Technologies Inc Address before: Binjiang District and Hangzhou city in Zhejiang Province Road 310051 No. 68 in the 6 storey building Applicant before: Hangzhou Dipu Technology Co., Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |