一种报文处理方法和装置制造方法
【专利摘要】本发明提出一种报文处理方法,应用于网络设备,所述方法包括:为本地每台虚拟机分别创建连接池;将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中;当本地任一虚拟机发送或接收报文时,基于发送或接收报文的连接控制信息,在所述连接池中匹配对应的连接,并通过匹配到的连接发送或接收该报文。通过本发明可以提高对报文的处理效率。
【专利说明】一种报文处理方法和装置
【技术领域】
[0001]本发明涉及通信【技术领域】,尤其涉及一种报文处理方法和装置。
【背景技术】
[0002]请参见图1,网络协议栈作为一个基础功能组件,可以为分布式设备上的各节点之间提供通信服务。其中所述节点,对应于一个CPU系统,通常分布式设备上的一块业务板上可存在一个或者多个节点。
[0003]当分布式设备支持虚拟化技术后,上述通信过程则发生在节点上的虚拟机上。在虚拟化技术中,各虚拟机之间的通信互相隔离,虚拟机之间的通信需要由网络协议栈提供有连接、可靠、保序的传输机制,该机制的最终实现依赖于网络协议栈的传输层。
[0004]在非虚拟化的条件下,传输层报文头中通常包括传输序号、消息类型等信息。而在虚拟化的条件下,传输层报头中除了传输序号、消息类型等信息以外,报文头中还包括虚拟机ID。
[0005]请参见图2,为了实现虚拟机之间的通信互相隔离,所有虚拟机在发送报文时,都从自己的用户态进入协议栈的传输层,为了区分不同的虚拟机的每个报文,每个报文在协议栈的传输层进行汇聚时携带自身的虚拟机ID ;在接收报文时,所有虚拟机的报文都从节点的物理层。网络层进入协议栈的传输层,在传输层统一对这些报文进行分发,根据报文中不同的虚拟机ID上送到不同的虚拟机的应用程序中。
[0006]然而,由于物理层、网络层是无连接的、不可靠的,并且对虚拟化不感知。当虚拟化以后,传输层维护的连接数将于虚拟机的个数呈倍数关系。当系统支持大量虚拟机后,任一虚拟机发送或者接收报文时,都需要遍历所有虚拟机的全部连接,才可以匹配到自身的指定连接,报文的处理效率低下。
【发明内容】
[0007]有鉴于此,本发明提出一种报文处理方法,应用于网络设备,所述网络设备上被预先配置了一台或多台虚拟机,所述方法包括:
[0008]为本地每台虚拟机分别创建连接池;
[0009]将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中;
[0010]当本地任一虚拟机发送或接收报文时,基于发送或接收报文的连接控制信息,在所述连接池中匹配对应的连接,并通过匹配到的连接发送或接收该报文。
[0011]优选的,所述将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中包括:
[0012]为发送的报文创建连接,并为该连接分配连接控制信息;
[0013]获取所述报文中的虚拟机ID ;
[0014]根据该虚拟机的ID查找已创建的连接池;
[0015]将为所述报文创建的连接添加到查找到的连接池中。
[0016]优选的,所述连接控制信息包括:本地端口号以及对端端口号;
[0017]当将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中后,所述方法还包括:
[0018]以连接池中各连接的本地端口号和远端端口为参数进行hash计算;
[0019]以计算出的hash值作为查找关键字对各连接进行分组。
[0020]优选的,所述基于发送或者接收报文的连接控制信息,在所述连接池中匹配对应的连接包括:
[0021]根据该报文所在虚拟机的ID查找连接池;
[0022]以该报文中的本地端口号和对端端口号为参数进行hash计算;
[0023]根据计算出的hash值在查找到的连接池中查找连接分组;
[0024]遍历查找到的连接分组中的各连接,匹配指定的连接。
[0025]优选的,所述连接控制信息还包括:本地主机地址和对端主机地址;
[0026]所述遍历查找到的连接分组中的各连接,匹配指定的连接包括:
[0027]根据所述本地主机地址和所述对端主机地址匹配指定的连接。
[0028]优选的,所述方法还包括:
[0029]当匹配到的连接发生关闭时,将该连接从对应的连接池中释放;
[0030]以连接池为单位对丢失报文进行重传;
[0031]以连接池为单位向报文发送端回应ACK报文。
[0032]本发明还提出一种报文处理装置,应用于网络设备,所述网络设备上被预先配置了一台或多台虚拟机,所述装置包括:
[0033]创建单元,用于为本地每台虚拟机分别创建连接池;
[0034]归类单元,用于将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中;
[0035]匹配单元,用于在本地任一虚拟机发送或接收报文时,基于发送或接收报文的连接控制信息,在所述连接池中匹配对应的连接,并通过匹配到的连接发送或接收该报文。
[0036]优选的,所述归类单元进一步用于:
[0037]为发送的报文创建连接,并为该连接分配连接控制信息;
[0038]获取所述报文中的虚拟机ID ;
[0039]根据该虚拟机的ID查找已创建的连接池;
[0040]将为所述报文创建的连接归类到查找到的连接池中。
[0041]优选的,所述连接控制信息包括:本地端口号以及对端端口号;
[0042]所述创建单元进一步用于:
[0043]以连接池中各连接的本地端口号和远端端口为参数进行hash计算;
[0044]以计算出的hash值作为查找关键字对各连接进行分组。
[0045]优选的,所述匹配单元进一步用于:
[0046]根据该报文所在虚拟机的ID查找连接池;
[0047]以该报文中的本地端口号和对端端口号为参数进行hash计算;
[0048]根据计算出的hash值在查找到的连接池中查找连接分组;
[0049]遍历查找到的连接分组中的各连接,匹配指定的连接。
[0050]优选的,所述连接信息还包括:本地主机地址和对端主机地址;
[0051]所述匹配单元进一步用于:根据所述本地主机地址和所述对端主机地址匹配指定的连接。
[0052]优选的,所述匹配单元进一步用于:
[0053]当匹配到的连接发生关闭时,将该连接从对应的连接池中释放;
[0054]以连接池为单位对丢失报文进行重传;
[0055]以连接池为单位向报文发送端回应ACK报文。
[0056]本发明通过为本地虚拟机创建连接池,将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中;当任一虚拟机发送或接收报文时,在对应的地址池中匹配指定的连接,避免了遍历本地所有虚拟机的全部连接,从而提高了对报文的处理效率。
【专利附图】
【附图说明】
[0057]图1是现有技术中分布式设备中节点间通信模型;
[0058]图2是现有技术中虚拟机通过协议栈收发报文示意图;
[0059]图3是本发明一种示例性实施方式中示出的一种报文处理方法的流程图;
[0060]图4是本发明一种示例性实施方式示出的多虚拟机条件下创建连接池的示意图;
[0061]图5是本发明一种示例性实施方式示出的一种连接池的组织形式。
[0062]图6是本发明一种示例性实施方式示出的一种虚拟机报文发送过程的流程图;
[0063]图7是是本发明一种示例性实施方式示出的一种虚拟机报文接收过程的流程图;
[0064]图8是本发明一种示例性实施方式中示出的一种报文处理装置的框图;
[0065]图9是本发明一种示例性实施方式示出的一种承载所述报文处理装置的网络设备的硬件结构图。
【具体实施方式】
[0066]本发明通过为本地虚拟机创建连接池,将隶属于同一个虚拟机的连接归类到同一个连接池中,从而当任一虚拟机发送或接收报文时,只在对应的地址池中匹配指定的连接。由于避免了遍历本地所有虚拟机的全部连接,从而显著提高了对报文的处理效率。
[0067]下面结合附图并举实施例,对本发明进行详细描述。
[0068]请参见图3,本发明提出一种报文处理方法,应用于网络设备,所述网络设备上,所述方法执行如下步骤:
[0069]步骤301、为本地每台虚拟机分别创建连接池;
[0070]步骤302、将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中;
[0071]步骤303、当本地任一虚拟机发送或接收报文时,基于发送或接收报文的连接控制信息,在所述连接池中匹配对应的连接,并通过匹配到的连接发送或接收该报文。
[0072]请参见图4,在本实施例中,可以为本地每台虚拟机分别创建一个对应的连接池。每个创建完成的连接池,用于汇聚该连接池对应的虚拟机上的所有连接,可以通过对应的虚拟机ID进行查找。
[0073]由于每个连接池用于汇聚对应虚拟机上的所有连接,因此需要对本地每台虚拟机中的连接进行归类处理,将隶属于同一台虚拟机的连接归类到对应的连接池中。在对本地各虚拟机中的连接进行归类处理时,可以在本地各虚拟机发送报文时来实现。
[0074]具体地,由于不同节点设备上虚拟机之间的通信是基于TCP/IP(Transmiss1nControl Protocol/Internet Protocol,传输控制协议/因特网互联协议)来实现的,因此位于不同节点设备上的虚拟机在互相收发报文时,首先需要建立TCP连接。TCP连接的建立可以是虚拟机在开始发送报文时直接创建;也可以是在收发报文之前建立,在虚拟机开始发送报文时,再从已建立的TCP连接中为该报文指定连接;其中,TCP连接的具体建立过程,请参考现有技术,本实施例中不再详述。
[0075]在本实施例中,虚拟机开始发送报文时,可以首先检查是否已在本地为该报文创建或指定了连接,如果已为该报文创建或指定了连接,那么直接通过已创建或已指定的连接发送该报文;如果没有为该报文创建或指定连接,表明该报文可能是首报文,那么为该报文创建或指定连接,并从系统资源中为该连接分配对应的连接控制信息。
[0076]其中,所述连接控制信息通常包括为本次报文发送指定的本地端口号、对端端口号、本地主机地址以及对端端口号等信息。当为该报文指定了连接并分配了连接控制信息后,获取该报文中的虚拟机ID,以该虚拟机ID为索引遍历已创建的地址池,查找与该虚拟机对应的连接池,当查找到对应的连接池后,将为该报文创建的连接添加到查找到的连接池中。
[0077]当然,在具体实现时,当通信结束、虚拟机退出或者进程退出时,通常需要关闭对应的连接,因此当连接池中的连接发生关闭事件时,需要在该连接对应的连接池中摘除该连接,释放资源。
[0078]在完成对本地每台虚拟机中连接的归类后,此时每个连接池中都汇聚了对应虚拟机中的全部连接。然而,同一台虚拟机中的连接数量,通常取决于该虚拟机所承载的业务数量。当一台虚拟机所承载的业务数量过多时,该虚拟机中的连接数量也会过多,从而造成每个连接池中的汇聚的连接数量也过多。
[0079]当连接池中汇聚的连接数量过多时,虚拟机在发送或接收报文匹配连接时,需要遍历的连接势必增多,从而会降低报文的处理效率。因此,在本实施例中,还可以对连接池中的连接进行进一步的分组,以减少虚拟机在收发报文时,遍历连接的数量。
[0080]在对连接池中的连接进行分组时,可以根据各连接的连接控制信息中的本地端口号和对端端口为参数进行哈希hash计算,将计算出的hash值作为key (即所述查找关键字)对各连接进行分组。
[0081]具体地,请参见图5,可以分别对连接池中的每条连接按照上述方法计算hash值,然后将计算出的hash值相同的连接以双向链表的形式在地址池中组织起来,分成若干个连接分组,每一个连接分组对应一个独立的key值。当然,对地址池中的连接进行分组时,在具体实现时也可以采用其他分组方式,以上仅为本实施例示出的一种示例性实施方式,并不用于限定本发明。
[0082]以下结合【具体实施方式】,对虚拟机发送和接收报文的具体过程进行详细描述。
[0083]在本实施例中,虚拟机在发送报文时,该报文从虚拟机的用户态进入系统内核态,从物理层、网络层进入系统的传输层。在传输层对收到的报文进行处理时,首先解析报文头部,获取该报文中的虚拟机ID,然后以该虚拟机ID为索引遍历地址池,查找与该虚拟机对应的地址池。当找到对应的地址池后,再以该报文的本地端口号和对端端口号为参数进行hash计算,根据计算出的hash值为key,在查找到的地址池中查找对应的连接分组,然后遍历该连接分组中的连接,就能匹配到指定的连接。
[0084]例如,在一种优选的方式中,在遍历查找到的连接分组中的连接时,可以将报文中的本地主机地址和对端主机地址作为索引值,在该连接分组中匹配指定的连接。通过本地主机地址和对端主机地址,可以在连接分组中准确区分出为本次报文发送所指定的连接。
[0085]请参见图6,当在地址池内命中了指定的连接后,通过该连接发送该报文,同时将该报文放入本虚拟机对应的重传队列,为该报文指定重传序号,并激活重传定时器,定时按顺序发送重传队列中积压的消息。
[0086]其中,值得说明的是,虚拟机发送出去的报文默认情况下均会被放入重传队列,当收到该报文接收端发送的确认ACK消息后,表明该报文成功发送,此时需要将该报文从重传队列中移除,并更新重传队列中其他消息的重传序号。
[0087]等同的,虚拟机在接收报文时,报文通过物理层、网络层进入传输层;传输层在处理报文时,首先解析报文头部,获取该报文中的虚拟机ID,然后以该虚拟机ID为索引遍历地址池,查找与该虚拟机对应的地址池。当找到对应的地址池后,再以该报文的本地端口号和对端端口号为参数进行hash计算,根据计算出的hash值为key,在查找到的地址池中查找对应的连接分组,然后遍历该连接分组中的连接,匹配指定的连接。其中,在遍历查找到的连接分组中的连接时,仍然可以将报文中的本地主机地址和对端主机地址作为索引值,在该连接分组中匹配指定的连接。
[0088]请参见图7,当在地址池内命中了指定的连接后,系统对该报文进行序号检查等传输层处理,如果报文序号错误,则丢弃该报文。如果序号正确,则进一步检查该报文是否乱序到达,如果该报文乱序到达,那么将该报文放入本连接的等待队列,等到乱序后到的报文。如果该报文为顺序到达,那么直接将该报文放入套接字Socket的接收缓冲区,等待虚拟机中的应用程序主动调用该报文,并同时向该报文的接收端回应ACK报文。
[0089]在本实施例中,在发送周期内没有收到接收端回应的ACK报文时,需要对该报文做重传处理,然而现有技术中,同一个节点中的多个虚拟机使用同一个重传定时器,虚拟机之间在协议栈上处于一种耦合状态,很容易造成重传报文过多的情况。当重传的报文过多,会分多次重传,从而造成某虚拟机的重传报文被长时间推迟发送的情况。因此,本发明引入了连接池后,减少了虚拟机之间在协议栈上的耦合,可以以连接池为单位对报文进行重传处理,可以有效减少报文重传过程中物理链路的匹配时间,从而避免了重传报文被长时间推迟发送的情况。
[0090]在本实施例中,当报文在接收端被正确处理,并成功放入Socket的接收缓冲区后,会向报文的发送端进行报文确认,向所述发送端回应ACK报文,发送端在收到该ACK报文后,把对应的报文移除重传队列。其中向报文的发送端进行报文确认分为立即发送和延迟发送两种,然而在现有技术中,对于延迟确认的情况,传统的处理仍然是以节点为单位进行,因此与报文重传一样,同样会造成某些虚拟机被长时间延后进行报文确认的情况,从而引发虚拟机工作停顿。因此,在本实施例中,可以以连接池为单位对报文进行报文确认,向报文的发送端回应ACK报文,由于引入了连接池后可以有效减少报文确认过程中物理链路的匹配时间,因此可以避免某些虚拟机被长时间延后进行报文确认的情况。
[0091 ] 通过以上描述可知,本发明通过为本地虚拟机创建连接池,将隶属于同一个虚拟机的连接归类到同一个连接池中,从而当任一虚拟机发送或接收报文时,只在对应的地址池中匹配指定的连接。由于避免了遍历本地所有虚拟机的全部连接,从而显著提高了对报文的处理效率。同时,由于引入了地址池,可以有效减少虚拟机之间在协议栈上的耦合,提高了报文的重传速度以及报文确认的速度。
[0092]请参见图8,本发明还提出一种报文处理装置80,应用于网络设备上,所述网络设备上被预先配置了一台或多台虚拟机;其中,请参见图9,作为承载所述报文处理装置80的网络设备所涉及的硬件架构中,通常包括CPU、内存、非易失性存储器、网络接口以及内部总线等。以软件实现为例,本发明装置80通常可以理解为加载在内存中的计算机程序,通过CPU运行之后形成的软硬件相结合的逻辑装置;所述装置80包括:
[0093]创建单元801,用于为本地每台虚拟机分别创建连接池;
[0094]归类单元802,用于将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中;
[0095]匹配单元803,用于在本地任一虚拟机发送或接收报文时,基于发送或接收报文的连接控制信息,在所述连接池中匹配对应的连接,并通过匹配到的连接发送或接收该报文。
[0096]在本实施例中,所述归类单元802进一步用于:
[0097]为发送的报文创建连接,并为该连接分配所述连接控制信息;
[0098]获取所述报文中的虚拟机ID ;
[0099]根据该虚拟机的ID查找已创建的连接池;
[0100]将为所述报文创建的连接归类到查找到的连接池中。
[0101]在本实施例中,所述连接控制信息包括本地端口号以及对端端口号;
[0102]所述创建单元801进一步用于:
[0103]以连接池中各连接的本地端口号和远端端口为参数进行hash计算;
[0104]以计算出的hash值作为查找关键字对各连接进行分组。
[0105]在本实施例中,所述匹配单元803进一步用于:
[0106]根据该报文所在虚拟机的ID查找连接池;
[0107]以该报文中的本地端口号和对端端口号为参数进行hash计算;
[0108]根据计算出的hash值在查找到的连接池中查找连接分组;
[0109]遍历查找到的连接分组中的各连接,匹配指定的连接。
[0110]在本实施例中,所述连接信息还包括本地主机地址和对端主机地址;
[0111]所述匹配单元803进一步用于:
[0112]根据所述本地主机地址和所述对端主机地址匹配指定的连接。
[0113]在本实施例中,所述匹配单元803进一步用于:
[0114]当匹配到的连接发生关闭时,将该连接从对应的连接池中释放;
[0115]以连接池为单位对丢失报文进行重传;
[0116]以连接池为单位向报文发送端回应ACK报文。
[0117]本领域技术人员可以理解实施例中的装置中的单元可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的单元可以合并为一个单元,也可进一步拆分成多个子单元。上述发明实施例编号仅仅为了描述,不代表实施例的优劣。
[0118]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种报文处理方法,应用于网络设备,所述网络设备上被预先配置了一台或多台虚拟机,其他特征在于,所述方法包括: 为本地每台虚拟机分别创建连接池; 将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中; 当本地任一虚拟机发送或接收报文时,基于发送或接收报文的连接控制信息,在所述连接池中匹配对应的连接,并通过匹配到的连接发送或接收该报文。
2.如权利要求1所述的方法,其特征在于,所述将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中包括: 为发送的报文创建连接,并为该连接分配连接控制信息; 获取所述报文中的虚拟机ID ; 根据该虚拟机的ID查找已创建的连接池; 将为所述报文创建的连接添加到查找到的连接池中。
3.如权利要求1所述的方法,其特征在于,所述连接控制信息包括:本地端口号以及对端端口号; 当将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中后,所述方法还包括: 以连接池中各连接的本地端口号和远端端口为参数进行哈希hash计算; 以计算出的hash值作为查找关键字对各连接进行分组。
4.如权利要求3所述的方法,其特征在于,所述基于发送或者接收报文的连接控制信息,在所述连接池中匹配对应的连接包括: 根据该报文所在虚拟机的ID查找连接池; 以该报文中的本地端口号和对端端口号为参数进行hash计算; 根据计算出的hash值在查找到的连接池中查找连接分组; 遍历查找到的连接分组中的各连接,匹配指定的连接。
5.如权利要求4所述的方法,其特征在于,所述连接控制信息还包括:本地主机地址和对端主机地址; 所述遍历查找到的连接分组中的各连接,匹配指定的连接包括: 根据所述本地主机地址和所述对端主机地址匹配指定的连接。
6.如权利要求1所述的方法,其特征在于,所述方法还包括: 当匹配到的连接发生关闭时,将该连接从对应的连接池中释放; 以连接池为单位对丢失报文进行重传; 以连接池为单位向报文发送端回应ACK报文。
7.一种报文处理装置,应用于网络设备,所述网络设备上被预先配置了一台或多台虚拟机,其特征在于,所述装置包括: 创建单元,用于为本地每台虚拟机分别创建连接池; 归类单元,用于将隶属于同一台虚拟机的连接归类到为该虚拟机创建的连接池中;匹配单元,用于在本地任一虚拟机发送或接收报文时,基于发送或接收报文的连接控制信息,在所述连接池中匹配对应的连接,并通过匹配到的连接发送或接收该报文。
8.如权利要求7所述的装置,其特征在于,所述归类单元进一步用于: 为发送的报文创建连接,并为该连接分配连接控制信息; 获取所述报文中的虚拟机ID ; 根据该虚拟机的ID查找已创建的连接池; 将为所述报文创建的连接归类到查找到的连接池中。
9.如权利要求7所述的装置,其特征在于,所述连接控制信息包括:本地端口号以及对端端口号; 所述创建单元进一步用于: 以连接池中各连接的本地端口号和远端端口为参数进行hash计算; 以计算出的hash值作为查找关键字对各连接进行分组。
10.如权利要求9所述的装置,其特征在于,所述匹配单元进一步用于: 根据该报文所在虚拟机的ID查找连接池; 以该报文中的本地端口号和对端端口号为参数进行hash计算; 根据计算出的hash值在查找到的连接池中查找连接分组; 遍历查找到的连接分组中的各连接,匹配指定的连接。
11.如权利要求10所述的装置,其特征在于,所述连接信息还包括:本地主机地址和对端主机地址; 所述匹配单元进一步用于:根据所述本地主机地址和所述对端主机地址匹配指定的连接。
12.如权利要求7所述的装置,其特征在于,所述匹配单元进一步用于: 当匹配到的连接发生关闭时,将该连接从对应的连接池中释放; 以连接池为单位对丢失报文进行重传; 以连接池为单位向报文发送端回应ACK报文。
【文档编号】H04L29/06GK104184729SQ201410411942
【公开日】2014年12月3日 申请日期:2014年8月20日 优先权日:2014年8月20日
【发明者】李华生 申请人:杭州华三通信技术有限公司