数据包解析的方法和服务器与流程

文档序号:27197775发布日期:2021-11-03 13:04阅读:218来源:国知局
数据包解析的方法和服务器与流程

1.本发明涉及通信技术领域,具体涉及数据包解析的方法和服务器。


背景技术:

2.vxlan(virtual extensible lan,可扩展虚拟局域网络)可以将二层数据包封装到三层网络,很好地解决了现有vlan(virtual local area network,虚拟局域网)技术无法满足大二层网络需求的问题。
3.同一个服务进程包括多个线程,不同的线程可以共享服务进程中的数据和规则,其中,多个线程需要分别对网卡的数据包执行不同的操作以得到对应的多个目标数据,并且每一线程得到的目标无法和其它线程共享,并且,至少两个线程需要执行同一的操作以分别获取对应的目标数据才能进行后续操作,导致服务进程整体的工作效率较低。
4.因此,有必要提供数据包解析的方法和服务器,以提高服务进程整体的工作效率的。


技术实现要素:

5.本发明实施例提供数据包解析的方法和服务器,通过在网卡的缓存区中开辟第二缓存区,第一线程获取内层ip,通过隧道规则判断出原始数据是否访问业务系统,若是,则将根据内层ip和隧道规则确定对应的隧道id保存至第二缓存区以供第二线程获取和使用;以解决目前的同一个服务进程中第二线程需要执行与第一线程所执行的操作相同的操作获取相应的信息,导致服务进程整体的工作效率较低的问题。
6.本发明实施例提供数据包解析的方法,应用于服务器,所述服务器包括网卡和服务进程,所述网卡包括缓存区,所述缓存区包括第一缓存区和第二缓存区,所述服务进程包括第一线程和第二线程,所述数据包解析的方法包括:
7.所述网卡接收第一vxlan数据包,并将所述第一vxlan数据包保存至所述第一缓存区,所述第一vxlan数据包包括第一封装数据和原始数据,所述第一封装数据包括vni和外层ip,所述原始数据包括内层ip;
8.所述第一线程从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型;
9.若所述隧道类型为所述预设隧道类型,则所述第一线程将所述隧道类型和所述vni保存至所述第二缓存区;
10.所述第一线程判断所述隧道类型是否为第一预设隧道类型;
11.若所述隧道类型为所述第一预设隧道类型,则所述第一线程从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统;
12.若访问业务系统,则所述第一线程根据所述内层ip将对应的隧道id保存至所述第二缓存区;
13.所述第二线程从所述第二缓存区中提取所述vni和所述隧道id,并根据所述vni和
所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包。
14.在一实施例中,所述第二线程从所述第二缓存区中提取所述vni和所述隧道id,并根据所述vni和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包的步骤之前,包括:
15.若所述隧道类型不为所述第一预设隧道类型,则所述第二线程判断所述隧道类型是否为第二预设隧道类型;
16.若所述隧道类型为第二预设隧道类型,则所述第二线程从所述第二缓存区中提取所述vni,并根据所述vni确定对应的隧道id。
17.在一实施例中,所述第一线程从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型的步骤,包括:
18.所述第一线程获取所述外层ip,并根据配置表中确定对应的隧道类型;
19.所述第一线程根据隧道类型,判断对应的隧道类型是否为预设隧道类型。
20.在一实施例中,所述第一线程从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统的步骤,包括:
21.所述第一线程从所述第一vxlan数据包中获取所述内层ip,并在隧道规则中查找多个业务ip段;
22.所述第一线程根据所述内层ip是否包含于所述多个业务ip段中的其中一个业务ip段判断是否访问业务系统。
23.在一实施例中,所述第一线程从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型的步骤之前,包括:
24.所述网卡向所述第一线程发送所述第一vxlan数据包的指针;
25.所述第一线程根据所述第一vxlan数据包的指针访问所述第一vxlan数据包。
26.在一实施例中,所述第二线程从所述第二缓存区中提取所述vni、所述隧道类型和所述隧道id,并根据所述vni、所述隧道类型和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包的步骤之前,包括:
27.所述网卡向所述第二线程发送所述原始数据的指针;
28.所述第二线程根据所述原始数据的指针访问所述原始数据。
29.在一实施例中,所述第二线程从所述第二缓存区中提取所述vni、所述隧道类型和所述隧道id,并根据所述vni、所述隧道类型和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包的步骤之后,包括:
30.所述网卡根据所述第二vxlan数据包确定对应的发送隧道;
31.所述网卡根据所述发送隧道发送所述第二vxlan数据包。
32.本发明实施例提供服务器,所述服务器包括网卡和服务进程,所述网卡包括缓存区,所述缓存区包括第一缓存区和第二缓存区,所述服务进程包括第一线程和第二线程;
33.所述网卡用于接收第一vxlan数据包,并将所述第一vxlan数据包保存至所述第一缓存区,所述第一vxlan数据包包括第一封装数据和原始数据,所述第一封装数据包括vni和外层ip,所述原始数据包括内层ip;
34.所述第一线程用于从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型;
35.若所述隧道类型为所述预设隧道类型,则所述第一线程还用于将所述隧道类型和所述vni保存至所述第二缓存区;
36.所述第一线程还用于判断所述隧道类型是否为第一预设隧道类型;
37.若所述隧道类型为所述第一预设隧道类型,则所述第一线程还用于从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统;
38.若访问业务系统,则所述第一线程还用于根据所述内层ip将对应的隧道id保存至所述第二缓存区;
39.所述第二线程用于从所述第二缓存区中提取所述vni、所述隧道类型和所述隧道id,并根据所述vni、所述隧道类型和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包。
40.在一实施例中,所述第一线程还用于获取所述外层ip,并根据配置表中确定对应的隧道类型;以及
41.所述第一线程还用于根据所述隧道类型,判断对应的隧道类型是否为预设隧道类型。
42.在一实施例中,所述第一线程还用于从所述第一vxlan数据包中获取所述内层ip,并在隧道规则中查找多个业务ip段;以及
43.所述第一线程还用于根据所述内层ip是否包含于所述多个业务ip段中的其中一个业务ip段判断是否访问业务系统。
44.本发明提供了数据包解析的方法和服务器,服务器包括网卡和服务进程,所述网卡包括缓存区,所述缓存区包括第一缓存区和第二缓存区,所述服务进程包括第一线程和第二线程,第一线程从第一封装数据获取外层ip和vni,若对应的隧道类型为预设隧道类型,则将隧道类型和vni保存至第二缓存区;进一步的,若对应的隧道类型为第一预设隧道类型,则获取内层ip,若判断出为访问业务系统,则根据内层ip将对应的隧道id保存至第二缓存区;第二线程从第二缓存区中提取vni和隧道id以确定第二封装数据,将第二封装数据保存至第二缓存区,使得位于原始数据和第二封装数据共同构成第二vxlan数据包。该方案通过在网卡中的缓存区中开辟扩展信息缓存,将第一线程通过数据包解析得到的对应的隧道id、以及处理第一vxlan数据包得到的vni均保存至第二缓存区以供第二线程获取和使用,避免第二线程执行数据包解析或者其它与第一线程重复的步骤;并且在所述第一线程和所述第二线程获取所述第一vxlan数据包中的相应信息以及执行相应操作的同时,仍然保证所述第一vxlan数据包的完整性,使得其他的线程可以正常获取所述第一vxlan数据包的信息,避免服务器重新从外界获取所述第一vxlan数据包以供给其它线程使用。综上,本
方案提高了服务进程整体的工作效率。
附图说明
45.下面通过附图来对本发明进行进一步说明。需要说明的是,下面描述中的附图仅仅是用于解释说明本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
46.图1为本发明实施例提供的数据包解析的系统的场景示意图;
47.图2为本发明实施例提供的一种网卡中缓存区的区间示意图;
48.图3为本发明实施例提供的第一种数据包解析的方法的流程示意图;
49.图4为本发明实施例提供的另一种网卡中缓存区的区间示意图;
50.图5为本发明实施例提供的第一vxlan数据包的结构示意图;
51.图6为本发明实施例提供的第二种数据包解析的方法的流程示意图;
52.图7为本发明实施例提供的第三种数据包解析的方法的流程示意图;
53.图8为本发明实施例提供的第四种数据包解析的方法的流程示意图;
54.图9为本发明实施例提供的第五种数据包解析的方法的流程示意图;
55.图10为本发明实施例提供的第六种数据包解析的方法的流程示意图;
56.图11为本发明实施例提供的第七种数据包解析的方法的流程示意图;
57.图12为本发明实施例提供的数据包解析的方法的信令交互示意图;
58.图13为本发明实施例提供的一种服务器的结构示意图;
59.图14为本发明实施例提供的另一种服务器的结构示意图。
具体实施方式
60.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
61.本发明中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
62.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
63.本发明实施例提供的数据包解析的方法的执行主体,可以为本发明实施例提供的用于执行数据包解析的方法的服务器,或者集成了用于执行数据包解析的方法的服务器的电子设备,所述用于执行数据包解析的方法的服务器可以采用硬件或者软件的方式实现。
64.下面首先对本发明实施例中涉及到的一些基本概念进行介绍。
65.网卡:一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,使得用户可以通过电缆或无线相互连接。每一个网卡都有一个被称为mac地址的独一无二的48位串行号,它被写在网卡上的一块rom中。网卡并不是独立的自治单元,因为网卡本身不带电源而是必须使用所插入的计算机的电源,并受该计算机的控制。当网卡收到一个有差错的帧时,它就将这个帧丢弃而不必通知它所插入的计算机。当网卡收到一个正确的帧时,它就使用中断来通知该计算机并交付给协议栈中的网络层。当计算机要发送一个ip数据包时,它就由协议栈向下交给网卡组装成帧后发送到局域网。
66.进程与线程的区别:线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;线程上下文切换比进程上下文切换要快得多。
67.缓存区:多个以不同速度或优先级运行的硬件或程序进程共享的数据存储区。在高速和低速设备之间起一个速度平滑作用,暂时存储数据,经常访问的数据可以放进缓冲区,减少对慢速设备的访问以提高系统的效率。
68.数据包:在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,它包含发送者和接收者的地址信息。这些包然后沿着不同的路径在一个或多个网络中传输,并且在目的地重新组合。
69.隧道:一种封装技术,利用一种网络传输协议,将其他协议产生的数据数据包封装在它自己的数据包中,然后在网络中传输。实际上隧道可以看作一个虚拟的点到点连接。简单地说就是,原始数据在a地进行封装,到达b地后把封装去掉,还原成原始数据,这样就形成了一条由a到b的通信隧道。隧道技术就是指包括封装、传输和解封装在内的全过程。隧道是通过隧道协议实现的,隧道协议规定了隧道的建立,维护和删除规则,以及怎样将原始数据封装在隧道中进行传输。
70.本发明实施例提供了数据包解析的方法和服务器。以下将分别进行详细说明。
71.请参阅图1,图1为本发明实施例所提供数据包解析的系统的场景示意图,该数据包解析的系统可以包括网卡100和服务进程10,所述服务进程10包括第一线程200和第二线程300,所述网卡100包括缓存区,所述缓存区包括第一缓存区和第二缓存区。
72.本技术实施例中,所述缓存区位于所述网卡100中,如图2所示,所述网卡100为所述缓存区配置2048字节的空间,其中每一个标号表示所述缓存区中对应的字节的序号,例如“0”表示第0个字节,“2047”表示第2047个字节。其中,前1600个字节所在区间为保存数据包的第一缓存区,即第0个字节至第1599个字节用于保存数据包;进一步的,可以从第1600个字节至第2047个字节所在区间中选择长达256个字节所在区间为保存数据包中部分信息的第二缓存区。需要注意的是,当所述第一缓存区和所述第二缓存区确定后,若已知所述第一缓存区,可以根据预先设置的所述第一缓存区的首个字节和所述第二缓存区的首个字节的相对位置,以确定所述第二缓存区。
73.其中,所述第二缓存区和所述第一缓存区之间可以预留预设区间,以适当区分所述数据包和所述数据包中被保存的部分信息,例如图2所示,所述第二缓存区可以为所述缓存区中的第1663个字节至第1918个字节所在区间;或者所述第二缓存区和所述第一缓存区
也可以相邻设置,仅根据预先设置的所述第一缓存区的首个字节和所述第二缓存区的首个字节的相对位置,以确定所述第二缓存区。当然,可以根据所述数据包中部分信息的长度合理地选择所述第二缓存区相应的空间。
74.本技术实施例中,所述网卡100主要用于接收第一vxlan数据包,并将所述第一vxlan数据包保存至所述第一缓存区,所述第一vxlan数据包包括第一封装数据和原始数据,所述第一封装数据包括vni和外层ip,所述原始数据包括内层ip;所述第一线程主要用于从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型;若所述隧道类型为所述预设隧道类型,则所述第一线程将所述隧道类型和所述vni保存至所述第二缓存区;所述第一线程主要还用于判断所述隧道类型为所述第一预设隧道类型;若所述隧道类型为所述第一预设隧道类型,则所述第一线程从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统;若访问业务系统,则所述第一线程还用于根据所述内层ip将对应的隧道id保存至所述第二缓存区;所述第二线程主要用于从所述第二缓存区中提取所述vni和所述隧道id,并根据所述vni和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包。
75.本技术实施例中,所述数据包解析的系统可以包含于服务器中,即所述网卡100、所述第一线程200和所述第二线程300均可以包含于服务器中。所述服务器可以是独立的服务器,也可以是服务器组成的服务器网络或服务器集群,例如,所述服务器包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云服务器。其中,云服务器由基于云计算的大量计算机或网络服务器构成。
76.进一步的,所述服务器可以包括物理口和虚拟口。其中,所述物理口可以包含于所述网卡100,所述物理口用于接收终端或者业务系统发送的数据包,或者用于向业务系统或者终端发送数据包。其中,所述网卡100、所述第一线程200和所述第二线程300之间可以通过所述虚拟口进行通信。如图1所示,例如,所述网卡100的物理口收到数据包后或者所述第一线程200处理完数据包后,网卡驱动程序可以向所述第一线程200或者所述第二线程300发送“数据包指针”并通知所述第一线程200或者所述第二线程300处理数据包,所述第二线程300可以通过网卡驱动程序向所述物理口发送“处理数据包任务完成指令”,以表示已完成相应的任务,也可以通知所述物理口发送数据包至所述服务器外界。
77.本技术实施例中,所述终端可以是一个通用计算机设备或者是一个专用计算机设备。在具体实现中所述终端可以是台式机、便携式电脑、网络服务器、掌上电脑(personal digital assistant,pda)、移动手机、平板电脑、无线终端设备、通信设备、嵌入式设备等,本实施例不限定所述终端的类型。
78.本技术的实施例中,在所述服务器中创建一个服务进程,所述服务进程中包括所述第一线程200和所述第二线程300,所述服务进程是系统进行资源分配和调度的一个独立单位,所述第一线程200和所述第二线程300是所述服务进程的一个实体,是独立运行和独立调度的基本单位,所述第一线程200和所述第二线程300可共享所述服务进程所拥有的全部资源。其中,不同的服务进程之间可以通过管道、套接字、信号交互、共享内存、消息队列等等进行通信;而所述第一线程200和所述第二线程300共享同一所述服务进程中的内存,
使用相同的地址空间,所述第一线程200和所述第二线程300之间遵循约定的规则以相互合作,所述第一线程200和所述第二线程300之间可以通过wait/notify等待、volatile内存共享、countdownlatch并发工具、cyclicbarrier并发工具进行通信。
79.本领域技术人员可以理解,图1中示出的应用环境,仅仅是与本技术方案一种应用场景,并不构成对本技术方案应用场景的限定,其他的应用环境还可以为:所述服务进程中包括比图1中所示更多的线程,例如图1中仅示出2个线程,可以理解的,该数据包解析的系统还可以包括一个或多个可访问所述网卡100的其它线程,具体此处不作限定。
80.需要说明的是,图1所示的数据包解析的场景示意图仅仅是一个示例,本发明实施例描述的数据包解析的系统以及场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着数据包解析的系统的演变和新业务场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。
81.本发明实施例中提供一种数据包解析的方法,该数据包解析的方法的执行主体为所述服务器,所述服务器包括网卡、第一线程和第二线程,所述网卡包括缓存区,所述缓存区包括第一缓存区和第二缓存区,所述数据包解析的方法包括:所述网卡接收第一vxlan数据包,并将所述第一vxlan数据包保存至所述第一缓存区,所述第一vxlan数据包包括第一封装数据和原始数据,所述第一封装数据包括vni和外层ip,所述原始数据包括内层ip;所述第一线程从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型;若所述隧道类型为所述预设隧道类型,则所述第一线程将所述隧道类型和所述vni保存至所述第二缓存区;所述第一线程判断所述隧道类型是否为第一预设隧道类型;若所述隧道类型为所述第一预设隧道类型,则所述第一线程从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统;若访问业务系统,则所述第一线程根据所述内层ip将对应的隧道id保存至所述第二缓存区;所述第二线程从所述第二缓存区中提取所述vni和所述隧道id,并根据所述vni和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包。
82.如图3所示,为本发明实施例中数据包解析的方法的一个实施例流程示意图,该数据包解析的方法包括:
83.s101、所述网卡接收第一vxlan数据包,并将所述第一vxlan数据包保存至所述第一缓存区,所述第一vxlan数据包包括第一封装数据和原始数据,所述第一封装数据包括vni和外层ip,所述原始数据包括内层ip。
84.本实施例中,所述网卡可以为如图1中所示的网卡100,其中,所述第一vxlan数据包可以是所述网卡100的物理端口接收到的来自终端或者业务系统的数据包。
85.其中,如图4所示,所述缓存区包括所述第一缓存区和第二缓存区,所述第一缓存区可以位于第二缓存区之前,即所述第一缓存区可以位于所述缓存区中的前一部分。进一步的,所述第一vxlan数据包可以包括所述第一封装数据和所述原始数据,所述第一封装数据位于所述原始数据之前,所述vni和所述外层ip包含于所述第一封装数据,所述内层ip包含于所述原始数据。需要注意的是,图4中对于所述vni、所述外层ip、所述内层ip、所述第一
封装数据和所述原始数据三者的区间长度划分只是为了便于绘图,并不对三者的区间长度的比例关系做出限制。
86.具体的,如图5所示,所述第一vxlan数据包可以包括所述第一封装数据和所述原始数据,具体描述如下:
87.根据与所述原始数据的距离由近到远,所述第一封装数据可以依次包括vxlan header901、outer udp header902、outer ip header903和outer ethernet header904,进一步的,根据与所述原始数据的距离由远到近,vxlan header901包括vxlan flags905和vni906。其中,vni为上文中的vni,所述vni(vni)为vxlan网络标识,用于标识所述第一vxlan数据包所属的租户,一个租户可以有一个或多个vni,不同vni的租户之间不能直接进行二层相互通信;其中,vxlan flags为标记位,包括8位,格式为“rrrrirrr”,“i”位为1时,表示所述vni(vni)有效,为0,表示所述vni(vni)无效,“r”位保留未用,设置为0;其中,在vxlan flags905和vni906之间、vni906和所述原始数据之间也包括reserved801,用于保留未用,设置为0。其中,outer ip header903包括上文中的外层ip,所述外层ip具体包括ip sa802和ip da803,ip sa为源ip地址,即隧道的源端vtep的ip地址,ip da为目的ip地址,即隧道的目的端vtep的ip地址。
88.如图5所示,根据与所述第一封装数据的距离由近到远,所述原始数据可以依次包括inner ethernet header907、inner ip header908和payload909。其中,inner ethernet header包括发送端的mac地址和下一跳设备的的mac地址,inner ip header包括上文中的内层ip,所述内层ip具体包括发送端的ip地址和接收端的ip地址,所述发送端和所述接收端根据实际收发所述第一vxlan数据包的情况,分别与上文中提到的终端和业务系统相对应;其中,payload可以包括指令信息或者数据信息。
89.s102、所述第一线程从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型。
90.其中,所述第一线程可以访问所述第一vxlan数据包,并且解析所述第一vxlan数据包中的所述第一封装数据,根据解析结果获取所述第一封装数据中的所述外层ip和所述vni。具体的,所述第一线程可以获取所述第一封装数据中的vxlan flags信息,对于格式为“rrrrirrr”的vxlan flags,若“i”位为1,则执行所述步骤s102,若“i”位为0,则不执行所述步骤s102。进一步的,所述第一线程可以根据所述外层ip确定对应的隧道类型,再将所述隧道类型和所述预设隧道类型做对比,判断对应的隧道类型是否为预设隧道类型。
91.可以理解的,此时保存于所述第一缓存区中的为所述原始数据,保存于所述第二缓存区中的为所述外层ip和所述vni。根据上文分析可知,所述第二缓存区和所述第一缓存区之间可以预留预设区间,以适当区分所述数据包和所述数据包中被保存的部分信息,因此,此处所述外层ip、所述vni和所述原始数据之间可以预留预设空间,在根据预先设置的所述第一缓存区的首个字节和所述第二缓存区的首个字节的相对位置,以确定所述第二缓存区的前提下,该实施例可以进一步确定所述外层ip、所述vni,例如在上述前提下可以根据经上述步骤确定的所述外层ip、所述vni分别和所述第一缓存区之间是否有预设区间,以判断所述“确定的外层ip”、所述“确定的vni”是否为真正的所述外层ip、所述vni。
92.s103、若所述隧道类型为所述预设隧道类型,则所述第一线程将所述隧道类型和所述vni保存至所述第二缓存区。
93.其中,若所述第一vxlan数据包对应的隧道类型为所述预设隧道类型,则所述第一线程才将所述隧道类型和所述vni保存至所述第二缓存区;否则,所述第一线程丢弃所述第一vxlan数据包,即所述第一线程从此步骤开始对所述第一vxlan数据包不做任何相关的处理。
94.s01、所述第一线程判断所述隧道类型是否为第一预设隧道类型。
95.其中,所述预设隧道类型可以包括多种隧道类型,所述第一预设隧道类型为包含于所述预设隧道类型中的其中一种隧道类型。
96.s104、若所述隧道类型为所述第一预设隧道类型,则所述第一线程从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统。
97.其中,所述第一预设隧道类型可以为lan型隧道,则当所述第一vxlan数据包对应的隧道类型为lan型隧道时,所述第一线程才将所述隧道类型和所述vni保存至所述第二缓存区;进而,所述第一线程可以访问所述第一vxlan数据包,并且解析所述第一vxlan数据包中的所述原始数据,根据解析结果获取所述内层ip,也即获取inner ip header,具体为获取所述内层ip中的接收端的ip地址。进一步的,所述服务进程中可以包含第一隧道转发规则,所述第一线程可以根据所述内层ip获取所述第一隧道转发规则,即所述第一隧道转发规则适用于所述第一预设隧道类型的数据包;其中,所述第一隧道转发规则中规定了当所述第一预设隧道类型的数据包中的所述接收端的ip地址符合什么要求时,可以访问业务系统。因此,根据所述第一vxlan数据包中的所述内层ip中的所述接收端的ip地址,结合所述第一隧道转发规则,就可以判断所述第一vxlan数据包是否访问业务系统。
98.s105、若访问业务系统,则所述第一线程将对应的隧道id保存至所述第二缓存区。
99.其中,所述第一隧道转发规则中包含了多个ip段和多个隧道id,所述多个ip段和多个隧道id一一对应,即每一个隧道id与所述第一vxlan数据包中的所述接收端的ip地址所处于的ip段相对应,由于此步骤前提是所述第一vxlan数据包的所述隧道类型为所述第一预设隧道类型,结合所述步骤s104,当所述内层ip中的接收端的ip地址符合访问业务系统的要求时,所述第一线程才会根据所述接收端的ip地址所处于的ip段获取对应的隧道id,并将所述隧道id保存至所述第二缓存区;否则,所述第一线程丢弃所述第一vxlan数据包,即所述第一线程从此步骤开始对所述第一vxlan数据包不做任何相关的处理。
100.可以理解的,当所述第一线程将所述隧道id保存至所述第二缓存区后,所述第一线程可以向所述网卡发送“处理数据包任务完成指令”等相关的指令,以告知所述网卡所述第一线程已完成“处理数据包任务”等相关的操作,以便于所述网卡进行下一步操作。同时,所述第一线程此时可以获取所述原始数据的指针,并且所述第一线程的虚拟口也可以向所述网卡的虚拟口发送所述原始数据的指针。具体可以包括如下步骤:所述第一线程通过网卡驱动程序向所述服务器中的虚拟口发送所述原始数据的指针,网卡驱动程序通知所述第二线程根据所述原始数据的指针处理对应部分的数据包。
101.s106、所述第二线程从所述第二缓存区中提取所述vni和所述隧道id,并根据所述vni和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包。
102.其中,所述第二线程可以确定出新的对应的outer udp header、outer ip header
和outer ethernet header,具体的,所述第二线程可以根据所述vni和所述隧道id为所述原始数据配置新的对应的outer udp header、outer ip header和outer ethernet header,由于所述vni没有发生变化,对应的vxlan heade也没有发生变化,以上新的对应的outer udp header、outer ip header和outer ethernet header、vxlan header共同构成所述第二封装数据。
103.其中,所述隧道类型表示所述第一vxlan数据包来自哪里,例如来自终端或者业务系统,所述隧道id表示所述第二vxlan数据包发往哪里,例如发往终端或者业务系统。例如,若所述隧道类型为lan型隧道,则表示此步骤中的所述第一vxlan数据包从终端到达服务器,根据所述隧道id和所述vni可以确定出新的隧道的源端的mac地址、目的端的mac地址、源端的ip地址、目的端的ip地址、源端的udp端口号和目的端的udp端口号。其中,所述源端的mac地址、所述目的端的mac地址、所述源端的ip地址、所述目的端的ip地址、所述源端的udp端口号和所述目的端的udp端口号形成新的对应的outer ethernet header、outer ip header和outer udp header。
104.根据上文分析可知,此时所述第二缓存区中包含所述第二封装数据、所述vni、所述隧道类型和所述隧道id,可以选取其中的第二封装数据和位于所述第一缓存区中的所述原始数据共同构成所述第二vxlan数据包。
105.本实施例中,如图6所示,所述步骤s106之前可以包括如下步骤:
106.s02、若所述隧道类型不为所述第一预设隧道类型,所述第二线程判断所述隧道类型是否为第二预设隧道类型。
107.同理,所述第二预设隧道类型也为包含于所述预设隧道类型中的其中一种隧道类型。具体的,所述第二线程可以从所述第二缓存区获取所述隧道类型,并且判断所述隧道类型是否为第二预设隧道类型。
108.s03、若所述隧道类型为第二预设隧道类型,则所述第二线程从所述第二缓存区中提取所述vni,并根据所述vni确定对应的隧道id。
109.其中,所述第二预设隧道类型可以为mec型隧道,则当所述第一vxlan数据包对应的隧道类型为mec型隧道时,所述第二线程从所述第二缓存区中提取所述vni,并根据所述vni确定对应的隧道id。进一步的,所述服务进程中还可以包含第二隧道转发规则,所述第二线程可以根据所述vni获取所述第二隧道转发规则,即所述第二隧道转发规则适用于所述第二预设隧道类型的数据包;其中,所述第二隧道转发规则中包含了多个vni和多个隧道id,所述多个vni和所述多个隧道id一一对应。由于此时所述第一vxlan数据包的隧道类型为所述第二预设隧道类型,所述第二隧道转发规则中包含多个隧道id,且由上述分析可知,每一个隧道id对应一个vni,因此,所述第二线程根据所述vni即可从所述第二隧道转发规则中找到对应的隧道id。
110.需要注意的是,当执行完所述步骤s105或者所述步骤s03之后,均可以执行所述步骤s106。
111.本实施例中,如图7所示,所述步骤s102之前可以包括如下步骤:
112.s201、所述网卡向所述第一线程发送所述第一vxlan数据包的指针。
113.可以理解的,所述第一vxlan数据包位于所述网卡中的所述第一缓存区,因此,当所述网卡的物理口接收到所述第一vxlan数据包并将所述第一vxlan数据包保存于所述第
一缓存区后,网卡驱动程序可以向所述第一线程发送所述第一vxlan数据包的指针以将所述第一vxlan数据包的首地址告知所述第一线程,并通知所述第一线程处理所述第一vxlan数据包。
114.s202、所述第一线程根据所述第一vxlan数据包的指针访问所述第一vxlan数据包。
115.可以理解的,当所述第一线程获取所述第一vxlan数据包的指针后,即可以快速定位至所述第一vxlan数据包,以对所述第一vxlan数据包执行所述步骤s102的相关操作。
116.本实施例中,如图8所示,所述步骤s102可以包括如下步骤:
117.s1021、所述第一线程获取所述外层ip,并根据配置表中确定对应的隧道类型。
118.具体的,所述服务进程中保存有所述配置表,所述配置表包括了多个outer udp header、多个outer ip header、多个outer ethernet header和多个隧道类型,所述多个outer udp header、所述多个outer ip header、所述多个outer ethernet header和所述多个隧道类型一一对应。由上文分析可知,所述外层ip为所述第一vxlan数据包中的outer ip header,此时根据所述外层ip可以在所述配置表中查找到对应的隧道类型,其中,所述隧道类型可以包括lan型隧道、wan型隧道和mec型隧道。具体的,所述lan型隧道可以表示该隧道和终端相连,即所述第一vxlan数据包来自终端;所述wan型隧道可以表示该隧道和bras相连,即所述第一vxlan数据包来自bras;所述mec型隧道可以表示该隧道和业务系统相连,即所述第一vxlan数据包来自业务系统。
119.s1022、所述第一线程根据隧道类型,判断对应的隧道类型是否为预设隧道类型。
120.其中,所述服务进程中保存有所述预设隧道类型,所述预设隧道类型包括所述lan型隧道、所述wan型隧道和所述mec型隧道三者中的至少一种;此处以所述预设隧道类型包括所述lan型隧道和所述mec型隧道为例进行后续说明,即所述第一vxlan数据包的隧道类型为所述lan型隧道或者所述mec型隧道均属于所述预设隧道类型。
121.本实施例中,如图9所示,所述步骤s104可以包括如下步骤:
122.s1041、所述第一线程从所述第一vxlan数据包中获取所述内层ip,并在隧道规则中查找多个业务ip段。
123.由上文分析可知,所述服务进程中的所述第一隧道转发规则规定了当所述内层ip中的所述接收端的ip地址符合什么要求时,可以访问业务系统。具体的,所述第一隧道转发规则包括了所述多个业务ip段,所述多个业务ip段中每一个业务ip段中包括了多个ip地址,每一个业务ip段中的所述多个ip地址可以为连续或者是不连续的多个ip地址,即每一个业务ip段可以理解为对应的多个ip地址的集合。
124.s1042、所述第一线程根据所述内层ip是否包含于所述多个业务ip段中的其中一个业务ip段判断是否访问业务系统。
125.其中,访问业务系统可以理解为向所述业务系统传输所述原始数据。具体的,当所述内层ip中的所述接收端的ip地址包含于所述多个业务ip段中的其中一个业务ip段时,即表示所述第一vxlan数据包可以访问与所述业务ip段对应的业务系统,结合所述步骤s105可知,所述业务ip段可以对应一个隧道id,即表示所述第一vxlan数据包可以通过所述业务ip段对应的隧道id访问对应的业务系统。
126.本实施例中,如图10所示,所述步骤s106之前可以包括如下步骤:
127.s301、所述网卡向所述第二线程发送所述原始数据的指针。
128.可以理解的,所述原始数据位于所述第一缓存区中的所述第一封装数据之后,因此,当所述第一线程处理完所述第一vxlan数据包后,网卡驱动程序可以向所述第二线程发送所述原始数据的指针以将所述原始数据的首地址告知所述第二线程,并通知所述第二线程处理原始的首地址之后的内容。
129.s302、所述第二线程根据所述原始数据的指针访问所述原始数据。
130.可以理解的,当所述第二线程获取所述原始数据的指针后,即可以快速定位至所述原始数据,以对所述原始数据执行所述步骤s106的相关操作。
131.根据上文分析可知,若已知所述第一缓存区,可以根据预先设置的所述第一缓存区的首个字节和所述第二缓存区的首个字节的相对位置,以确定所述第二缓存区,因此所述第二线程获取所述原始数据的指针后可以确定所述第二缓存区的地址,从所述第二缓存区中提取所述vni、所述隧道类型和所述隧道id。需要注意的是,由于位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包,即所述第二vxlan数据包中不包含所述第二封装数据,即所述第二线程根据所述原始数据的指针访问所述原始数据可以便于所述第二线程可以自动屏蔽所述原始数据的地址之前的例如所述第一封装数据等信息,提高所述第二线程的工作效率。
132.本实施例中,如图11所示,所述步骤s106之后可以包括如下步骤:
133.s401、所述网卡根据所述第二vxlan数据包确定对应的发送隧道。
134.其中,所述第二vxlan数据包中的所述第二封装数据可以确定出一对隧道两端的ip地址和隧道的源mac地址,但是,不同的隧道其中一端可能会对应相同的源mac地址和ip地址;进一步的,所述第二vxlan数据包中的vni可以通过vxlan网络标识确定出所述发送隧道。
135.s402、所述网卡根据所述发送隧道发送所述第二vxlan数据包。
136.可以理解的,所述发送隧道即为所述第二vxlan数据包传输的路径。例如,当所述终端向所述网卡发送所述第一vxlan数据包时,所述第一vxlan数据包经过上述多种转化后得到的所述第二vxlan,所述第二vxlan数据包确定的所述发送隧道的一端即为所述网卡的物理口,所述发送隧道的另一端即为所述业务系统的物理口,即所述第二vxlan数据包可以从所述网卡传输至所述业务系统;又例如当所述业务系统向所述网卡发送所述第一vxlan数据包时,所述第一vxlan数据包经过上述多种转化后得到的所述第二vxlan,所述第二vxlan数据包确定的所述发送隧道的一端即为所述网卡的物理口,所述发送隧道的另一端即为所述终端的物理口,即所述第二vxlan数据包可以从所述网卡传输至所述终端。
137.本实施例中,如图12所示,为本发明实施例中数据包解析的方法的信令交互的示意图,该数据包解析的方法的信令交互的示意图包括如下步骤:
138.s1、网卡接收第一vxlan数据包,并将所述第一vxlan数据包保存至第一缓存区;
139.s2、网卡向第一线程发送所述第一vxlan数据包的指针;
140.s3、第一线程从所述第一vxlan数据包中解析第一封装数据,并获取其中的外层ip和vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型;
141.s4、若所述隧道类型为所述预设隧道类型,则第一线程将所述隧道类型和所述vni保存至所述第二缓存区;
142.s5、第一线程从所述第一vxlan数据包中获取内层ip,并根据所述内层ip判断是否访问业务系统;
143.s6、若访问业务系统,则第一线程根据所述内层ip确定对应的隧道id,并将所述隧道id保存至所述第二缓存区;
144.s7、第一线程向网卡发送“处理数据包任务完成指令”;
145.s8、网卡向第二线程发送所述第一vxlan数据包中原始数据的指针;
146.s9、第二线程从所述第二缓存区中提取所述vni和所述隧道id;
147.s10、第二线程根据所述vni和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区;
148.s11、第二线程向网卡发送“处理数据包任务完成指令”。
149.为了更好实施本发明实施例中数据包解析的方法,在数据包解析的方法基础之上,本发明实施例中还提供一种服务器,如图13所示,所述服务器400包括网卡401和服务进程402,所述网卡401包括缓存区,所述缓存区包括第一缓存区和第二缓存区,所述服务进程402包括第一线程4021和第二线程4022;
150.所述网卡401用于接收第一vxlan数据包,并将所述第一vxlan数据包保存至所述第一缓存区,所述第一vxlan数据包包括第一封装数据和原始数据,所述第一封装数据包括vni和外层ip,所述原始数据包括内层ip;
151.所述第一线程4021用于从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型;
152.若所述隧道类型为所述预设隧道类型,则所述第一线程4021还用于将所述隧道类型和所述vni保存至所述第二缓存区;
153.所述第一线程4021还用于判断所述隧道类型是否为第一预设隧道类型;
154.若所述隧道类型为所述第一预设隧道类型,则所述第一线程4021还用于从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统;
155.若访问业务系统,则所述第一线程4021还用于将对应的隧道id保存至所述第二缓存区;
156.所述第二线程4022还用于从所述第二缓存区中提取所述vni和所述隧道id,并根据所述vni和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包。
157.在本技术一些实施例中,所述第二线程4022还用于判断所述隧道类型是否为第二预设隧道类型;以及若所述隧道类型为第二预设隧道类型,则所述第二线程4022还用于从所述第二缓存区中提取所述vni,并根据所述vni确定对应的隧道id。
158.在本技术一些实施例中,所述第一线程4021还用于获取所述外层ip,并根据配置表中确定对应的隧道类型;以及所述第一线程4021还用于根据所述隧道类型,判断对应的隧道类型是否为预设隧道类型。
159.在本技术一些实施例中,所述第一线程4021还用于从所述第一vxlan数据包中获取所述内层ip,并在隧道规则中查找多个业务ip段;以及所述第一线程4021还用于根据所述内层ip是否包含于所述多个业务ip段中的其中一个业务ip段判断是否访问业务系统。
160.在本技术一些实施例中,所述网卡401还用于向所述第一线程4021发送所述第一vxlan数据包的指针;所述第一线程4021还用于根据所述第一vxlan数据包的指针访问所述第一vxlan数据包。
161.在本技术一些实施例中,所述网卡401向所述第二线程4022发送所述原始数据的指针;所述第二线程4022根据所述原始数据的指针访问所述原始数据。
162.在本技术一些实施例中,所述网卡401根据所述第二vxlan数据包确定对应的发送隧道;所述网卡401根据所述发送隧道发送所述第二vxlan数据包。
163.本发明提供了数据包解析的方法和服务器,服务器包括网卡和服务进程,所述网卡包括缓存区,所述缓存区包括第一缓存区和第二缓存区,所述服务进程包括第一线程和第二线程,第一线程从第一封装数据获取外层ip和vni,若对应的隧道类型为预设隧道类型,则将隧道类型和vni保存至第二缓存区;进一步的,若对应的隧道类型为第一预设隧道类型,则获取内层ip,若判断出为访问业务系统,则根据内层ip将对应的隧道id保存至第二缓存区;第二线程从第二缓存区中提取vni和隧道id以确定第二封装数据,将第二封装数据保存至第二缓存区,使得位于原始数据和第二封装数据共同构成第二vxlan数据包。该方案通过在网卡中的缓存区中开辟扩展信息缓存,将第一线程通过数据包解析得到的对应的隧道id、以及处理第一vxlan数据包得到的vni均保存至第二缓存区以供第二线程获取和使用,避免第二线程执行数据包解析或者其它与第一线程重复的步骤;并且在所述第一线程和所述第二线程获取所述第一vxlan数据包中的相应信息以及执行相应操作的同时,仍然保证所述第一vxlan数据包的完整性,使得其他的线程可以正常获取所述第一vxlan数据包的信息,避免服务器重新从外界获取所述第一vxlan数据包以供给其它线程使用。综上,本方案提高了服务进程整体的工作效率。
164.本发明实施例还提供一种服务器,如图14所示,其示出了本发明实施例所涉及的服务器的结构示意图,具体来讲:
165.该服务器可以包括一个或者一个以上处理核心的处理器801、一个或一个以上计算机可读存储介质的存储器802、电源803和输入单元804等部件。本领域技术人员可以理解,图14中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
166.处理器801是该服务器的控制中心,利用各种接口和线路连接整个服务器的各个部分,通过运行或执行存储在存储器802内的软件程序和/或模块,以及调用存储在存储器802内的数据,执行服务器的各种功能和处理数据,从而对服务器进行整体监控。可选的,处理器801可包括一个或多个处理核心;处理器801可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field

programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,优选的,处理器801可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器801中。
167.存储器802可用于存储软件程序以及模块,处理器801通过运行存储在存储器802
的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器802可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器802可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器802还可以包括存储器服务器,以提供处理器801对存储器802的访问。
168.服务器还包括给各个部件供电的电源803,优选的,电源803可以通过电源管理系统与处理器801逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源803还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
169.该服务器还可包括输入单元804,该输入单元804可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
170.尽管未示出,服务器还可以包括显示单元等,在此不再赘述。具体在本实施例中,服务器中的处理器801会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器802中,并由处理器801来运行存储在存储器802中的应用程序,从而实现各种功能,所述处理器801可以向服务器中的网卡以及属于同一个服务进程中的第一线程、第二线程发出指令,以使得所述网卡、所述第一线程和所述第二线程依次执行以下步骤:
171.所述网卡接收第一vxlan数据包,并将所述第一vxlan数据包保存至所述第一缓存区,所述第一vxlan数据包包括第一封装数据和原始数据,所述第一封装数据包括vni和外层ip,所述原始数据包括内层ip;
172.所述第一线程从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型;
173.若所述隧道类型为所述预设隧道类型,则所述第一线程将所述隧道类型和所述vni保存至所述第二缓存区;
174.所述第一线程判断所述隧道类型是否为第一预设隧道类型;
175.若所述隧道类型为所述第一预设隧道类型,则所述第一线程从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统;
176.若访问业务系统,则所述第一线程根据所述内层ip确定将对应的隧道id保存至所述第二缓存区;
177.所述第二线程从所述第二缓存区中提取所述vni和所述隧道id,并根据所述vni和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包。
178.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
179.为此,本发明实施例提供一种计算机可读存储介质,该存储介质可以包括:只读存
储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。其上存储有计算机程序,所述计算机程序被处理器进行加载,以向向服务器中的网卡以及属于同一个服务进程中的第一线程、第二线程发出指令,以使得所述网卡、所述第一线程和所述第二线程依次执行以下步骤:
180.所述网卡接收第一vxlan数据包,并将所述第一vxlan数据包保存至所述第一缓存区,所述第一vxlan数据包包括第一封装数据和原始数据,所述第一封装数据包括vni和外层ip,所述原始数据包括内层ip;
181.所述第一线程从所述第一vxlan数据包中解析所述第一封装数据并获取所述外层ip和所述vni,并根据所述外层ip判断对应的隧道类型是否为预设隧道类型;
182.若所述隧道类型为所述预设隧道类型,则所述第一线程将所述隧道类型和所述vni保存至所述第二缓存区;
183.所述第一线程判断所述隧道类型是否为第一预设隧道类型;
184.若所述隧道类型为所述第一预设隧道类型,则所述第一线程从所述第一vxlan数据包中获取所述内层ip,并根据所述内层ip判断是否访问业务系统;
185.若访问业务系统,则所述第一线程根据所述内层ip将对应的隧道id保存至所述第二缓存区;
186.所述第二线程从所述第二缓存区中提取所述vni和所述隧道id,并根据所述vni和所述隧道id确定第二封装数据,将所述第二封装数据保存至所述第二缓存区,使得位于所述第一缓存区中的所述原始数据和位于所述第二缓存区中的所述第二封装数据共同构成第二vxlan数据包。
187.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见上文针对其他实施例的详细描述,此处不再赘述。
188.具体实施时,以上各个单元或结构可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元或结构的具体实施可参见前面的方法实施例,在此不再赘述。
189.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
190.以上对本发明实施例所提供的数据包解析的方法和服务器进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1