CN105515995A - 报文处理方法、流表生成方法及装置 - Google Patents

报文处理方法、流表生成方法及装置 Download PDF

Info

Publication number
CN105515995A
CN105515995A CN201510868876.2A CN201510868876A CN105515995A CN 105515995 A CN105515995 A CN 105515995A CN 201510868876 A CN201510868876 A CN 201510868876A CN 105515995 A CN105515995 A CN 105515995A
Authority
CN
China
Prior art keywords
sub
stem
mask
field
message
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.)
Granted
Application number
CN201510868876.2A
Other languages
English (en)
Other versions
CN105515995B (zh
Inventor
喻径舟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
XFusion Digital Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201510868876.2A priority Critical patent/CN105515995B/zh
Publication of CN105515995A publication Critical patent/CN105515995A/zh
Application granted granted Critical
Publication of CN105515995B publication Critical patent/CN105515995B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering

Abstract

本申请提供报文处理方法、流表生成方法及装置。转发装置接收第一报文,从所述第一报文的第一首部获取第一字段,从所述第一报文的第二首部获取第二字段,通过一个第一查找请求在第一流表中查找是否存在与第一查找关键字匹配的表项。根据匹配的表项对所述第一报文进行处理。所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部。第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部。所述第一查找请求携带所述第一查找关键字。所述第一查找关键字包含所述第一字段和所述第二字段。上述方案可以减少开销。

Description

报文处理方法、流表生成方法及装置
技术领域
本发明涉及通信技术,尤其涉及报文处理方法、流表(flowtable)生成方法及装置。
背景技术
现有技术中,转发装置可以接收的不同报文。不同的报文的数据格式可能并不相同。例如,不同的报文可能包括不同协议的首部(header)。举例来说,转发装置接收两个以太网帧(Ethernetframe)。一个Ethernetframe可能包括网际协议第四版(internetprotocolversion4,IPv4)首部。另一个Ethernetframe可能包括网际协议第六版(internetprotocolversion6,IPv6)首部。进一步地,所述两个Ethernetframe中所述IPv4首部或IPv6首部的下一个首部,可能是传输控制协议(transmissioncontrolprotocol,TCP)首部,也可能是用户数据报协议(userdatagramprotocol,UDP)首部。对于包括不同首部的报文,转发装置需要按照不同的方式进行处理。
当报文中包含多个首部时,需要对存储器进行多次访问,才能确定报文中包含了哪些首部,从而确定如何对报文进行处理。上述技术方案的开销比较大。
发明内容
本发明实施例提供了一种报文处理方法、流表生成方法及装置,有助于减少对存储器访问的次数,降低开销。
本发明实施例提供的技术方案如下:
第一方面,提供了一种报文处理方法,包括:
转发装置接收第一报文,所述第一报文包括第一首部和第二首部,所述第二首部是所述第一首部的下一个首部,所述第一首部的协议是第一协议,所述第二首部的协议是第二协议。
所述转发装置根据第一位置参数从所述第一首部获取第一字段,根据第二位置参数从所述第二首部获取第二字段,所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部以及当所述第一报文包含所述第一首部的下一个首部时所述第一首部的下一个首部的协议,所述第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部以及当所述第一报文包含所述第二首部的下一个首部时所述第二首部的下一个首部的协议。
所述转发装置通过一个第一查找请求,在第一流表中查找是否存在与第一查找关键字匹配的表项,所述第一查找请求携带所述第一查找关键字,所述第一查找关键字包括所述第一字段和所述第二字段。
所述转发装置确定所述第一流表中存在与所述第一查找关键字匹配的第一表项后,根据所述第一表项对所述第一报文进行处理,所述第一表项的匹配域包括第一比特串以及第一掩码,所述第一比特串包括第一子比特串和第二子比特串,所述第一掩码包括第一子掩码和第二子掩码。
所述第一子比特串与所述第一子掩码进行位与运算的结果等于所述第一字段与所述第一子掩码进行位与运算的结果,所述第二子比特串与所述第二子掩码进行位与运算的结果等于所述第二字段与所述第二子掩码进行位与运算的结果,所述第一子掩码和所述第二子掩码的每一比特为1。或者所述第一子比特串与所述第一子掩码进行位或运算的结果等于所述第一字段与所述第一子掩码进行位或运算的结果,所述第二子比特串与所述第二子掩码进行位或运算的结果等于所述第二字段与所述第二子掩码进行位或运算的结果,所述第一子掩码和所述第二子掩码的每一比特为0。
通过上述方案,转发装置从第一报文中获取第一查找关键字。第一查找关键字包含了来自第一首部的第一字段以及来自第二首部的第二字段。所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部以及当所述第一报文包含所述第一首部的下一个首部时所述第一首部的下一个首部的协议。第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部以及所述第一报文包含所述第二首部的下一个首部时所述第二首部的下一个首部的协议。所述转发装置通过一个第一查找请求在第一流表中确定与所述第一查找关键字匹配的第一表项,从而确定如何对报文进行处理。为确定如何对包含第一首部和第二首部的报文进行处理,所述转发装置不需要执行如下操作:对第一首部进行解析。根据对第一首部进行解析的结果,对第二首部进行解析。对第一首部进行解析需要执行一次查找。根据对第一首部进行解析的结果,对第二首部进行解析需要执行另一次查找。因此,第一方面提供的技术方案不需要针对第一首部和第二首部执行多次查找。例如,所述转发装置不需要先以第一字段为查找关键字通过访问存储器在一个流表中查找与所述第一字段匹配的表项。然后根据与所述第一字段匹配的表项从报文中获取第二字段,并以第二字段为查找关键字通过访问存储器在另一个流表中查找与所述第二字段匹配的表项。从而确定如何对报文进行处理。
执行多次查找意味着转发装置需要多次访问存储器。因此,相对于需要对报文中的多个首部分别执行多次查找才能确定如何对报文进行处理的技术方案,本发明实施例提供的技术方案有助于减小开销,提高处理效率。
可选地,所述转发装置接收所述第一报文之后,以及所述转发装置通过所述第一查找请求在所述第一流表中查找是否存在与所述第一查找关键字匹配的表项之前,所述方法还包括:
所述转发装置根据第三位置参数从所述第一报文中获取第三字段,所述第一查找关键字还包括所述第三字段,所述第一比特串还包括第三子比特串,所述第一掩码还包括第三子掩码;其中所述第三子比特串与所述第三子掩码进行位与运算的结果等于所述第三字段与所述第三子掩码进行位与运算的结果,所述第三子掩码的每一比特为0;或者所述第三子比特串与所述第三子掩码进行位或运算的结果等于所述第三字段与所述第三子掩码进行位或运算的结果,所述第三子掩码的每一比特为1。
可选地,所述转发装置接收第二报文,所述第二报文包括第三首部和第四首部,所述第四首部是所述第三首部的下一个首部,所述第三首部的协议是所述第一协议,所述第四首部的协议是第三协议。
所述转发装置根据所述第一位置参数从所述第三首部获取第四字段,根据所述第二位置参数从所述第二报文中获取第五字段,根据所述第三位置参数从所述第四首部获取第六字段,所述第四字段用于标识所述第二报文是否包含所述第三首部的下一个首部以及当所述第二报文包含所述第三首部的下一个首部时所述第三首部的下一个首部的协议,所述第六字段用于标识所述第二报文是否包含所述第四首部的下一个首部以及当所述第二报文包含所述第四首部的下一个首部时所述第四首部的下一个首部的协议。
所述转发装置通过一个第二查找请求,在所述第一流表中查找是否存在与第二查找关键字匹配的表项,所述第二查找请求中携带所述第二查找关键字,所述第二查找关键字包括所述第四字段、所述第五字段以及所述第六字段。
所述转发装置确定所述第一流表中存在与所述第二查找关键字匹配的第二表项后,根据所述第二表项对所述第二报文进行处理,所述第二表项的匹配域包括第二比特串以及第二掩码,所述第二比特串包括第四子比特串、第五子比特串以及第六子比特串,所述第二掩码包括第四子掩码、第五子掩码以及第六子掩码。
所述第四子比特串与所述第四子掩码进行位与运算的结果等于所述第四字段与所述第四子掩码位与运算的结果,所述第五子比特串与所述第五子掩码进行位与运算的结果等于所述第五字段与所述第五子掩码位与运算的结果,所述第六子比特串与所述第六子掩码进行位与运算的结果等于所述第六字段与所述第六子掩码位与运算的结果,所述第四子掩码和所述第六子掩码的每一比特为1,所述第五子掩码的每一比特为0。或者所述第四子比特串与所述第四子掩码进行位或运算的结果等于所述第四字段与所述第四子掩码进行位或运算的结果,所述第五子比特串与所述第五子掩码进行位或运算的结果等于所述第五字段与所述第五子掩码进行位或运算的结果,所述第六子比特串与所述第六子掩码进行位或运算的结果等于所述第六字段与所述第六子掩码进行位或运算的结果,所述第四子掩码和所述第六子掩码的每一比特为0,所述第五子掩码的每一比特为1。
通过上述方案,所述转发装置无论接收到第一报文还是第二报文,都可以进行相应处理。即,无论所述转发装置接收到的报文的第一协议的首部的下一个首部是所述第二协议的首部还是所述第三协议的首部,所述转发装置都可以将所述第一协议的首部中的特殊字段,以及所述第二协议的首部中的特殊字段或所述第三协议的首部中的特殊字段,通过一个查找请求对存储器进行一次访问从而确定匹配的表项。进而,根据匹配的表项确定如何对报文进行处理。上述方案中,转发装置可以通过类似的方式从包括不同首部的报文中获取查找关键字。从而使得所述转发装置提高对不同格式的报文进行的处理能力。
可选地,所述第三位置参数包括第三偏移和第三长度,所述第三偏移为所述第六字段的起始位置距所述第三首部的起始位置的偏移,所述第三长度为所述第三字段的长度。
第二方面,提供了一种流表生成方法,包括:
处理器获取第一流表和第二流表,所述第一流表包括第一表项,所述第一表项包括匹配域和跳转指令,所述第一表项的跳转指令指向所述第二流表,指向所述第二流表的跳转指令的数量等于1,所述第二流表包括第二表项,所述第二表项包括匹配域。
所述处理器生成一个第三流表,所述第三流表包括第三表项,所述第三表项包括匹配域,所述第三表项的匹配域包括第一子匹配域和第二子匹配域,所述第一子匹配域包括第一子比特串和第一子掩码,所述第二子匹配域包括第二子比特串和第二子掩码,所述第一子比特串和所述第一表项的匹配域相等,所述第二子比特串和所述第二表项的匹配域相等。
所述第一子掩码和所述第二子掩码的每一比特为1,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位与运算。或者所述第一子掩码和所述第二子掩码的每一比特为0,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位或运算。
通过上述方案,所述处理器生成一个第三流表,所述第三流表可以是本发明实施例第一方面所提供的报文处理方法中的所述第一流表。处理器将所述第三流表发送到转发装置,所述转发装置通过一个查找请求在所述第三流表中确定与所述查找关键字匹配的第一表项,进而确定如何对报文进行处理。
可选地,所述处理器获取第四流表,所述第四流表包括第四表项,所述第四表项包括匹配域,所述第一流表还包括第五表项,所述第五表项包括匹配域和跳转指令,所述第五表项的跳转指令指向所述第四流表,指向所述第四流表的跳转指令的数量等于1。
所述第三表项的匹配域还包括第三子匹配域,所述第三子匹配域包括第三子比特串和第三子掩码。
所述第三子掩码的每一比特为0并且所述第三子匹配域的掩码匹配算法为位与运算,或者,所述第三子掩码的每一比特为1并且所述第三子匹配域的掩码匹配算法为位或运算。
所述第三流表还包括第六表项,所述第六表项包括匹配域,所述第六表项的匹配域包括第四子匹配域,第五子匹配域和第六子匹配域,所述第四子匹配域包括第四子比特串和第四子掩码,所述第五子匹配域包括第五子比特串和第五子掩码,所述第六子匹配域包括第六子比特串和第六子掩码,所述第四子比特串与所述第五表项的匹配域相等,所述第六子比特串与所述第四表项的匹配域相等。
所述第四子掩码的每一比特为1,所述第五子掩码的每一比特为0,所述第六子掩码的每一比特为1,所述第四子匹配域,所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位与运算。或者,所述第四子掩码的每一比特为0,所述第五子掩码的每一比特为1,所述第六子掩码的每一比特为0,所述第四子匹配域,所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位或运算。
可选地,所述处理器获取第一位置参数和第二位置参数,所述第一位置参数用于标识第一字段在转发装置接收的第一报文中的位置,所述第一字段是所述第一报文中第一协议的首部中的字段,所述第一字段用于与所述第一表项的匹配域进行匹配,所述第二位置参数用于标识第二字段在所述第一报文中的位置,所述第二字段是所述第一报文中第二协议的首部中的字段,所述第二字段用于与所述第二表项的匹配域进行匹配,所述第一报文中所述第二协议的首部是所述第一报文中所述第一协议的首部的下一个首部。
所述处理器根据所述第一位置参数以及所述第二位置参数,生成第三位置参数和第四位置参数,所述第三位置参数用于标识第三字段在转发装置接收的第二报文中的位置,所述第三字段是所述第二报文中所述第一协议的首部中的字段,所述第三字段用于与所述第三表项的第一子匹配域进行匹配,所述第四位置参数用于标识第四字段在所述第二报文中的位置,所述第四字段是所述第二报文中所述第二协议的首部中的字段,所述第四字段用于与所述第三表项的第二子匹配域进行匹配,所述第二报文中所述第二协议的首部是所述第二报文中所述第一协议的首部的下一个首部。
所述第三字段的起始位置距所述第二报文中所述第一协议的首部的起始位置的偏移等于所述第一字段的起始位置距所述第一报文中所述第一协议的首部的起始位置的偏移,所述第四字段的起始位置距所述第二报文中所述第二协议的首部的起始位置的偏移等于所述第二字段的起始位置距所述第一报文中所述第二协议的首部的起始位置的偏移。
第三方面,本发明提供了一种报文处理的装置,包括接收单元,获取单元,查找单元和处理单元:
所述接收单元,用于接收第一报文,所述第一报文包括第一首部和第二首部,所述第二首部是所述第一首部的下一个首部,所述第一首部的协议是第一协议,所述第二首部的协议是第二协议。
所述获取单元,用于根据第一位置参数从所述接收单元接收的所述第一报文的所述第一首部获取第一字段,根据第二位置参数从所述接收单元接收的所述第一报文的所述第二首部获取第二字段,所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部以及当所述第一报文包含所述第一首部的下一个首部时所述第一首部的下一个首部的协议,第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部以及所述第一报文包含所述第二首部的下一个首部时所述第二首部的下一个首部的协议。
所述查找单元,用于通过一个第一查找请求,在第一流表中查找是否存在与第一查找关键字匹配的表项,所述第一查找请求携带所述第一查找关键字,所述第一查找关键字包括所述获取单元获取的所述第一字段和所述第二字段。
所述处理单元,用于根据所述查找单元在所述第一流表中查找到的与所述第一查找关键字匹配的第一表项,对所述接收单元接收的所述第一报文进行处理,所述第一表项的匹配域包括第一比特串以及第一掩码,所述第一比特串包括第一子比特串和第二子比特串,所述第一掩码包括第一子掩码和第二子掩码。
所述第一子比特串与所述第一子掩码进行位与运算的结果等于所述第一字段与所述第一子掩码进行位与运算的结果,所述第二子比特串与所述第二子掩码进行位与运算的结果等于所述第二字段与所述第二子掩码进行位与运算的结果,所述第一子掩码和所述第二子掩码的每一比特为1。或者所述第一子比特串与所述第一子掩码进行位或运算的结果等于所述第一字段与所述第一子掩码进行位或运算的结果,所述第二子比特串与所述第二子掩码进行位或运算的结果等于所述第二字段与所述第二子掩码进行位或运算的结果,所述第一子掩码和所述第二子掩码的每一比特为0。
可选地,所述获取单元还用于,根据第三位置参数从所述接收单元接收的所述第一报文中获取第三字段,所述第一查找关键字还包括所述第三字段,所述第一比特串还包括第三子比特串,所述第一掩码还包括第三子掩码。
所述第三子比特串与所述第三子掩码进行位与运算的结果等于所述第三字段与所述第三子掩码进行位于运算的结果,所述第三子掩码的每一比特为0;或者所述第三子比特串与所述第三子掩码进行位或运算的结果等于所述第三字段与所述第三子掩码进行位或运算的结果,所述第三子掩码的每一比特为1。
可选地,所述接收单元还用于接收第二报文,所述第二报文包括第三首部和第四首部,所述第四首部是所述第三首部的下一个首部,所述第三首部的协议是所述第一协议,所述第四首部的协议是第三协议。
所述获取单元还用于根据所述第一位置参数从所述第三首部获取第四字段,根据所述第二位置参数从所述第二报文中获取第五字段,根据所述第三位置参数从所述第四首部获取第六字段,所述第四字段用于标识所述第二报文是否包含所述第三首部的下一个首部以及当所述第二报文包含所述第三首部的下一个首部时所述第三首部的下一个首部的协议,所述第六字段用于标识所述第二报文是否包含所述第四首部的下一个首部以及当所述第二报文包含所述第四首部的下一个首部时所述第四首部的下一个首部的协议。
所述查找单元还用于通过一个第二查找请求,在所述第一流表中查找是否存在与第二查找关键字匹配的表项,所述第二查找请求中携带所述第二查找关键字,所述第二查找关键字包括所述获取单元获取的所述第四字段、所述第五字段以及所述第六字段。
所述处理单元还用于根据所述查找单元在所述第一流表中查找到的与所述第二查找关键字匹配的第二表项,对所述接收单元接收的所述第二报文进行处理,所述第二表项的匹配域包括第二比特串以及第二掩码,所述第二比特串包括第四子比特串、第五子比特串以及第六子比特串,所述第二掩码包括第四子掩码、第五子掩码以及第六子掩码。
所述第四子比特串与所述第四子掩码进行位与运算的结果等于所述第四字段与所述第四子掩码位与运算的结果,所述第五子比特串与所述第五子掩码进行位与运算的结果等于所述第五字段与所述第五子掩码位与运算的结果,所述第六子比特串与所述第六子掩码进行位与运算的结果等于所述第六字段与所述第六子掩码位与运算的结果,所述第四子掩码和所述第六子掩码的每一比特为1,所述第五子掩码的每一比特为0。或者所述第四子比特串与所述第四子掩码进行位或运算的结果等于所述第四字段与所述第四子掩码进行位或运算的结果,所述第五子比特串与所述第五子掩码进行位或运算的结果等于所述第五字段与所述第五子掩码进行位或运算的结果,所述第六子比特串与所述第六子掩码进行位或运算的结果等于所述第六字段与所述第六子掩码进行位或运算的结果,所述第四子掩码和所述第六子掩码的每一比特为0,所述第五子掩码的每一比特为1。
可选地,第一方面或者第三方面提供的技术方案中,所述第一位置参数包括第一偏移和第一长度,所述第一偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移,所述第一长度为所述第一字段的长度。
可选地,第一方面或者第三方面提供的技术方案中,所述第二位置参数包括第二偏移和第二长度,所述第二偏移为所述第二字段的起始位置距所述第一首部的起始位置的偏移,所述第二长度为所述第二字段的长度。
可选地,第一方面或者第三方面提供的技术方案中,所述第一位置参数包括第一基本偏移、第一具体偏移和第一长度,所述第一基本偏移为零,所述第一具体偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移,所述第一长度为所述第一字段的长度。
可选地,第一方面或者第三方面提供的技术方案中,所述第二位置参数包括第二基本偏移、第二具体偏移和第二长度,所述第二长度为所述第二字段的长度,所述第二基本偏移为所述第一首部起始位置距所述第二首部的起始位置的偏移,所述第二具体偏移为所述第二字段起始位置距所述第二首部的起始位置的偏移。
可选地,第一方面或第三方面提供的技术方案中,所述第一首部的协议可以是基于开放式系统互联(opensysteminterconnection,OSI)模型中的二层协议。例如媒体接入控制(mediaaccesscontrol,MAC)协议或者异步传输模式(asynchronoustransfermode,ATM)协议。所述第二首部的协议可以是三层协议。例如IPv4或者IPv6。可替换地,所述第一首部的协议可以是三层协议,所述第二首部的协议是四层协议。所述四层协议可以是TCP或者UDP。可替换地,所述第一首部的协议可以是四层协议,所述第二首部的协议可以是五层协议。所述五层协议可以是远程过程调用(remoteprocedurecall,RPC)协议或者结构化查询语言(structuredquerylanguage,SQL)协议。可替换地,所述第一首部的协议可以是五层协议,所述第二首部的协议可以是六层协议。所述六层协议可以是美国信息交换标准码(Americanstandardcodeforinformationinterchange,ASCII)协议。可替换地,所述第一首部的协议可以是六层协议,所述第二首部的协议可以是七层协议。所述七层协议可以是超文本传输协议(hypertexttransferprotocol,HTTP)或者文件传输协议(filetransferprotocol,FTP)。可替换地,所述第一首部的协议可以是用户自定义的协议。所述第二首部的协议可以是用户自定义的协议。所述用户是所述网络装置的用户。例如,所述用户可以是网络运营商。所述网络运营商可以是威讯无线(VerizonWireless)或者中国移动通信集团公司(ChinaMobileCommunicationsCorporation)。
可选地,第一方面或第三方面提供的技术方案中,所述第一首部的协议是IPv4协议,所述第一字段是所述第一首部中的Protocol字段。或者,所述第一首部的协议是IPv6协议,所述第一字段是所述第一首部中的NextHeader字段。可替换的,所述第二首部的协议是IPv4协议,所述第二字段是所述第二首部中的Protocol字段。或者,所述第二首部的协议是IPv6协议,所述第二字段是所述第二首部中的NextHeader字段。
第四方面,提供了一种流表生成装置,包括:第一获取单元,第一生成单元。
所述第一获取单元用于获取第一流表和第二流表,所述第一流表包括第一表项,所述第一表项包括匹配域和跳转指令,所述第一表项的跳转指令指向所述第二流表,指向所述第二流表的跳转指令的数量等于1,所述第二流表包括第二表项,所述第二表项包括匹配域。
所述第一生成单元用于根据所述第一获取单元获取的所述第一流表和所述第二流表,生成一个第三流表,所述第三流表包括第三表项,所述第三表项包括匹配域,所述第三表项的匹配域包括第一子匹配域和第二子匹配域,所述第一子匹配域包括第一子比特串和第一子掩码,所述第二子匹配域包括第二子比特串和第二子掩码,所述第一子比特串和所述第一表项的匹配域相等,所述第二子比特串和所述第二表项的匹配域相等。
所述第一子掩码和所述第二子掩码的每一比特为1,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位与运算;或者所述第一子掩码和所述第二子掩码的每一比特为0,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位或运算。
可选地,所述第一获取单元还用于获取第四流表,所述第四流表包括第四表项,所述第四表项包括匹配域,所述第一流表还包括第五表项,所述第五表项包括匹配域和跳转指令,所述第五表项的跳转指令指向所述第四流表,指向所述第四流表的跳转指令的数量等于1。
所述第三表项的匹配域还包括第三子匹配域,所述第三子匹配域包括第三子比特串和第三子掩码。
所述第三子掩码的每一比特为0并且所述第三子匹配域的掩码匹配算法为位与运算,或者,所述第三子掩码的每一比特为1并且所述第三子匹配域的掩码匹配算法为位或运算。
所述第三流表还包括第六表项,所述第六表项包括匹配域,所述第六表项的匹配域包括第四子匹配域,第五子匹配域和第六子匹配域,所述第四子匹配域包括第四子比特串和第四子掩码,所述第五子匹配域包括第五子比特串和第五子掩码,所述第六子匹配域包括第六子比特串和第六子掩码,所述第四子比特串与所述第五表项的匹配域相等,所述第六子比特串与所述第四表项的匹配域相等。
所述第四子掩码的每一比特为1,所述第五子掩码的每一比特为0,所述第六子掩码的每一比特为1,所述第四子匹配域、所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位与运算;或者所述第四子掩码的每一比特为0,所述第五子掩码的每一比特为1,所述第六子掩码的每一比特为0,所述第四子匹配域、所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位或运算。
可选地,还包括第二获取单元和第二生成单元。
所述第二获取单元用于获取第一位置参数和第二位置参数,所述第一位置参数用于标识与所述第一表项的匹配域进行匹配的字段在所述转发装置接收的报文中的位置,所述第二位置参数用于标识与所述第二表项的匹配域进行匹配的字段在所述转发装置接收的报文中的位置。
所述第二生成单元用于根据所述第二获取单元获取的所述第一位置参数和所述第二位置参数,生成第三位置参数和第四位置参数。所述第三位置参数用于标识第三字段在转发装置接收的第二报文中的位置,所述第三字段是所述第二报文中所述第一协议的首部中的字段,所述第三字段用于与所述第三表项的第一子匹配域进行匹配。所述第四位置参数用于标识第四字段在所述第二报文中的位置,所述第四字段是所述第二报文中所述第二协议的首部中的字段,所述第四字段用于与所述第三表项的第二子匹配域进行匹配,所述第二报文中所述第二协议的首部是所述第二报文中所述第一协议的首部的下一个首部。
所述第三字段的起始位置距所述第二报文中所述第一协议的首部的起始位置的偏移等于所述第一字段的起始位置距所述第一报文中所述第一协议的首部的起始位置的偏移,所述第四字段的起始位置距所述第二报文中所述第二协议的首部的起始位置的偏移等于所述第二字段的起始位置距所述第一报文中所述第二协议的首部的起始位置的偏移。
可选地,第二方面或者第四方面提供的技术方案中,所述第一位置参数和所述第二位置参数中的每一个位置参数分别包括偏移和长度,所述第三位置参数和所述第四位置参数中的每一个位置参数分别包括基本偏移、具体偏移和长度,所述第三位置参数中的基本偏移为零,所述第三位置参数中的具体偏移与所述第一位置参数中的偏移相等,所述第三位置参数中的长度与所述第一位置参数中的长度相等,所述第四位置参数的基本偏移等于所述第二报文中所述第一协议的首部的长度,所述第四位置参数中的具体偏移与所述第二位置参数中的偏移相等,所述第四位置参数中的长度与所述第二位置参数中的长度相等。
可选地,第二方面或者第四方面提供的技术方案中,指向所述第一流表的跳转指令的数量大于1,或者没有跳转指令指向所述第一流表。
可选地,第一方面、第二方面、第三方面或第四方面提供的技术方案中,所述第一首部的下一个首部是指与所述第一首部相邻,且相对于所述第一首部位于所述第一报文的内层的首部。所述第二首部的下一个首部是指与所述第二首部相邻,且相对于所述第二首部位于所述第一报文的内层的首部。所述第三首部的下一个首部是指与所述第三首部相邻,且相对于所述第三首部位于所述第二报文的内层的首部。所述第四首部的下一个首部是指与所述第四首部相邻,且相对于所述第四首部位于所述第二报文的内层的首部。
可选地,第一方面、第二方面、第三方面或第四方面提供的技术方案中,流表的某个子匹配域的掩码匹配算法为位与运算是指,当报文中的某个字段与所述某个子匹配域包括的子比特串进行位与运算的结果,等于所述某个子匹配域包括的子比特串与所述某个子匹配域包括的子掩码进行位与运算的结果,则确定所述某个字段与所述子匹配域匹配。流表的某个子匹配域的掩码匹配算法为位或运算是指,当报文中的某个字段与所述某个子匹配域包括的子比特串进行位或运算的结果,等于所述某个子匹配域包括的子比特串与所述某个子匹配域包括的子掩码进行位或运算的结果,则确定所述某个字段与所述子匹配域匹配。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的技术方案的一种应用场景的示意图。
图2为本发明实施例提供的技术方案的一种可能的执行主体的结构示意图。
图2a为本发明实施例提供的一种报文处理方法的流程示意图。
图3为本发明实施例提供的另一种报文处理方法的流程示意图。
图4是本发明实施例提供的又一种报文处理方法的流程示意图。
图5是图4提供的根据位置参数获取特殊字段的具体流程图。
图6是本发明实施例提供的一种流表的生成方法的流程示意图。
图7是图6提供的流表跳转指令之间的关系示意图。
图8是本发明实施例提供的一种报文处理装置的结构示意图。
图9是本发明实施例提供的一种流表生成装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
本发明实施例描述的应用场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定。本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。
本申请中,首部的协议是指该首部所遵循的协议。例如IPv4header的协议是IPv4。TCPheader的协议是TCP。虚拟局域网标签(virtuallocalareanetworktag,VLANtag)的协议是VLAN协议。
本申请中,报文的某个首部的下一个首部与所述某个首部相邻。相对于所述某个首部,所述下一个首部位于所述报文的内层,相对于所述下一个首部,所述某个首部位于所述报文的外层。同样的道理,报文的某个首部的上一个首部与所述某个相邻,相对于所述某个首部,所述上一个首部位于所述报文的外层,相对于所述上一个首部,所述某个首部位于所述报文的内层。
本申请中,报文的某个首部中的特殊字段是指,用于标识所述报文中是否包含所述某个首部的下一个首部,以及当所述报文包含所述某个首部的下一个首部时,所述某个首部的下一个首部的协议的字段。例如,以太网帧头中的特殊字段是EthernetType字段。IPv4header中的特殊字段是Protocol字段。IPv6header中的特殊字段是NextHeader字段。
本申请中,对报文的解析是指确定报文中包含的首部。对某个首部的解析,是指根据所述某个首部中的特殊字段确定所述报文中是否包含所述某个首部的下一个首部,以及当所述报文包含所述某个首部的下一个首部时,所述某个首部的下一个首部的协议。
本申请中,流表的某个子匹配域的掩码匹配算法为位与运算是指,当报文中的某个字段与所述某个子匹配域包括的子比特串进行位与运算的结果,等于所述某个子匹配域包括的子比特串与所述某个子匹配域包括的子掩码进行位与运算的结果,所述某个字段与所述子匹配域匹配。流表的某个子匹配域的掩码匹配算法为位或运算是指,当报文中的某个字段与所述某个子匹配域包括的子比特串进行位或运算的结果,等于所述某个子匹配域包括的子比特串与所述某个子匹配域包括的子掩码进行位或运算的结果,所述某个字段与所述子匹配域匹配。
本申请中,位置参数用于指示某个字段在某个报文中的位置。所述位置参数可以包括偏移和长度。所述某个字段的偏移为所述某个字段的起始位置距所述位置参数的基准位置的偏移。
本申请中,某个字段的起始位置是指所述某个字段的最重要比特(mostsignificantbit,MSB)。某个首部的起始位置是指所述某个首部的MSB。某个报文的起始位置是指所述某个报文的MSB。
图1是本发明实施例提供的技术方案的一种应用场景示意图。如图所示,在软件定义网络(softwaredesignnetwork,SDN)中,网络架构包括控制装置(controller)和转发装置。Controller通过控制通道与转发装置进行通信。工程师可以利用controller进行编程,最终实现对转发装置的控制。例如,工程师通过在controller上编程生成流表(flowtable)。Controller通过控制通道将流表发送到转发装置。每个流表由一个表项(entry)或多个表项组成。每个流表包括匹配域(matchfield)和指令域(instructionfield)。每个流表的表项对应报文处理规则。具体来说,转发装置接收报文后,确定需要查找的流表。例如,转发装置根据用于接收报文的端口确定需要查找的流表。转发装置根据所述流表,从报文中获取用于与所述流表的匹配域进行匹配的查找关键字。然后,转发装置根据所述查找关键字确定与报文匹配的流表表项,并根据匹配的流表表项中的指令对报文进行处理。
本申请所涉及的转发装置可以是网络交换机、防火墙、负载均衡器、波分复用设备、分组传送网设备、基站、基站控制器或者数据中心。
所述转发装置接收的不同报文,报文的数据格式可能并不相同。例如,路由器可以包括ATM接口、同步数字体系承载报文(packetoversynchronousdigitalhierarchy,POS)接口以及以太网接口。所述路由器可以通过ATM接口接收ATM帧。所述路由器可以通过POS接口接收点到点协议(pointtopointprotocol,PPP)报文。所述路由器可以通过以太网接口接收以太网帧。下文以以太网帧为例进行说明。例如,所述以太网帧的Ethernetframeheader的下一个首部可能是VLANtag,也可能是IPv4header。又例如,在存在IPv4header时,所述IPv4header的下一个首部可能是TCPheader,也可能是UDPheader。要实现对不同数据格式的报文进行正确地处理,就需要先对所述报文进行解析,从而确定报文中包含的首部。举例来说,假设所述路由器通过以太网接口接收到的以太网帧中包含IPheader。所述路由器为实现根据IPheader以及路由表确定下一跳,就需要确定目的网际协议地址(DestinationIPAddress)字段在以太网帧中的位置。所述路由器为实现确定所述以太网帧中是否包含IPheader,以及所述IPheader在所述报文中的位置,所述路由器需要对所述以太网帧中的Ethernetframeheader解析,从而确定所述以太网帧中Ethernetframeheader的下一个首部。如果所述以太网帧中Ethernetframeheader的下一个首部是VLANtag,所述路由器还需要对所述VLANtag进行解析从而确定所述VLANtag的下一个首部是否是所述IPheader。当然,如果所述以太网帧中包含多个VLANtag,所述以太网帧需要对每个VLANtag都进行解析。
图2示出了本发明实施例提供的一种转发装置200的结构示意图。图2所示的转发装置200可以用于实现图1所示的转发装置200。如图所示,所述转发装置200包括接口电路201,处理器(processor)202、三态内容寻址存储器(ternarycontentaddressablememory,TCAM)203以及总线(bus)204。接口电路201,处理器202和TCAM203通过总线204相连。所述接口电路201用于接收报文。所接口电路201接收报文后,通过总线204发送给处理器202。处理器202可以将报文存储于处理器202的寄存器205中。举例来说,所述处理器可以是单核(single-core)处理器,也可以是多核(multi-core)处理器。
处理器202接收所述接口电路201接收的报文后,从指令存储器(instructionmemory,IMEM)中获取流表的标识以及位置参数。所述指令存储器中包含用于对所述报文的首部进行解析的计算机程序。所述计算机程序中可以包括所述流表的标识。举例来说,所述指令存储器可以是静态随机存取存储器(staticrandomaccessmemory,SRAM),所述SRAM可以和处理器202集成在一个芯片内。所述SRAM和处理器202也可以分别被包含在两个芯片内。
TCAM203中存储了流表。处理器202根据所述位置参数从报文中获取查找关键字后,向TCAM203发送查找请求。所述查找请求携带所述查找关键字。TCAM203接收到所述查找关键字后,在流表中查找与所述查找关键字匹配的表项。所述流表的匹配域包括比特串和掩码。TCAM203通过掩码匹配算法,确定所述查找关键字匹配的表项。TCAM203通过总线204向处理器202反馈查找响应。查找响应可以包含与所述查找关键字匹配的表项中的信息。例如,所述查找响应可以包含匹配的表项中指令域的指令的存储地址。所述处理器202根据所述指令的存储地址,在指令存储器206中获取所述指令,并根据所述指令对所述报文进行处理。
处理器202可以通过中央处理器(centralprocessingunit,CPU),数字信号处理器(digitalsignalprocessor,DSP)、专用集成电路(application-specificintegratedcircuit,ASIC),现场可编程门阵列(fieldprogrammablegatearray,FPGA)或者其他可编程逻辑器件实现。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。
图2a为本发明实施例提供的一种报文处理的方法的流程示意图。所述方法的执行主体可以是图2的转发装置200。具体来说,可以是处理器202。
参见图2a,所述方法包括S201、S202以及S203。
S201、转发装置接收报文,所述报文包含多个首部。
S202、通过对所述报文进行解析,从而确定所述报文的处理方式。
S203、根据所述处理方式对所述报文进行处理。
S202具体实现时可以包括:
当所述报文中包含多个首部时,可以通过如下方式对所述报文进行解析:处理器202分别通过对多个流表进行查找实现对多个首部的解析。转发装置200维护了所述多个流表。具体来说,所述多个流表可以保存在TCAM203中。所述多个流表与所述多个首部的协议一一对应。处理器202对所述多个流表进行查找需要通过对TCAM203进行多次访问实现。处理器202对TCAM203进行一次访问具体包括:转发装置200从所述报文的一个首部中获取所述首部的特殊字段,根据所述特殊字段在与所述首部的协议对应的流表中查找匹配的表项,并根据所述匹配的表项确定下一个操作。例如,转发装置200接收到以太网帧。所述以太网帧包括Ethernetframeheader、IPv4header以及TCPheader。所述Ethernetframeheader是所述以太网帧的首部。所述IPv4header和所述TCPheader属于所述以太网帧的净荷。所述IPv4header是所述Ethernetframeheader的下一个首部。所述TCPheader是所述IPv4header的下一个首部。转发装置200从所述Ethernetframeheader中获取EthernetType字段。转发装置200以所述EthernetType字段为查找关键字,访问TCAM203。具体为,转发装置200在Ethernetframeheader对应的流表中查找与EthernetType字段匹配的表项,并根据匹配的表项确定所述以太网帧中所述Ethernetframeheader之后是否有下一个首部,以及当所述以太帧首部之后存在下一个首部时所述下一个首部的协议。例如,所述Ethernettype字段的值等于0x0800(十六进制),与所述EthernetType字段匹配的表项中,匹配域也等于0x0800(十六进制),则所述转发装置确定所述以太网帧中所述Ethernetframeheader之后有下一个首部且所述下一个首部的协议为IPv4。与所述EthernetType字段匹配的表项包含跳转指令。所述跳转指令的操作数是用于解析所述IPv4的首部的流表对应的指令块的存储地址或指令块编号。转发装置200可以根据用于解析所述IPv4的首部的流表对应的指令块中的流表标识,访问IPv4协议的首部对应的流表,根据指令块中的位置参数从所述IPv4header中获取查找关键字。例如,转发装置200从所述IPv4header中获取Protocol字段,以所述Protocol字段为查找关键字,再次访问TCAM203。具体为,转发装置200在所述IPv4header对应的流表中查找与Protocol字段匹配的表项。例如所述Protocol字段的值等于0x06(十六进制),则与所述Protocol字段匹配的表项的匹配域等于0x06(十六进制)。所述转发装置根据所述匹配的表项,确定所述以太网帧中所述IPv4header之后有下一个首部,且下一个首部为TCPheader。
S203的具体实现可以包括,根据所述报文中首部的协议类型对应的处理方式,对所述报文进行处理。例如,对所述报文进行转发、丢弃、封装或者解封装。对所述报文进行处理也可以是设置所述报文的元数据(metadata)。所述metadata可以是用于处理所述报文的计算机程序的参数。所述网络装置对所述metadata进行设置后,所述网络装置可以根据用于处理所述报文的计算机程序以及所述参数对所述报文进行处理。
上述技术方案中,当报文中包含多个首部时,转发装置需要对转发装置中的存储器进行多次访问,从而确定如何对报文进行处理。访问存储器的次数与所述报文中包含的首部的个数相同。开销比较大。
图3为本发明实施例提供的另一种报文处理方法的流程示意图。图3涉及的转发装置具体可以通过图2所示的转发装置200实现。下面结合图3,对本发明实施例提供的报文处理方法进行说明。所述报文处理方法包括S301、S302、S303和S304。
S301,转发装置接收第一报文。
所述第一报文包括第一首部和第二首部,所述第二首部是所述第一首部的下一个首部,所述第一首部的协议是第一协议,所述第二首部的协议是第二协议。
举例来说,所述第一首部的协议是基于OSI模型中的二层协议。例如所述二层协议可以是MAC协议或者ATM协议。所述第二首部的协议可以是三层协议。例如所述三层协议可以是IPv4或者IPv6。可替换地,所述第一首部的协议是三层协议,所述第二首部的协议是四层协议。所述四层协议可以是TCP或者UDP。可替换地,所述第一首部的协议是四层协议,所述第二首部的协议是五层协议。所述五层协议可以是RPC协议或者SQL协议。可替换地,所述第一首部的协议是五层协议,所述第二首部的协议是六层协议。所述六层协议可以是ASCII协议。可替换地,所述第一首部的协议是六层协议,所述第二首部的协议是七层协议。所述七层协议可以是HTTP或者FTP。可替换地,所述第一首部的协议是用户自定义的协议,所述第二首部的协议是用户自定义的协议。所述用户是所述网络装置的用户。例如,所述用户可以是网络运营商。所述网络运营商可以是威讯无线或者中国移动通信集团公司。
举例来说,所述第一首部可以是所述第一报文的首部,也可以是所述第一报文的净荷中的首部。例如,所述第一报文可以是以太网帧。例如,所述第一首部可以是Ethernetframeheader,所述第一首部也可以是以太网帧的净荷中的header。例如IPheader,或者TCPheader。
S301的执行主体可以是接口电路201。另外,接口电路201接收到所述第一报文后,处理器202可以将所述第一报文保存到寄存器205中。
S302,所述转发装置根据第一位置参数从所述第一首部获取第一字段,根据第二位置参数从所述第二首部获取第二字段。
所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部以及当所述第一报文包含所述第一首部的下一个首部时所述第一首部的下一个首部的协议,第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部以及所述第一报文包含所述第二首部的下一个首部时所述第二首部的下一个首部的协议。即,所述第一字段是所述第一首部中的特殊字段,所述第二字段是所述第二首部中的特殊字段。
所述第一字段的功能是用于标识所述第一报文是否包含所述第一首部的下一个首部以及当所述第一报文包含所述第一首部的下一个首部时所述第一首部的下一个首部的协议。所述第一字段的功能是由所述第一协议定义的。所述第一报文是遵循所述第一协议的报文。当所述第一报文中所述第一首部的下一个首部是所述第二首部时,所述第一字段标识的所述第一首部的下一个首部的协议与所述首部的协议是一致的。也就是说,所述第一字段标识的所述第一首部的下一个首部的协议是所述第二协议。所述第一位置参数用于标识第一协议的首部中特殊字段的位置,所述第二位置参数用于标识第二协议的首部中特殊字段的位置。
S302的执行主体可以是处理器202。具体来说,指令存储器206中可以保存所述第一位置参数以及所述第二位置参数。处理器202可以从指令存储器206获取所述第一位置参数以及所述第二位置参数。处理器202可以根据所述第一位置参数以及所述第二位置参数从寄存器205中保存的所述第一报文中获取所述第一字段以及所述第二字段。
可选地,所述第一位置参数包括第一偏移和第一长度。所述第一偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移。所述第一长度为所述第一字段的长度。所述第二位置参数包括第二偏移和第二长度。所述第二偏移为所述第二字段的起始位置距所述第一首部的起始位置的偏移。所述第二长度为所述第二字段的长度。
举例来说,所述第一偏移和所述第二偏移,是以第一首部的起始位置为基准位置的偏移。在所述转发装置在根据所述第一位置参数和第二位置参数获取第一字段和第二字段之前,可以将基准位置设置为第一首部的起始位置。也就是说,所述第一字段的基准位置和所述第二字段的基准位置可以是相同的。例如,第一偏移为41比特(bit),第一长度为8bit,是指所述第一字段是从所述第一首部的起始位置起的第41个比特到第48个bit的字段。第二偏移为65bit,第二长度为8bit,是指所述第二字段是从所述第一首部的起始位置起的第65个比特到第72个比特的字段。
可选地,所述第一位置参数包括第一基本偏移、第一具体偏移和第一长度。所述第一基本偏移为零。所述第一具体偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移。所述第一长度为所述第一字段的长度。所述第二位置参数包括第二基本偏移、第二具体偏移和第二长度。所述第二长度为所述第二字段的长度。所述第二基本偏移为所述第一首部起始位置距所述第二首部的起始位置的偏移。所述第二具体偏移为所述第二字段起始位置距所述第二首部的起始位置的偏移。
所述第一基本偏移是所述第一首部的起始位置距基准位置的偏移,所述第一具体偏移是所述第一字段距所述第一首部的起始位置的偏移。第一基本偏移与所述第一具体偏移之和,是所述第一字段的起始位置距所述基准位置的偏移所述基准位置是所述第一首部的起始位置。所述第二基本偏移是所述第二首部的起始位置距所述基准位置的偏移,所述第二具体偏移是所述第二字段的起始位置距所述第二首部的起始位置的偏移。所述第二基本偏移与所述第二具体偏移之和,是所述第二字段的起始位置距所述基准位置的偏移。
例如,第一首部是Ethernetframeheader,所述第一首部中第一字段是从第一首部的起始位置起的第97个比特到第112个比特。所述第一首部的长度为112bit,则第一位置参数的第一基本偏移为0,第一具体偏移为97bit,第一长度为16bit。第二首部是IPv4首部,所述第二字段为从第二首部起的第41个比特到第48个比特。所述第二首部起始位置距所述第一首部起始位置为112bit,则第二基本偏移为112bit。第二具体偏移为41bit。第二长度为8bit。
S303,所述转发装置通过一个第一查找请求,在第一流表中查找是否存在与第一查找关键字匹配的表项,所述第一查找请求携带所述第一查找关键字,所述第一查找关键字包括所述第一字段和所述第二字段。
举例来说,所述转发装置通过第一流表的标识,获取所述第一流表。所述转发装置在获取所述第一流表的标识时,还获取所述第一位置参数和所述第二位置参数。例如,所述第一流表的标识、所述第一位置参数和所述第二位置参数存储于指令存储器206中。具体来说,所述第一流表的标识、所述第一位置参数和所述第二位置参数可以是指令存储器206中保存的计算机程序中的信息。
S303的执行主体可以是处理器202。具体来说,处理器202可以根据获取的所述第一字段和所述第二字段生成所述一个第一查找请求。所述处理器可以通过总线204向TCAM203发送所述一个第一查找请求。所述第一流表保存在TCAM203中。接收到所述一个第一查找请求后,TCAM203在第一流表中查找是否存在与所述第一查找关键字匹配的表项。
所述第一查找请求的数量为1。也就是说,只有一个所述第一查找请求。
在一种可能的实现方式中,所述第一首部为所述第一报文的首部。转发装置接收到所述报文时,根据所述转发装置的引导程序以及用于所述转发装置的接收所述第一报文的端口,获取第一流表标识。例如,所述第一报文为以太网帧,所述转发装置通过以太网端口接收所述第一报文。所述转发装置保存了所述以太网端口以及用于解析以太网帧头的微码的地址的映射关系。所述转发装置根据所述以太网端口确定所述用于解析以太网帧头的微码的地址。所述微码包括所述第一流表标识,第一位置参数和第二位置参数。
在另一种可能的实现方式中,所述第一首部为所述第一报文的净荷中的首部。所述转发装置通过执行所述第一流表的上一级流表中的匹配表项的跳转指令,获取存储所述第一流表标识的指令块。所述指令块中包括所述第一流表标识、所述第一位置参数和所述第二位置参数。所述转发装置在用所述第一报文的所述第一查找关键字与第一流表进行匹配之前,还用其他的查找关键字与另一流表进行匹配。所述转发装置根据所述另一流表的匹配表项中的跳转指令确定所述第一流表。例如,所述跳转指令的操作数等于所述第一流表的标识。所述另一流表为所述第一流表的上一级流表。
需要说明的是,所述转发装置在获取所述第一字段和所述第二字段之前,还可以根据所述的引导程序或所述第一流表上一级流表中的匹配表项中的指令,将所述第一位置参数和所述第二位置参数中的偏移的基准位置设置为所述第一首部的起始位置。
S304,所述转发装置确定所述第一流表中存在与所述第一查找关键字匹配的第一表项后,所述转发装置根据所述第一表项对所述第一报文进行处理。
所述第一表项的匹配域包括第一比特串以及第一掩码。所述第一比特串包括第一子比特串和第二子比特串,所述第一掩码包括第一子掩码和第二子掩码。
所述第一子掩码和所述第二子掩码可以根据方式1实现或者根据方式2实现。
方式1,所述第一子比特串与所述第一子掩码进行位与运算的结果等于所述第一字段与所述第一子掩码进行位与运算的结果,所述第二子比特串与所述第二子掩码进行位与运算的结果等于所述第二字段与所述第二子掩码进行位与运算的结果。所述第一子掩码和所述第二子掩码的每一比特为1。
方式2,所述第一子比特串与所述第一子掩码进行位或运算的结果等于所述第一字段与所述第一子掩码进行位或运算的结果,所述第二子比特串与所述第二子掩码进行位或运算的结果等于所述第二字段与所述第二子掩码进行位或运算的结果,所述第一子掩码和所述第二子掩码的每一比特为0。
举例来说,所述第一字段、所述第一子比特串和所述第一子掩码的长度相等。所述第二字段、所述第二子比特串和所述第二子掩码的长度相等。
S304的执行主体可以是处理器202和TCAM203。具体来说,TCAM203中可以保存第一流表的匹配域,并通过总线向处理器202反馈查找响应。所述查找响应可以包含于所述第一查找关键字匹配的第一表项的信息,例如所述查找响应可以包含所述第一表项中指令域的指令的存储地址。所述处理器202根据所述指令的存储地址,在指令存储器206中获取所述指令,并根据所述指令对所述报文进行处理。
举例来说,所述转发装置根据第一表项对所述第一报文进行处理,包括根据所述第一表项中的指令对所述第一报文进行处理。
在一种可能的实现方式中,所述第一表项中的指令包括用于设置元数据(metadata)的指令。例如,metadata可以保存在寄存器205中。处理器202根据用于设置metadata的指令的指示,可以执行如下操作:在第一报文的metadata中记录第一信息。所述第一信息用于指示所述第一报文中包含所述第二首部。以及,当所述第二字段标识所述第一报文还包括所述第二首部的下一个首部时,还在所述第一报文的metadata中记录第二信息。所述第二信息用于指示所述第一报文中包含所述第二首部的下一个首部。又例如,处理器202根据元数据指令的指示,可以执行如下操作:在所述第一报文的metadata中记录第三信息。所述第三信息用于指示所述第二首部的起始位置或终止位置。当所述第一报文还包括所述第二首部的下一个首部时,还在所述第一报文的metadata中记录第四信息。所述第四信息用于指示所述第二首部的下一个首部的起始位置或终止位置。
在另一种可能的示例中,所述转发装置根据所述第一表项确定所述第一报文中包括所述第二首部。当所述第一报文中包括所述第二首部的下一个首部时,所述转发装置根据所述第一表项,确定所述第二首部的下一个首部的协议。可选地,所述转发装置根据所述第二首部或者所述第二首部的下一个首部对所述第一报文进行转发。例如,根据与所述第二首部的协议对应的转发表对所述第一报文进行转发。或者,根据与所述第二首部的下一个首部的协议对应的转发表对所述第一报文进行转发。当所述第二首部的协议是多协议标签交换(MultiprotocolLabelSwitching,MPLS)协议时,所述第二首部的协议对应的转发表可以是入标签映射(incominglabelmap,ILM)表。所述第二首部是MPLSheader。当所述第二首部的下一个首部的协议是网际协议(internetprotocol,IP)时,所述第二首部的下一个首部对应的转发表可以是路由表。所述第二首部的下一个首部是IPheader。举例来说,所述转发装置根据所述第一报文的metadata,确定了所述第一报文中包含的首部之后,根据所述第一报文中包含的首部,对所述第一报文进行转发、丢弃、封装、解封装或者修改处理。例如,根据所述第一报文的metadata中记录的信息,确定所述第一报文中包括IPv4首部以及所述IPv4首部在所述第一报文中的起始位置。进而,修改IPv4首部中的生存时间(timetolive,TTL)字段的值。另外,所述转发装置还可以提取IPv4header中的目的IP地址,并根据所述目的IP地址将所述第一报文转发到下一跳。
举例来说,所述转发装置在获取所述第一流表标识、所述第一位置参数和所述第二位置参数的同时,还可以获取更多的位置参数,例如第N位置参数,N为大于2的整数;相应的,所述第一查找关键字中,还可以包括更多的字段。例如根据第N位置参数从第N首部中获取的第N字段;相应的,所述与第一查找关键字匹配的所述第一表项中,包括第N子比特串和第N子掩码。所述第N子比特串与所述第N子掩码进行位与运算的结果等于所述第N字段与所述第N子掩码进行位与运算的结果,所述第N子掩码的每一比特为1;或者所述第N子比特串与所述第N子掩码进行位或运算的结果等于所述第N字段与所述第N子掩码进行位或运算的结果,所述第N子掩码的每一比特为0。所述转发装置确定与所述第一查找关键字匹配的第一表项后,确定如何对第一报文进行处理。
图4是本发明实施例提供的又一报文处理方法的流程图。
S401,转发装置接收第一报文。
所述第一报文包括第一首部和第二首部,所述第二首部是所述第一首部的下一个首部,所述第一首部的协议是第一协议,所述第二首部的协议是第二协议。
S402,所述转发装置根据第一位置参数从所述第一首部获取第一字段,根据第二位置参数从所述第二首部中获取第二字段,根据第三位置参数从所述第一报文中获取第三字段。
所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部,以及当所述第一报文包含所述第一首部的下一个首部时,所述第一首部的下一个首部的协议。所述第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部,以及当所述第一报文包含所述第二首部下一个首部时,所述第二首部的下一个首部的协议。即,所述第一字段是所述第一首部中的特殊字段,所述第二字段是所述第二首部中的特殊字段。所述第一位置参数用于标识第一协议的首部中特殊字段的位置,所述第二位置参数用于标识第二协议的首部中特殊字段的位置。所述第三位置参数用于标识当所述转发装置接收的报文中,第一协议的首部的下一个首部是第三协议的首部时,所述第三协议的首部中的特殊字段的位置。例如,S405中第二报文中第一协议的首部的下一个首部是第三协议的首部。因此,第三字段不是所述第一报文中的特殊字段。
S403,所述转发装置通过一个第一查找请求,在所述第一流表中查找是否存在与所述第一查找关键字匹配的表项。
所述第一查找请求携带第一查找关键字。所述第一查找关键字包括所述第一字段、所述第二字段以及所述第三字段。
S404,所述转发装置确定所述第一流表中存在与所述第一查找关键字匹配的第一表项后,所述转发装置根据所述第一表项对所述第一报文进行处理。
所述第一表项的匹配域包括第一比特串以及第一掩码,所述第一比特串包括第一子比特串、第二子比特串以及第三子比特串,所述第一掩码包括第一子掩码、第二子掩码以及第三子掩码。
所述第一子掩码和所述第二子掩码可以通过方式1或者方式2实现。
方式1,所述第一子比特串与所述第一子掩码进行位与运算的结果等于所述第一字段与所述第一子掩码进行位与运算的结果,所述第二子比特串与所述第二子掩码进行位与运算的结果等于所述第二字段与所述第二子掩码进行位与运算的结果。所述第一子掩码和所述第二子掩码的每一比特为1。
方式2,所述第一子比特串与所述第一子掩码进行位或运算的结果等于所述第一字段与所述第一子掩码进行位或运算的结果,所述第二子比特串与所述第二子掩码进行位或运算的结果等于所述第二字段与所述第二子掩码进行位或运算的结果,所述第一子掩码和所述第二子掩码的每一比特为0。
所述第三子掩码可以通过方式3或者方式4实现。
方式3,所述第三子比特串与所述第三子掩码进行位与运算的结果等于所述第三字段与所述第三子掩码进行位与运算的结果,所述第三子掩码的每一比特为0。
方式4,所述第三子比特串与所述第三子掩码进行位或运算的结果等于所述第三字段与所述第三子掩码进行位或运算的结果,所述第三子掩码的每一比特为1。
举例来说,所述第三字段、所述第三子比特串和所述第三子掩码长度相等。
需要说明的是,S401-S404的具体实施细节可以分别与S301-S304的具体实施细节类似。因此,关于S401-S404的具体实现方式,此处不再赘述。
S405,转发装置接收第二报文。
所述第二报文包括第三首部和第四首部,所述第四首部是所述第三首部的下一个首部,所述第三首部的协议是所述第一协议,所述第四首部的协议是第三协议。
具体而言,所述S405中第二报文的第三首部的协议和S401中的第一报文的第一首部的协议,都是所述第一协议。即所述第一首部和所述第三首部所遵循的协议相同。在S405中所述第二报文的所述第四首部的协议和S401部分中所述第一报文的所述第二首部的协议,分别是所述第三协议和所述第二协议。例如,所述第一协议是IPv4,所述第二协议是TCP,所述第三协议是UDP,即所述第一报文中,所述第一首部是IPv4的首部,在所述IPv4的首部之后相邻的所述第二首部是TCP的首部。所述第二报文中,所述第三首部是IPv4的首部,在所述IPv4的首部之后相邻的所述第四首部是UDP的首部。
S406,所述转发装置根据所述第一位置参数从所述第三首部获取第四字段,根据所述第二位置参数从所述报文中获取第五字段,根据所述第三位置参数从所述第四首部获取第六字段。
所述第四字段用于标识所述第二报文是否包含所述第三首部的下一个首部,以及当所述第二报文包含所述第三首部的下一个首部时,所述第三首部的下一个首部的协议。所述第六字段用于标识所述第二报文是否包含所述第四首部的下一个首部以及当所述第二报文包含所述第四首部的下一个首部时所述第四首部的下一个首部的协议。即,所述第四字段是所述第三首部中的特殊字段,所述第六字段是所述第四首部中的特殊字段。所述第一位置参数用于标识所述第一协议的首部中特殊字段的位置,所述第三位置参数用于标识所述第三协议的首部中特殊字段的位置。所述第二位置参数用于标识当所述转发装置接收的报文中,所述第一协议的首部的下一个首部是所述第二协议的首部时,所述第二协议的首部中的特殊字段的位置。例如,S401中的所述第一报文中所述第一协议的首部的下一个首部是所述第二协议的首部。因此,所述第五字段不是所述第二报文中的特殊字段。
可选地,所述第一位置参数包括第一偏移和第一长度,所述第一偏移为所述第四字段的起始位置距所述第三首部的起始位置的偏移,所述第一长度为所述第四字段的长度;所述第三位置参数包括第三偏移和第三长度,所述第三偏移为所述第六字段的起始位置距所述第三首部的起始位置的偏移,所述第三长度为所述第六字段的长度。
可选地,所述第一位置参数包括第一基本偏移、第一具体偏移和第一长度,所述第一基本偏移为零,所述第一具体偏移为所述第四字段的起始位置距所述第三首部的起始位置的偏移,所述第一长度为所述第四字段的长度;所述第三位置参数包括第三基本偏移、第三具体偏移和第三长度,所述第三长度为所述第六字段的长度,所述第三基本偏移为所述第四首部起始位置距所述第三首部的起始位置的偏移,所述第三具体偏移为所述第六字段起始位置距所述第四首部的起始位置的偏移。
图5示出了根据所述第一位置参数、所述第二位置参数和所述第三位置参数,在第一报文中获取S402中第一字段、第二字段和第三字段,以及在第二报文中获取S406中第四字段、第五字段和第六字段的示意图。
在转发装置获取所述第一报文或所述第二报文后,获取所述第一位置参数、所述第二位置参数和所述第三位置参数时,还将基准位置设置在所述第一首部或所述第三首部的起始位置。所述基准位置是所述第一位置参数、所述第二位置参数以及所述第三位置参数的基准位置。在提取上述字段的过程中,所述基准位置不发生改变。所述第二位置参数标识的是,当报文中所述第一协议的首部的下一个首部是所述第二协议的首部时,所述第二协议的首部中特殊字段在报文中的位置;所述第三位置参数标识的是,当报文中所述第一协议的首部的下一个首部是所述第三协议的首部时,所述第三协议的首部中特殊字段在报文中的位置。
在所述转发装置接收的报文中,可能包括所述第一协议的首部的下一个首部是所述第二协议的首部的报文,如所述第一报文;也可能包括所述第一协议的首部的下一个首部是所述第三协议的首部的报文,如所述第二报文。所述转发装置接收到报文后,既根据所述第二位置参数从报文中提取字段,也根据所述第三位置参数从报文中提取字段。这样,无论接收到的报文中所述第一协议的首部的下一个首部是所述第二协议的首部还是所述第三协议的首部,所述转发装置都可以获取到所述第二协议的首部(当所述报文中所述第一协议的首部的下一个首部是所述第二协议的首部时),或者所述第三协议的首部(当所述报文中所述第一协议的首部的下一个首部是所述第三协议的首部时)。
所述第一报文中的所述第一首部的协议与所述第二报文中的所述第三首部的协议是相同的。所述第一首部的比特的数量等于所述第三首部的比特的数量。所述第一首部的格式与所述第三首部的格式相同。所述第一首部中的特殊字段在所述第一首部中的位置与所述第三首部中的特殊字段在所述第三首部中的位置相同。因此,所述转发装置可以根据所述第一位置参数从所述第一首部中获取所述第一首部中的特殊字段。并且,所述转发装置可以根据所述第一位置参数从所述第三首部中获取所述第三首部中的特殊字段。
所述第二首部和所述第四首部分别是所述第一报文中所述第一首部的下一个首部以及所述第二报文中所述第三首部的下一个首部。所述第二首部的协议和所述第四首部的协议是不同的。因此,所述第二首部的格式与所述第四首部的格式是不同的。所述第二首部中的特殊字段在所述第二首部中的位置可能不同于所述第四首部中的特殊字段在所述第四首部中的位置。所述第二首部的比特的数量可能不等于所述第四首部的比特的数量。所述转发装置可以根据所述第三位置参数从所述第二报文的所述第四首部中获取特殊字段。但是,所述转发装置根据所述第三位置参数从所述第一报文中获取的所述第三字段不是所述第二首部的特殊字段。甚至,如图5所示,所述转发装置根据所述第三位置参数从所述第一报文中获取的所述第三字段可能不是所述第二首部中的字段。同样的道理,所述转发装置可以根据所述第二位置参数从所述第一报文的所述第二首部中获取特殊字段。但是,所述转发装置根据所述第二位置参数从所述第二报文中获取的所述第五字段不是所述第四首部中的特殊字段。
需要说明的是,图5所示的所述第一首部和所述第二首部在所述第一报文中的位置,以及所述第三首部和所述第四首部在所述第二报文中的位置仅仅是示意的。
所述第一首部可以如图5所示,是所述第一报文净荷中的首部,即所述第一报文中在所述第一首部之前还有其它首部,所述第一首部的起始位置与所述第一报文的起始位置不同。可替换的,所述第一首部也可以是所述第一报文中的首部,即所述第一首部的起始位置与所述第一报文的起始位置相同。
同理,所述第三首部可以如图5所示,是所述第二报文净荷中的首部,即所述第二报文中在所述第三首部之前还有其它首部,所述第三首部的起始位置与所述第二报文的起始位置不同。可替换的,所述第三首部也可以是所述第二报文中的首部,即所述第三首部的起始位置与所述第二报文的起始位置相同。
S407,所述转发装置通过一个第二查找请求,在所述第一流表中查找是否存在与第二查找关键字匹配的表项。
所述第二查找请求携带所述第二查找关键字。所述第二查找关键字包括所述第四字段、所述第五字段以及所述第六字段。
S408,所述转发装置确定所述第一流表中存在与所述第二查找关键字匹配的第二表项后,所述转发装置根据所述第二表项对所述第二报文进行处理。
所述第二表项的匹配域包括第二比特串以及第二掩码,所述第二比特串包括第四子比特串、第五子比特串以及第六子比特串,所述第二掩码包括第四子掩码、第五子掩码以及第六子掩码。
所述第二查找请求的数量为1。也就是说,只有一个所述第二查找请求。
所述第一子掩码和所述第二子掩码可以根据方式1实现或者根据方式2实现。
方式1,所述第四子比特串与所述第四子掩码进行位与运算的结果等于所述第四字段与所述第四子掩码进行位与运算的结果,所述第五子比特串与所述第五子掩码进行位与运算的结果等于所述第五字段与所述第五子掩码进行位与运算的结果,所述第六子比特串与所述第六子掩码进行位与运算的结果等于所述第六字段与所述第六子掩码进行位与运算的结果,所述第四子掩码和所述第六子掩码的每一比特为1,所述第五子掩码的每一比特为0。
方式2,所述第四子比特串与所述第四子掩码进行位或运算的结果等于所述第四字段与所述第四子掩码进行位或运算的结果,所述第五子比特串与所述第五子掩码进行位或运算的结果等于所述第五字段与所述第五子掩码进行位或运算的结果,所述第六子比特串与所述第六子掩码进行位或运算的结果等于所述第六字段与所述第六子掩码进行位或运算的结果,所述第四子掩码和所述第六子掩码的每一比特为0,所述第五子掩码的每一比特为1。
举例来说,所述第四字段、所述第四子比特串和所述第四子掩码长度相等。所述第五字段、所述第五子比特串和所述第五子掩码长度相等。所述第六字段、所述第六子比特串和所述第六子掩码长度相等。
如图5中所示,所述第三字段不是所述第二首部的特殊字段。如果根据所述第三字段对所述第一报文进行解析,则可能发生错误。S404具体实现时的方式1中,所述第三子掩码的每一比特为0。S404具体实现时的方式2中,所述第三子掩码的每一比特为1。无论所述第三字段的取值为何,在S404具体实现时的方式1中,所述第三子比特串与所述第三子掩码进行位与运算的结果,均会等于所述第三字段与所述第三子掩码进行位于运算的结果;在S404具体实现时的方式2中,所述第三子比特串与所述第三子掩码进行位或运算的结果,均会等于所述第三字段与所述第三子掩码进行位或运算的结果。因此,无论所述第三字段的取值为何,都不会对所述第一表项是否是与所述第一查找关键字匹配的表项的结果产生影响。
同样的道理,所述第五字段不是所述第四首部的特殊字段。如果根据所述第五字段对所述第二报文进行解析,则可能发生错误。S408具体实现时的方式1中,所述第五子掩码的每一比特为0。S408具体实现时的方式2中,所述第五子掩码的每一比特为1。无论所述第五字段的取值为何,在S408具体实现时的方式1中,所述第五子比特串与所述第五子掩码进行位与运算的结果,均会等于所述第五字段与所述第五子掩码位与运算的结果。在S408具体实现时的方式2中,所述第五子比特串与所述第五子掩码进行位或运算的结果,均会等于所述第五字段与所述第五子掩码进行位或运算的结果。因此,无论所述第五字段的取值为何,都不会对所述第二表项是否是与所述第二查找关键字匹配的表项的结果产生影响。
根据S404和S408,所述转发装置对匹配了所述第一表项的所述第一报文和匹配了所述第二表项的所述第二报文进行不同的处理。举例来说,所述处理是与S304对所述第一报文进行的处理的具体实施细节类似。因此,关于S404和S408的对所述第一报文或所述第二报文进行不同处理的具体实现方式,在此不再赘述。
图6是本发明实施例提供的一种流表生成方法的流程图。参见图6,所述方法包括S601和S602。另外,所述方法还可以包括S603和S604。
S601,处理器获取第一流表和第二流表。
所述第一流表包括第一表项,所述第一表项包括匹配域和跳转指令。所述第一表项的跳转指令指向所述第二流表,指向所述第二流表的跳转指令的数量等于1。所述第二流表包括第二表项,所述第二表项包括匹配域。
可选地,所述处理器还获取第四流表。所述第四流表包括第四表项,所述第四表项包括匹配域。所述第一流表还包括第五表项,所述第五表项包括匹配域和跳转指令。所述第五表项的跳转指令指向所述第四流表,指向所述第四流表的跳转指令的数量等于1。
可选地,指向所述第一流表的跳转指令的数量大于1,或者没有跳转指令指向所述第一流表。
举例来说,所述第一流表、所述第二流表以及所述第四流表等多个流表的格式是由工程师利用controller通过编程语言定义的。例如,所述编程语言可以是协议无关的网络转发高级编程语言(high-levellanguageforprogrammingprotocol-independentpacketprocessors,P4language)。
一种实现方式是,所述处理器是图1的controller中的处理器。由controller中的处理器获取S601中所述第一流表、所述第二流表以及所述第四流表等多个流表,并生成S602中的第三流表。所述controller与所述转发装置通过通信链路连接。所述controller能够通过所述通信链路对所述转发装置进行控制。所述通信链路可以是控制通道。关于控制通道,可以参考开放网络联盟(OpenNetworkingFoundation)发布的OpenFlowSwitchSpecification1.3.3。
另一种实现方式是,所述处理器是图1的转发装置中的处理器。图1中的controller将所述第一流表、所述第二流表以及所述第四流表等多个流表,发送到所述转发装置中。转发装置的处理器根据获取的所述多个流表,生成S602中的第三流表。
如图2a所示的方法中,所述第一流表、所述第二流表以及所述第四流表可以被存储于转发装置中,从而实现对转发装置接收的报文的解析。具体而言,每个流表与一个首部的协议对应。例如,第一流表对应IPv4,用于对报文中IPv4header进行解析;第二流表对应TCP,用于对报文中TCPheader进行解析;第四流表对应UDP,用于对报文中UDPheader进行解析。每一个流表包括匹配域和指令域。现有技术的转发装置可以将匹配域与从报文中的某个流表对应的协议的首部中提取的特殊字段进行匹配,并根据匹配表项中的指令域对报文进行处理。具体匹配的过程可参考实施例中对图2a中S202的具体实现方式。
需要说明的是,跳转指令指向某个流表具体实现时可以是,根据所述跳转指令可以访问所述流表。例如,所述跳转指令包括指令块的存储地址或指令块的编号。所述指令块的存储地址或所述指令块的编号对应的所述指令块中包括所述某个流表的标识。所述转发装置执行所述跳转指令,包括执行:所述转发装置根据从所述指令块中获取的所述某个流表的标识,获取所述某个流表。进一步地,所述转发装置从所述指令块中获取位置参数。根据所述位置参数从报文中获取查找关键字。通过查找请求在流表中查找与所述查找关键字匹配的表项。
需要说明的是,所述处理器除了获取所述第一流表、所述第二流表以及所述第四流表之外,还可能获取更多流表。指向所述第二流表的跳转指令的数量等于1,是指处理器获取的多个流表中,所述第一流表的第一表项中的跳转指令,是唯一一个指向所述第二流表的跳转指令。可选地,指向所述第四流表的跳转指令的数量等于1,是指处理器获取的多个流表中,所述第一流表的所述第五表项中的跳转指令,是唯一一个指向所述第四流表的跳转指令。
举例来说,上述每一个流表的匹配域和指令域的格式,可以是由工程师使用编程语言根据所述转发装置需要接收的报文的首部的格式定义的。所述编程语言可以是P4language。
下面结合图7,对转发装置需要接收到的报文中首部的可能的格式,与所述处理器获取的流表之间的关系进行举例说明。
如图7所示,在所述转发装置需要接收的报文中,所述第一协议的首部的下一个首部,可能是所述第二协议的首部。所述第二协议的首部的上一个首部只可能是所述第一协议的首部。当所述转发装置需要接收的报文中所述第一协议的首部中的特殊字段的取值为第一值时,表示所述第一协议的首部的下一个首部是所述第二协议的首部。S601中,处理器获取的所述第一流表的所述第一表项,所述第一表项的匹配域为所述第一值。同理,所述第二流表包括至少一个表项。所述至少一个表项可以是第二表项。所述第二表项匹配域的取值与所述第二协议的首部中的特殊字段一种可能的取值相同。
可选地,所述第一协议的首部的下一个首部,还可能是第三协议的首部,且所述第三协议的首部的上一个首部只可能是所述第一协议的首部。当报文中所述第一协议的首部中的特殊字段的取值为第二值时,表示所述第一协议的首部的下一个首部是所述第三协议的首部。S601中,所述处理器获取的所述第一流表的所述第五表项。所述第五表项的匹配域为所述第二值。S601中,所述处理器获取的所述第四流表。所述第四流表包括至少一个表项。所述至少一个表项可以是所述第四表项。所述第四表项匹配域的取值与所述第三协议的首部中的特殊字段一种可能的取值相同。
举例来说,所述第一协议是IPv4,所述第二协议是TCP,所述第三协议是UDP。也就是说,所述转发装置可能接收的报文中IPv4header的下一个首部,可能是TCPheader,也可能是UDPheader。所述TCPheader的上一个首部,只可能是IPv4header。所述UDPheader的上一个首部,只可能是IPv4header。所述第一协议的首部中的特殊字段是Protocol字段,第一值为0x06,第二值为0x11。也就是说,当所述Protocol字段的取值为0x06(十六进制)时,所述转发装置接收的报文中IPv4header的下一个首部的协议是TCP。当所述Protocol字段的取值为0x11(十六进制)时,所述转发装置接收的报文中IPv4header的下一个首部的协议是UDP。
需要说明的是,所述第二协议以及所述第三协议的首部的上一个首部只可能是所述第一协议的首部是由所述转发装置需要接收的报文的格式决定的。进而,工程师根据所述第二协议以及所述第三协议的首部的上一个首部只可能是所述第一协议的首部这种情况,通过编程语言对流表的格式进行定义。所述第二协议以及所述第三协议的首部的上一个首部只可能是所述第一协议的首部,不意味着在现有的通信协议的范围中所述第二协议或者第三协议只可能是所述第一协议的首部,也不意味着转发装置实际接收的报文中所述第二协议或者所述第三协议的首部的上一个首部只可能是所述第一协议的首部。例如,当转发装置实际接收的报文中,所述第二协议或者所述第三协议的首部的上一个首部不是第一协议的首部时,所述转发装置无法识别所述报文,则将所述报文上送到图1的controller中,或者丢弃所述报文。
可选地,指向所述第一流表的跳转指令的数量大于1,是指在所述处理器获取的多个流表中,有两个或两个以上的表项中的跳转指令,指向所述第一流表。例如,所述第一协议的首部的上一个首部如图7所示,可能是第M协议的首部,也可能是第N协议的首部。在controller生成的流表中,还包括所述第M协议的首部对应的第M流表,和所述第N协议的首部对应的第N流表。所述第M流表和所述第N流表,都是所述第一流表的上一级流表。即所述第一流表的标识,即可能由所述转发装置通过执行所述第M流表中匹配表项的跳转指令得到,也可能由所述转发装置通过执行所述第N流表中匹配表项的跳转指令得到。所述处理器在获取所述第一流表,所述第二流表时,还获取所述第M流表和所述第N流表。因此,在所述处理器获取的多个流表中,指向所述第一流表的跳转指令的数量大于1。
假设所述第一协议是IPv4,所述第M协议是Ethernet协议,所述第N协议是VLAN协议。即所述转发装置接收的报文中,IPv4header的上一个首部,即可以是Ethernetframeheader,也可以是VLANtag。
可选地,没有跳转指令指向所述第一流表,是指在所述处理器获取的多个流表中,所有流表的表项中的跳转指令都没有指向所述第一流表。所述转发装置可以通过如下方式访问所述第一流表。例如所述第一流表对应的协议是所述报文的首部的协议,当所述转发装置接收到所述报文时,通过引导程序以及用于接收所述报文的端口,获取所述第一流表的标识。所述转发装置根据所述第一流表的标识访问所述第一流表。
S602,所述处理器生成一个第三流表,所述第三流表包括第三表项。
所述第三表项包括匹配域,所述第三表项的匹配域包括第一子匹配域和第二子匹配域。所述第一子匹配域包括第一子比特串和第一子掩码。所述第二子匹配域包括第二子比特串和第二子掩码。所述第一子比特串和所述第一表项的匹配域相等。所述第二子比特串和所述第二表项的匹配域相等。
其中,所述第一子掩码,所述第二子掩码,所述第一子匹配域的掩码匹配算法以及所述第二子匹配域的掩码匹配算法可以根据方式1实现或根据方式2实现。
方式1,所述第一子掩码和所述第二子掩码的每一比特为1,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位与运算。
方式2,所述第一子掩码和所述第二子掩码的每一比特为0,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位或运算。
举例来说,所述第一子比特串和所述第一子掩码长度相等。所述第二子比特串和所述第二子掩码长度相等。
可选地,当S601中包括所述处理器获取所述第四流表,所述第一流表还包括所述第五表项时,所述第三表项的匹配域还包括第三子匹配域,所述第三子匹配域包括第三子比特串和第三子掩码。
其中,所述第三子掩码以及所述第三子匹配域的掩码匹配算法可以根据方式3实现或根据方式4实现。
方式3,所述第三子掩码的每一比特为0,所述第三子匹配域的掩码匹配算法为位与运算。
方式4,所述第三子掩码的每一比特为1,所述第三子匹配域的掩码匹配算法为位或运算。
举例来说,所述第三子比特串和所述第三子掩码长度相等。
所述第三流表还包括第六表项。所述第六表项包括匹配域。所述第六表项的匹配域包括第四子匹配域,第五子匹配域和第六子匹配域。所述第四子匹配域包括第四子比特串和第四子掩码。所述第五子匹配域包括第五子比特串和第五子掩码。所述第六子匹配域包括第六子比特串和第六子掩码。所述第四子比特串与所述第五表项的匹配域相等。所述第六子比特串与所述第四表项的匹配域相等。
其中,所述第四子掩码,所述第五子掩码,所述第六子掩码,所述第四子匹配域的掩码匹配算法,所述第五子匹配域的掩码匹配算法以及所述第六子匹配域的掩码匹配算法,可以根据方式5实现或根据方式6实现。
方式5,所述第四子掩码的每一比特为1,所述第五子掩码的每一比特为0,所述第六子掩码的每一比特为1,所述第四子匹配域,所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位与运算。
方式6,所述第四子掩码的每一比特为0,所述第五子掩码的每一比特为1,所述第六子掩码的每一比特为0,所述第四子匹配域,所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位或运算。
举例来说,所述第四子比特串和所述第四子掩码长度相等。所述第五子比特串和所述第五子掩码长度相等。所述第六子比特串和所述第六子掩码长度相等。
通过上述方法生成的所述第三流表,可以用于图3所示的实施例和图4所示的实施例。具体来说,所述第三流表可以作为图3所示的实施例和图4所示的实施例中的第一流表。图3所示的实施例和图4所示的实施例中的转发装置可以根据所述第三流表对图3所示的实施例和图4所示的实施例中的第一报文进行处理。
举例来说,S602中生成的所述第三流表的第三表项,可以作为图3所示的实施例中对第一报文进行处理时,与所述第一查找关键字匹配的第一流表的第一表项。其中,S602生成的所述第三表项的所述第一子匹配域的所述第一子比特串和所述第一子掩码,可以作为图3所示的实施例中第一表项的第一子比特串和第一子掩码;S602生成的所述第三表项的所述第二子匹配域的所述第二子比特串和所述第二子掩码,可以作为图3所示的实施例中第一表项的第二子比特串和第二子掩码。
可选地,当S601中还包括处理器获取所述第四流表,S602中生成的所述第三流表的所述第一表项,可以作为图4所示的实施例中对所述第一报文进行处理时,与所述第一查找关键字匹配的第一流表的第一表项;S602中生成的所述第三流表的所述第二表项,可以作为图4所示的实施例中对第二报文进行处理时,与所述第二查找关键字匹配的所述第一流表的第二表项。S602生成的所述第三表项的所述第一子匹配域的所述第一子比特串和所述第一子掩码,可以作为图4所示的实施例中所述第一表项的所述第一子比特串和所述第一子掩码。S602生成的所述第三表项的所述第二子匹配域的所述第二子比特串和所述第二子掩码,可以作为图4所示的实施例中所述第一表项的所述第二子比特串和所述第二子掩码。S602生成的所述第三表项的所述第三子匹配域的所述第三子比特串和所述第三子掩码,可以作为图4所示的实施例中所述第一表项的所述第三子比特串和所述第三子掩码。S602生成的所述第六表项的所述第四子匹配域的所述第四子比特串和所述第四子掩码,可以作为图4所示的实施例中所述第二表项的所述第四子比特串和所述第四子掩码。S602生成的所述第六表项的所述第五子匹配域的所述第五子比特串和所述第五子掩码,可以作为图4所示的实施例中所述第六表项的第五子比特串和所述第五子掩码。S602生成的所述第六表项的所述第六子匹配域的所述第六子比特串和所述第六子掩码,可以作为图4所示的实施例中所述第二表项的第六子比特串和所述第六子掩码。
可选地,图6所示的实施例中还可以包括S603。S603,所述处理器获取第一位置参数和第二位置参数。所述第一位置参数用于标识第一字段在转发装置接收的第一报文中的位置,所述第一字段是所述第一报文中第一协议的首部中的字段,所述第一字段用于与所述第一表项的匹配域进行匹配。所述第二位置参数用于标识第二字段在所述第一报文中的位置,所述第二字段是所述第一报文中第二协议的首部中的字段,所述第二字段用于与所述第二表项的匹配域进行匹配,所述第一报文中所述第二协议的首部是所述第一报文中所述第一协议的首部的下一个首部。可选地,所述方法还可以包括S604。S604,所述处理器根据所述第一位置参数以及所述第二位置参数,生成第三位置参数和第四位置参数,所述第三位置参数用于标识第三字段在转发装置接收的第二报文中的位置,所述第三字段是所述第二报文中所述第一协议的首部中的字段,所述第三字段用于与所述第三表项的第一子匹配域进行匹配,所述第四位置参数用于标识第四字段在所述第二报文中的位置,所述第四字段是所述第二报文中所述第二协议的首部中的字段,所述第四字段用于与所述第三表项的第二子匹配域进行匹配,所述第二报文中所述第二协议的首部是所述第二报文中所述第一协议的首部的下一个首部;所述第三字段的起始位置距所述第二报文中所述第一协议的首部的起始位置的偏移等于所述第一字段的起始位置距所述第一报文中所述第一协议的首部的起始位置的偏移,所述第四字段的起始位置距所述第二报文中所述第二协议的首部的起始位置的偏移等于所述第二字段的起始位置距所述第一报文中所述第二协议的首部的起始位置的偏移。
下文以所述处理器是图1的controller中的处理器,所述转发装置为开放流交换机,并且所述controller通过控制通道与所述转发装置进行通信的场景为例进行说明。
所述controller通过S601生成所述第一流表和所述第二流表。所述controller通过所述控制通道向所述转发装置发送所述第一流表和所述第二流表。所述转发装置将所述第一流表和所述第二流表保存在所述转发装置的转发平面。例如,将所述第一流表和所述第二流表保存在所述转发装置的线卡中。所述转发装置接收所述第一报文后,根据图2a实施例所示的方法对所述第一报文进行处理。例如,先根据第一位置参数获取所述第一字段,当所述第一字段与所述第一表项的匹配域匹配时,根据所述第一表项对所述第一报文进行处理并且根据所述第二位置参数获取所述第二字段。当所述第二字段与所述第二表项的匹配域匹配时,还根据所述第二表项对所述第一报文进行处理。
所述controller通过S602生成所述第三流表。所述controller通过所述控制通道向所述转发装置发送所述第三流表。所述转发装置将所述第三流表保存在所述转发装置的转发平面。例如,将所述第三流表保存在所述转发装置的线卡中。所述第三流表对所述第一流表和所述第二流表进行更新。具体来说,所述第三流表用于替换所述第一流表和所述第二流表。所述转发装置接收所述第二报文后,根据图3实施例所示的方法对所述第二报文进行处理。例如,根据第三位置参数和第四位置参数获取所述第三字段和所述第四字段,当所述第三字段与所述第三表项的所述第一子匹配域匹配且所述第四字段与所述第二子匹配域匹配时,根据所述第三表项对所述第二报文进行处理。
需要说明的是,接收所述第一报文的转发装置和接收所述第二报文的转发装置可以是相同的转发装置,也可以是不同的转发装置。图3所示的报文处理方法是对于图2a所示的报文处理方法的一种改进。如果接收所述第一报文的转发装置和接收所述第二报文的转发装置是相同的转发装置,所述转发装置接收所述第一报文的时间早于所述转发装置接收所述第二报文的时间。即所述第一报文是所述转发装置采用图2a所示的报文处理方法时接收的报文。所述第二报文是所述转发装置图3所示的报文处理方法时接收的报文。
可选地,所述第一位置参数和所述第二位置参数中的每一个位置参数分别包括偏移和长度。所述第三位置参数和所述第四位置参数中的每一个位置参数分别包括基本偏移、具体偏移和长度。所述第三位置参数中的基本偏移为零,所述第三位置参数中的具体偏移与所述第一位置参数中的偏移相等,所述第三位置参数中的长度与所述第一位置参数中的长度相等,所述第四位置参数的基本偏移等于所述第二报文中所述第一协议的首部的长度,所述第四位置参数中的具体偏移与所述第二位置参数中的偏移相等,所述第四位置参数中的长度与所述第二位置参数中的长度相等。
举例来说,所述第三位置参数可以是图3所示的实施例以及图4所示的实施例中的第一位置参数。所述第四位置参数可以是图3所示的实施例以及图4所示的实施例中的第二位置参数。
图8是本发明实施例提供的一种报文处理装置的结构示意图。
参见图8,报文处理装置700包括接收单元701,获取单元702,查找单元703和处理单元704。报文处理装置700可以通过图2所示的转发装置实现。报文处理装置700可以用于执行图3所示的方法。报文处理装置700可以用于实现图3中的转发装置。
接收单元701,用于接收第一报文。所述第一报文包括第一首部和第二首部,所述第二首部是所述第一首部的下一个首部,所述第一首部的协议是第一协议,所述第二首部的协议是第二协议.
具体实现时,接收单元701可以通过图2中的接口电路201实现。图2中的转发装置通过接口电路201接收所述第一报文后,图2中的转发装置可以将所述第一报文存储在寄存器205中。
举例来说,接收单元701可以用于执行S301。
获取单元702,用于根据第一位置参数从所述接收单元701接收的所述第一报文中的所述第一首部获取第一字段,根据第二位置参数从所述接收单元701接收的所述第一报文中的所述第二首部获取第二字段。所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部以及当所述第一报文包含所述第一首部的下一个首部时所述第一首部的下一个首部的协议,第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部以及所述第一报文包含所述第二首部的下一个首部时所述第二首部的下一个首部的协议。
具体实现时,获取单元702可以通过图2中处理器202实现。处理器202可以从存储在寄存器205中的获取所述第一字段以及所述第二字段。
举例来说,获取单元702可以用于执行S302。
查找单元703,用于通过一个第一查找请求,在第一流表中查找是否存在与第一查找关键字匹配的表项,所述第一查找请求中携带所述第一查找关键字,所述第一查找关键字包括所述获取单元702获取的所述第一字段和所述第二字段。
具体实现时,查找单元703可以通过图2中处理器202实现。所述第一流表可以存储在TCAM203中。处理器202可以在TCAM203中存储的所述第一流表中查找是否存在与所述第一查找关键字匹配的表项。
举例来说,查找单元703可以用于执行S303。
处理单元704,用于根据所述查找单元703在所述第一流表中查找到的与所述第一查找关键字匹配的第一表项,对所述接收单元701接收的所述第一报文进行处理。所述第一表项的匹配域包括第一比特串以及第一掩码,所述第一比特串包括第一子比特串和第二子比特串,所述第一掩码包括第一子掩码和第二子掩码。其中,所述第一子比特串与所述第一子掩码进行位与运算的结果等于所述第一字段与所述第一子掩码进行位与运算的结果,所述第二子比特串与所述第二子掩码进行位与运算的结果等于所述第二字段与所述第二子掩码进行位与运算的结果,所述第一子掩码和所述第二子掩码的每一比特为1。或者所述第一子比特串与所述第一子掩码进行位或运算的结果等于所述第一字段与所述第一子掩码进行位或运算的结果,所述第二子比特串与所述第二子掩码进行位或运算的结果等于所述第二字段与所述第二子掩码进行位或运算的结果,所述第一子掩码和所述第二子掩码的每一比特为0。
具体实现时,处理单元704可以通过图2中处理器202实现。
举例来说,处理单元704可以用于执行S304。
上述各个单元可以通过纯硬件实现,也可以通过硬件与软件的结合实现。例如,CPU通过执行存储器中存储的计算机程序,从而实现上述各个单元。
可选地,获取单元702还用于,根据第三位置参数从所述接收单元701接收的所述第一报文中获取第三字段。所述第一查找关键字还包括所述第三字段,所述第一比特串还包括第三子比特串,所述第一掩码还包括第三子掩码。其中,所述第三子比特串与所述第三子掩码进行位与运算的结果等于所述第三字段与所述第三子掩码进行位于运算的结果,所述第三子掩码的每一比特为0;或者所述第三子比特串与所述第三子掩码进行位或运算的结果等于所述第三字段与所述第三子掩码进行位或运算的结果,所述第三子掩码的每一比特为1。
可选地,接收单元701还用于接收第二报文。所述第二报文包括第三首部和第四首部,所所述第四首部是所述第三首部的下一个首部,所述第三首部的协议是所述第一协议,所述第四首部的协议是第三协议。获取单元702还用于根据所述第一位置参数从所述接收单元701接收的所述第二报文的第三首部获取第四字段。根据所述第二位置参数从所述接收单元701接收的所述第二报文中获取第五字段,根据所述第三位置参数从所述接收单元701接收的所述第二报文的第四首部获取第六字段。所述第四字段用于标识所述第二报文是否包含所述第三首部的下一个首部以及当所述第二报文包含所述第三首部的下一个首部时所述第三首部的下一个首部的协议,所述第六字段用于标识所述第二报文是否包含所述第四首部的下一个首部以及当所述第二报文包含所述第四首部的下一个首部时所述第四首部的下一个首部的协议。
查找单元703还用于通过一个第二查找请求,在所述第一流表中查找是否存在与第二查找关键字匹配的表项,所述第二查找请求中携带所述第二查找关键字,所述第二查找关键字包括所述获取单元702获取的所述第四字段、所述第五字段以及所述第六字段。
处理单元704还用于根据所述查找单元703在所述第一流表中查找到的与所述第二查找关键字匹配的第二表项,对所述接收单元701接收的第二报文进行处理。所述第二表项的匹配域包括第二比特串以及第二掩码,所述第二比特串包括第四子比特串、第五子比特串以及第六子比特串。所述第二掩码包括第四子掩码、第五子掩码以及第六子掩码。
其中,所述第四子比特串与所述第四子掩码进行位与运算的结果等于所述第四字段与所述第四子掩码进行位与运算的结果,所述第五子比特串与所述第五子掩码进行位与运算的结果等于所述第五字段与所述第五子掩码进行位与运算的结果,所述第六子比特串与所述第六子掩码进行位与运算的结果等于所述第六字段与所述第六子掩码进行位与运算的结果,所述第四子掩码和所述第六子掩码的每一比特为1,所述第五子掩码的每一比特为0。
或者,所述第四子比特串与所述第四子掩码进行位或运算的结果等于所述第四字段与所述第四子掩码进行位或运算的结果,所述第五子比特串与所述第五子掩码进行位或运算的结果等于所述第五字段与所述第五子掩码进行位或运算的结果,所述第六子比特串与所述第六子掩码进行进行位或运算的结果等于所述第六字段与所述第六子掩码位或运算的结果,所述第四子掩码和所述第六子掩码的每一比特为0,所述第五子掩码的每一比特为1。
可选地,所述第一位置参数包括第一偏移和第一长度,所述第一偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移,所述第一长度为所述第一字段的长度。
可选地,所述第二位置参数包括第二偏移和第二长度,所述第二偏移为所述第二字段的起始位置距所述第一首部的起始位置的偏移,所述第二长度为所述第二字段的长度。
进一步地,所述第一位置参数包括第一基本偏移、第一具体偏移和第一长度,所述第一基本偏移为零,所述第一具体偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移,所述第一长度为所述第一字段的长度;
进一步地,所述第二位置参数包括第二基本偏移、第二具体偏移和第二长度,所述第二长度为所述第二字段的长度,所述第二基本偏移为所述第一首部起始位置距所述第二首部的起始位置的偏移,所述第二具体偏移为所述第二字段起始位置距所述第二首部的起始位置的偏移。
本实施例中提供的报文处理装置,可以集成在图2所示转发装置200中,应用于图1所示的场景中,实现其中转发装置的功能。报文处理装置可以实现的其他附加功能,请参照图3至图5的方法实施例中对转发装置的描述,在这里不再赘述。
图9是本发明实施例提供的一种流表生成装置的结构示意图。
参见图9,流表生成装置800包括第一获取单元801和第一处理单元802。流表生成装置800可以用于执行图6所示的方法。流表生成装置800可以用于实现图6中的处理器。
第一获取单元801用于获取第一流表和第二流表。所述第一流表包括第一表项,所述第一表项包括匹配域和跳转指令。所述第一表项的跳转指令指向所述第二流表,指向所述第二流表的跳转指令的数量等于1。所述第二流表包括第二表项,所述第二表项包括匹配域。
举例来说,第一获取单元801可以用于执行S601。
第一生成单元802用于根据第一获取单元801获取的所述第一流表和所述第二流表,生成第三流表。所述第三流表包括第三表项。
所述第三表项包括匹配域,所述第三表项的匹配域包括第一子匹配域和第二子匹配域。所述第一子匹配域包括第一子比特串和第一子掩码,所述第二子匹配域包括第二子比特串和第二子掩码。所述第一子比特串和所述第一表项的匹配域相等,所述第二子比特串和所述第二表项的匹配域相等。其中所述第一子掩码和所述第二子掩码的每一比特为1,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位与运算;或者所述第一子掩码和所述第二子掩码的每一比特为0,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位或运算。
举例来说,第一生成单元802可以用于执行S602。
上述各个单元可以通过纯硬件实现,也可以通过硬件与软件的结合实现。例如,CPU通过执行存储器中存储的计算机程序,从而实现上述各个单元。
可选地,所述第一获取单元801还用于获取第四流表。所述第四流表包括第四表项,所述第四表项包括匹配域。所述第一流表还包括第五表项,所述第五表项包括匹配域和跳转指令,所述第五表项的跳转指令指向所述第四流表,指向所述第四流表的跳转指令的数量等于1。
所述第三表项的匹配域还包括第三子匹配域,所述第三子匹配域包括第三子比特串和第三子掩码,其中,所述第三子掩码的每一比特为0,所述第三子匹配域的掩码匹配算法为位与运算;或者所述第三子掩码的每一比特为1,所述第三子匹配域的掩码匹配算法为位与运算。
所述第三流表还包括第六表项,所述第六表项包括匹配域。所述第六表项的匹配域包括第四子匹配域,第五子匹配域和第六子匹配域,所述第四子匹配域包括第四子比特串和第四子掩码,所述第五子匹配域包括第五子比特串和第五子掩码,所述第六子匹配域包括第六子比特串和第六子掩码,所述第四子比特串与所述第五表项的匹配域相等,所述第六子比特串与所述第四表项的匹配域相等。其中,所述第四子掩码的每一比特为1,所述第五子掩码的每一比特为0,所述第六子掩码的每一比特为1,所述第四子匹配域,所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位与运算;或者所述第四子掩码的每一比特为0,所述第五子掩码的每一比特为1,所述第六子掩码的每一比特为0,所述第四子匹配域,所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位或运算。
可选地,流表生成装置800还包括,第二获取单元803和第二生成单元804。
第二获取单元803用于获取第一位置参数和第二位置参数。所述第一位置参数用于标识第一字段在转发装置接收的第一报文中的位置,所述第一字段是所述第一报文中第一协议的首部中的字段,所述第一字段用于与所述第一表项的匹配域进行匹配。所述第二位置参数用于标识第二字段在所述第一报文中的位置,所述第二字段是所述第一报文中第二协议的首部中的字段,所述第二字段用于与所述第二表项的匹配域进行匹配,所述第一报文中所述第二协议的首部是所述第一报文中所述第一协议的首部的下一个首部。
举例来说,第二获取单元803可以用于执行S603。
第二生成单元804用于根据第二获取单元803获取的所述第一位置参数和所述第二位置参数,生成第三位置参数和第四位置参数。
所述第三位置参数用于标识第三字段在转发装置接收的第二报文中的位置,所述第三字段是所述第二报文中所述第一协议的首部中的字段,所述第三字段用于与所述第三表项的第一子匹配域进行匹配,所述第四位置参数用于标识第四字段在所述第二报文中的位置,所述第四字段是所述第二报文中所述第二协议的首部中的字段,所述第四字段用于与所述第三表项的第二子匹配域进行匹配,所述第二报文中所述第二协议的首部是所述第二报文中所述第一协议的首部的下一个首部。所述第三字段的起始位置距所述第二报文中所述第一协议的首部的起始位置的偏移等于所述第一字段的起始位置距所述第一报文中所述第一协议的首部的起始位置的偏移,所述第四字段的起始位置距所述第二报文中所述第二协议的首部的起始位置的偏移等于所述第二字段的起始位置距所述第一报文中所述第二协议的首部的起始位置的偏移。
举例来说,第二生成单元804可以用于执行S604。可选地,所述第一位置参数和所述第二位置参数中的每一个位置参数分别包括偏移和长度,所述第三位置参数和所述第四位置参数中的每一个位置参数分别包括基本偏移、具体偏移和长度。所述第三位置参数中的基本偏移为零,所述第三位置参数中的具体偏移与所述第一位置参数中的偏移相等,所述第三位置参数中的长度与所述第一位置参数中的长度相等,所述第四位置参数的基本偏移等于所述第二报文中所述第一协议的首部的长度,所述第四位置参数中的具体偏移与所述第二位置参数中的偏移相等,所述第四位置参数中的长度与所述第二位置参数中的长度相等。
可选地,指向所述第一流表的跳转指令的数量大于1,或者没有跳转指令指向所述第一流表。
本实施例中提供的流表生成装置,可以集成在图2所示的转发装置200中,应用于附图1所示的场景中。流表生成装置可以实现的其他附加功能,请参照图6所示的实施例中对处理器的描述,在这里不再赘述。
上述实施例提供的报文处理装置和流表生成装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
用于执行本发明上述报文处理装置和流表生成装置功能的处理器可以是CPU,通用处理器、DSP、ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件,硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。
结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(randomaccessmemory,RAM)、闪存、只读存储器(readonlymemory,ROM)、可擦除可编程只读存储器(erasableprogrammablereadonlymemory,EPROM)、电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,EEPROM)、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于用户设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围。

Claims (20)

1.一种报文处理方法,其特征在于,包括:
转发装置接收第一报文,所述第一报文包括第一首部和第二首部,所述第二首部是所述第一首部的下一个首部,所述第一首部的协议是第一协议,所述第二首部的协议是第二协议;
所述转发装置根据第一位置参数从所述第一首部获取第一字段,根据第二位置参数从所述第二首部获取第二字段,所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部以及当所述第一报文包含所述第一首部的下一个首部时所述第一首部的下一个首部的协议,所述第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部以及当所述第一报文包含所述第二首部的下一个首部时所述第二首部的下一个首部的协议;
所述转发装置通过一个第一查找请求,在第一流表中查找是否存在与第一查找关键字匹配的表项,所述第一查找请求携带所述第一查找关键字,所述第一查找关键字包括所述第一字段和所述第二字段;以及
所述转发装置确定所述第一流表中存在与所述第一查找关键字匹配的第一表项后,根据所述第一表项对所述第一报文进行处理,所述第一表项的匹配域包括第一比特串以及第一掩码,所述第一比特串包括第一子比特串和第二子比特串,所述第一掩码包括第一子掩码和第二子掩码;其中
所述第一子比特串与所述第一子掩码进行位与运算的结果等于所述第一字段与所述第一子掩码进行位与运算的结果,所述第二子比特串与所述第二子掩码进行位与运算的结果等于所述第二字段与所述第二子掩码进行位与运算的结果,所述第一子掩码和所述第二子掩码的每一比特为1;或者
所述第一子比特串与所述第一子掩码进行位或运算的结果等于所述第一字段与所述第一子掩码进行位或运算的结果,所述第二子比特串与所述第二子掩码进行位或运算的结果等于所述第二字段与所述第二子掩码进行位或运算的结果,所述第一子掩码和所述第二子掩码的每一比特为0。
2.根据权利要求1所述的方法,其特征在于,所述转发装置接收所述第一报文之后,以及所述转发装置通过所述第一查找请求在所述第一流表中查找是否存在与所述第一查找关键字匹配的表项之前,所述方法还包括:
所述转发装置根据第三位置参数从所述第一报文中获取第三字段,所述第一查找关键字还包括所述第三字段,所述第一比特串还包括第三子比特串,所述第一掩码还包括第三子掩码;其中
所述第三子比特串与所述第三子掩码进行位与运算的结果等于所述第三字段与所述第三子掩码进行位与运算的结果,所述第三子掩码的每一比特为0;或者
所述第三子比特串与所述第三子掩码进行位或运算的结果等于所述第三字段与所述第三子掩码进行位或运算的结果,所述第三子掩码的每一比特为1。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
所述转发装置接收第二报文,所述第二报文包括第三首部和第四首部,所述第四首部是所述第三首部的下一个首部,所述第三首部的协议是所述第一协议,所述第四首部的协议是第三协议;
所述转发装置根据所述第一位置参数从所述第三首部获取第四字段,根据所述第二位置参数从所述第二报文中获取第五字段,根据所述第三位置参数从所述第四首部获取第六字段,所述第四字段用于标识所述第二报文是否包含所述第三首部的下一个首部以及当所述第二报文包含所述第三首部的下一个首部时所述第三首部的下一个首部的协议,所述第六字段用于标识所述第二报文是否包含所述第四首部的下一个首部以及当所述第二报文包含所述第四首部的下一个首部时所述第四首部的下一个首部的协议;
所述转发装置通过一个第二查找请求,在所述第一流表中查找是否存在与第二查找关键字匹配的表项,所述第二查找请求中携带所述第二查找关键字,所述第二查找关键字包括所述第四字段、所述第五字段以及所述第六字段;以及
所述转发装置确定所述第一流表中存在与所述第二查找关键字匹配的第二表项后,根据所述第二表项对所述第二报文进行处理,所述第二表项的匹配域包括第二比特串以及第二掩码,所述第二比特串包括第四子比特串、第五子比特串以及第六子比特串,所述第二掩码包括第四子掩码、第五子掩码以及第六子掩码;其中
所述第四子比特串与所述第四子掩码进行位与运算的结果等于所述第四字段与所述第四子掩码进行位与运算的结果,所述第五子比特串与所述第五子掩码进行位与运算的结果等于所述第五字段与所述第五子掩码进行位与运算的结果,所述第六子比特串与所述第六子掩码进行位与运算的结果等于所述第六字段与所述第六子掩码进行位与运算的结果,所述第四子掩码和所述第六子掩码的每一比特为1,所述第五子掩码的每一比特为0;或者
所述第四子比特串与所述第四子掩码进行位或运算的结果等于所述第四字段与所述第四子掩码进行位或运算的结果,所述第五子比特串与所述第五子掩码进行位或运算的结果等于所述第五字段与所述第五子掩码进行位或运算的结果,所述第六子比特串与所述第六子掩码进行位或运算的结果等于所述第六字段与所述第六子掩码进行位或运算的结果,所述第四子掩码和所述第六子掩码的每一比特为0,所述第五子掩码的每一比特为1。
4.根据权利要求1至3中任一所述的方法,其特征在于:
所述第一位置参数包括第一偏移和第一长度,所述第一偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移,所述第一长度为所述第一字段的长度;
所述第二位置参数包括第二偏移和第二长度,所述第二偏移为所述第二字段的起始位置距所述第一首部的起始位置的偏移,所述第二长度为所述第二字段的长度。
5.根据权利要求1至3中任一所述的方法,其特征在于:
所述第一位置参数包括第一基本偏移、第一具体偏移和第一长度,所述第一基本偏移为零,所述第一具体偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移,所述第一长度为所述第一字段的长度;
所述第二位置参数包括第二基本偏移、第二具体偏移和第二长度,所述第二长度为所述第二字段的长度,所述第二基本偏移为所述第一首部起始位置距所述第二首部的起始位置的偏移,所述第二具体偏移为所述第二字段起始位置距所述第二首部的起始位置的偏移。
6.一种流表生成方法,其特征在于,包括:
处理器获取第一流表和第二流表,所述第一流表包括第一表项,所述第一表项包括匹配域和跳转指令,所述第一表项中的跳转指令指向所述第二流表,指向所述第二流表的跳转指令的数量等于1,所述第二流表包括第二表项,所述第二表项包括匹配域;以及
所述处理器生成一个第三流表,所述第三流表包括第三表项,所述第三表项包括匹配域,所述第三表项的匹配域包括第一子匹配域和第二子匹配域,所述第一子匹配域包括第一子比特串和第一子掩码,所述第二子匹配域包括第二子比特串和第二子掩码,所述第一子比特串和所述第一表项的匹配域相等,所述第二子比特串和所述第二表项的匹配域相等,其中
所述第一子掩码和所述第二子掩码的每一比特为1,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位与运算;或者
所述第一子掩码和所述第二子掩码的每一比特为0,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位或运算。
7.根据权利要求6所述的方法,其特征在于,还包括:
所述处理器获取第四流表,所述第四流表包括第四表项,所述第四表项包括匹配域,所述第一流表还包括第五表项,所述第五表项包括匹配域和跳转指令,所述第五表项中的跳转指令指向所述第四流表,指向所述第四流表的跳转指令的数量等于1;
所述第三表项的匹配域还包括第三子匹配域,所述第三子匹配域包括第三子比特串和第三子掩码,其中,
所述第三子掩码的每一比特为0并且所述第三子匹配域的掩码匹配算法为位与运算,或者,所述第三子掩码的每一比特为1并且所述第三子匹配域的掩码匹配算法为位或运算;
所述第三流表还包括第六表项,所述第六表项包括匹配域,所述第六表项的匹配域包括第四子匹配域,第五子匹配域和第六子匹配域,所述第四子匹配域包括第四子比特串和第四子掩码,所述第五子匹配域包括第五子比特串和第五子掩码,所述第六子匹配域包括第六子比特串和第六子掩码,所述第四子比特串与所述第五表项的匹配域相等,所述第六子比特串与所述第四表项的匹配域相等,其中,
所述第四子掩码的每一比特为1,所述第五子掩码的每一比特为0,所述第六子掩码的每一比特为1,所述第四子匹配域,所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位与运算;或者
所述第四子掩码的每一比特为0,所述第五子掩码的每一比特为1,所述第六子掩码的每一比特为0,所述第四子匹配域,所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位或运算。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
所述处理器获取第一位置参数和第二位置参数,所述第一位置参数用于标识第一字段在转发装置接收的第一报文中的位置,所述第一字段是所述第一报文中第一协议的首部中的字段,所述第一字段用于与所述第一表项的匹配域进行匹配,所述第二位置参数用于标识第二字段在所述第一报文中的位置,所述第二字段是所述第一报文中第二协议的首部中的字段,所述第二字段用于与所述第二表项的匹配域进行匹配,所述第一报文中所述第二协议的首部是所述第一报文中所述第一协议的首部的下一个首部;以及
所述处理器根据所述第一位置参数和所述第二位置参数,生成第三位置参数和第四位置参数,所述第三位置参数用于标识第三字段在转发装置接收的第二报文中的位置,所述第三字段是所述第二报文中所述第一协议的首部中的字段,所述第三字段用于与所述第三表项的第一子匹配域进行匹配,所述第四位置参数用于标识第四字段在所述第二报文中的位置,所述第四字段是所述第二报文中所述第二协议的首部中的字段,所述第四字段用于与所述第三表项的第二子匹配域进行匹配,所述第二报文中所述第二协议的首部是所述第二报文中所述第一协议的首部的下一个首部;
所述第三字段的起始位置距所述第二报文中所述第一协议的首部的起始位置的偏移等于所述第一字段的起始位置距所述第一报文中所述第一协议的首部的起始位置的偏移,所述第四字段的起始位置距所述第二报文中所述第二协议的首部的起始位置的偏移等于所述第二字段的起始位置距所述第一报文中所述第二协议的首部的起始位置的偏移。
9.根据权利要求8所述的方法,其特征在于,所述第一位置参数和所述第二位置参数中的每一个位置参数分别包括偏移和长度,所述第三位置参数和所述第四位置参数中的每一个位置参数分别包括基本偏移、具体偏移和长度,所述第三位置参数中的基本偏移为零,所述第三位置参数中的具体偏移与所述第一位置参数中的偏移相等,所述第三位置参数中的长度与所述第一位置参数中的长度相等,所述第四位置参数的基本偏移等于所述第二报文中所述第一协议的首部的长度,所述第四位置参数中的具体偏移与所述第二位置参数中的偏移相等,所述第四位置参数中的长度与所述第二位置参数中的长度相等。
10.根据权利要求6至9中任一所述的方法,其特征在于,指向所述第一流表的跳转指令的数量大于1,或者没有跳转指令指向所述第一流表。
11.一种报文处理的装置,其特征在于,包括接收单元,获取单元,查找单元和处理单元:
所述接收单元,用于接收第一报文,所述第一报文包括第一首部和第二首部,所述第二首部是所述第一首部的下一个首部,所述第一首部的协议是第一协议,所述第二首部的协议是第二协议;
所述获取单元,用于根据第一位置参数从所述接收单元接收的所述第一报文的所述第一首部获取第一字段,根据第二位置参数从所述接收单元接收的所述第一报文的所述第二首部获取第二字段,所述第一字段用于标识所述第一报文是否包含所述第一首部的下一个首部以及当所述第一报文包含所述第一首部的下一个首部时所述第一首部的下一个首部的协议,第二字段用于标识所述第一报文是否包含所述第二首部的下一个首部以及所述第一报文包含所述第二首部的下一个首部时所述第二首部的下一个首部的协议;
所述查找单元,用于通过一个第一查找请求,在第一流表中查找是否存在与第一查找关键字匹配的表项,所述第一查找请求携带所述第一查找关键字,所述第一查找关键字包括所述获取单元获取的所述第一字段和所述第二字段;
所述处理单元,用于根据所述查找单元在所述第一流表中查找到的与所述第一查找关键字匹配的第一表项,对所述接收单元接收的所述第一报文进行处理,所述第一表项的匹配域包括第一比特串以及第一掩码,所述第一比特串包括第一子比特串和第二子比特串,所述第一掩码包括第一子掩码和第二子掩码,其中,
所述第一子比特串与所述第一子掩码进行位与运算的结果等于所述第一字段与所述第一子掩码进行位与运算的结果,所述第二子比特串与所述第二子掩码进行位与运算的结果等于所述第二字段与所述第二子掩码进行位与运算的结果,所述第一子掩码和所述第二子掩码的每一比特为1;或者
所述第一子比特串与所述第一子掩码进行位或运算的结果等于所述第一字段与所述第一子掩码进行位或运算的结果,所述第二子比特串与所述第二子掩码进行位或运算的结果等于所述第二字段与所述第二子掩码进行位或运算的结果,所述第一子掩码和所述第二子掩码的每一比特为0。
12.根据权利要求11所述的装置,其特征在于,所述获取单元还用于,根据第三位置参数从所述第一报文中获取第三字段,所述第一查找关键字还包括所述第三字段,所述第一比特串还包括第三子比特串,所述第一掩码还包括第三子掩码,其中,
所述第三子比特串与所述第三子掩码进行位与运算的结果等于所述第三字段与所述第三子掩码进行位与运算的结果,所述第三子掩码的每一比特为0;或者
所述第三子比特串与所述第三子掩码进行位或运算的结果等于所述第三字段与所述第三子掩码进行位或运算的结果,所述第三子掩码的每一比特为1。
13.根据权利要求12所述的装置,其特征在于,所述接收单元还用于,接收第二报文,所述第二报文包括第三首部和第四首部,所述第四首部是所述第三首部的下一个首部,所述第三首部的协议是所述第一协议,所述第四首部的协议是第三协议;
所述获取单元还用于,根据所述第一位置参数从所述第二报文的所述第三首部获取第四字段,根据所述第二位置参数从所述接收单元接收的所述第二报文中获取第五字段,根据所述第三位置参数从所述接收单元接收的所述第二报文的所述第四首部获取第六字段,所述第四字段用于标识所述第二报文是否包含所述第三首部的下一个首部以及当所述第二报文包含所述第三首部的下一个首部时所述第三首部的下一个首部的协议,所述第六字段用于标识所述第二报文是否包含所述第四首部的下一个首部以及当所述第二报文包含所述第四首部的下一个首部时所述第四首部的下一个首部的协议;
所述查找单元还用于,通过一个第二查找请求,在所述第一流表中查找是否存在与第二查找关键字匹配的表项,所述第二查找请求中携带所述第二查找关键字,所述第二查找关键字包括所述获取单元获取的所述第四字段、所述第五字段以及所述第六字段;
所述处理单元还用于,根据所述查找单元在所述第一流表中查找到的与所述第二查找关键字匹配的第二表项,对所述接收单元接收的所述第二报文进行处理,所述第二表项的匹配域包括第二比特串以及第二掩码,所述第二比特串包括第四子比特串、第五子比特串以及第六子比特串,所述第二掩码包括第四子掩码、第五子掩码以及第六子掩码,其中
所述第四子比特串与所述第四子掩码进行位与运算的结果等于所述第四字段与所述第四子掩码进行位与运算的结果,所述第五子比特串与所述第五子掩码进行位与运算的结果等于所述第五字段与所述第五子掩码进行位与运算的结果,所述第六子比特串与所述第六子掩码进行位与运算的结果等于所述第六字段与所述第六子掩码进行位与运算的结果,所述第四子掩码和所述第六子掩码的每一比特为1,所述第五子掩码的每一比特为0;或者
所述第四子比特串与所述第四子掩码进行位或运算的结果等于所述第四字段与所述第四子掩码进行位或运算的结果,所述第五子比特串与所述第五子掩码进行位或运算的结果等于所述第五字段与所述第五子掩码进行位或运算的结果,所述第六子比特串与所述第六子掩码进行位或运算的结果等于所述第六字段与所述第六子掩码进行位或运算的结果,所述第四子掩码和所述第六子掩码的每一比特为0,所述第五子掩码的每一比特为1。
14.根据权利要求11至13中任一所述的装置,其特征在于:
所述第一位置参数包括第一偏移和第一长度,所述第一偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移,所述第一长度为所述第一字段的长度;
所述第二位置参数包括第二偏移和第二长度,所述第二偏移为所述第二字段的起始位置距所述第一首部的起始位置的偏移,所述第二长度为所述第二字段的长度。
15.根据权利要求11至13中任一所述的装置,其特征在于:
所述第一位置参数包括第一基本偏移、第一具体偏移和第一长度,所述第一基本偏移为零,所述第一具体偏移为所述第一字段的起始位置距所述第一首部的起始位置的偏移,所述第一长度为所述第一字段的长度;
所述第二位置参数包括第二基本偏移、第二具体偏移和第二长度,所述第二长度为所述第二字段的长度,所述第二基本偏移为所述第一首部起始位置距所述第二首部的起始位置的偏移,所述第二具体偏移为所述第二字段起始位置距所述第二首部的起始位置的偏移。
16.一种流表生成装置,其特征在于,包括第一获取单元和第一生成单元,
所述第一获取单元用于获取第一流表和第二流表,所述第一流表包括第一表项,所述第一表项包括匹配域和跳转指令,所述第一表项中的跳转指令指向所述第二流表,指向所述第二流表的跳转指令的数量等于1,所述第二流表包括第二表项,所述第二表项包括匹配域;以及
所述第一生成单元用于根据所述第一获取单元获取的所述第一流表和所述第二流表,生成一个第三流表,所述第三流表包括第三表项,所述第三表项包括匹配域,所述第三表项的匹配域包括第一子匹配域和第二子匹配域,所述第一子匹配域包括第一子比特串和第一子掩码,所述第二子匹配域包括第二子比特串和第二子掩码,所述第一子比特串和所述第一表项的匹配域相等,所述第二子比特串和所述第二表项的匹配域相等,其中
所述第一子掩码和所述第二子掩码的每一比特为1,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位与运算;或者
所述第一子掩码和所述第二子掩码的每一比特为0,所述第一子匹配域和所述第二子匹配域的掩码匹配算法为位或运算。
17.根据权利要求16所述的装置,其特征在于,
所述第一获取单元还用于获取第四流表,所述第四流表包括第四表项,所述第四表项包括匹配域,所述第一流表还包括第五表项,所述第五表项包括匹配域和跳转指令,所述第五表项的跳转指令指向所述第四流表,指向所述第四流表的跳转指令的数量等于1;
所述第三表项的匹配域还包括第三子匹配域,所述第三子匹配域包括第三子比特串和第三子掩码,其中,
所述第三子掩码的每一比特为0并且所述第三子匹配域的掩码匹配算法为位与运算,或者,所述第三子掩码的每一比特为1并且所述第三子匹配域的掩码匹配算法为位或运算;
所述第三流表还包括第六表项,所述第六表项包括匹配域,所述第六表项的匹配域包括第四子匹配域,第五子匹配域和第六子匹配域,所述第四子匹配域包括第四子比特串和第四子掩码,所述第五子匹配域包括第五子比特串和第五子掩码,所述第六子匹配域包括第六子比特串和第六子掩码,所述第四子比特串与所述第五表项的匹配域相等,所述第六子比特串与所述第四表项的匹配域相等,其中,
所述第四子掩码的每一比特为1,所述第五子掩码的每一比特为0,所述第六子掩码的每一比特为1,所述第四子匹配域、所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位与运算;或者
所述第四子掩码的每一比特为0,所述第五子掩码的每一比特为1,所述第六子掩码的每一比特为0,所述第四子匹配域、所述第五子匹配域和所述第六子匹配域的掩码匹配算法为位或运算。
18.根据权利要求16所述的装置,其特征在于,还包括第二获取单元和第二生成单元,
所述第二获取单元用于,获取第一位置参数和第二位置参数,所述第一位置参数用于标识第一字段在转发装置接收的第一报文中的位置,所述第一字段是所述第一报文中第一协议的首部中的字段,所述第一字段用于与所述第一表项的匹配域进行匹配,所述第二位置参数用于标识第二字段在所述第一报文中的位置,所述第二字段是所述第一报文中第二协议的首部中的字段,所述第二字段用于与所述第二表项的匹配域进行匹配,所述第一报文中所述第二协议的首部是所述第一报文中所述第一协议的首部的下一个首部;以及
所述第二生成单元用于,根据所述第二获取单元获取的所述第一位置参数以及所述第二位置参数,生成第三位置参数和第四位置参数,所述第三位置参数用于标识第三字段在转发装置接收的第二报文中的位置,所述第三字段是所述第二报文中所述第一协议的首部中的字段,所述第三字段用于与所述第三表项的第一子匹配域进行匹配,所述第四位置参数用于标识第四字段在所述第二报文中的位置,所述第四字段是所述第二报文中所述第二协议的首部中的字段,所述第四字段用于与所述第三表项的第二子匹配域进行匹配,所述第二报文中所述第二协议的首部是所述第二报文中所述第一协议的首部的下一个首部;
所述第三字段的起始位置距所述第二报文中所述第一协议的首部的起始位置的偏移等于所述第一字段的起始位置距所述第一报文中所述第一协议的首部的起始位置的偏移,所述第四字段的起始位置距所述第二报文中所述第二协议的首部的起始位置的偏移等于所述第二字段的起始位置距所述第一报文中所述第二协议的首部的起始位置的偏移。
19.根据权利要求18所述的装置,其特征在于,所述第一位置参数和所述第二位置参数中的每一个位置参数分别包括偏移和长度,所述第三位置参数和所述第四位置参数中的每一个位置参数分别包括基本偏移、具体偏移和长度,所述第三位置参数中的基本偏移为零,所述第三位置参数中的具体偏移与所述第一位置参数中的偏移相等,所述第三位置参数中的长度与所述第一位置参数中的长度相等,所述第四位置参数的基本偏移等于所述第二报文中所述第一协议的首部的长度,所述第四位置参数中的具体偏移与所述第二位置参数中的偏移相等,所述第四位置参数中的长度与所述第二位置参数中的长度相等。
20.根据权利要求16至19中任一所述的装置,其特征在于,指向所述第一流表的跳转指令的数量大于1,或者没有跳转指令指向所述第一流表。
CN201510868876.2A 2015-12-01 2015-12-01 报文处理方法及装置 Active CN105515995B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510868876.2A CN105515995B (zh) 2015-12-01 2015-12-01 报文处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510868876.2A CN105515995B (zh) 2015-12-01 2015-12-01 报文处理方法及装置

Publications (2)

Publication Number Publication Date
CN105515995A true CN105515995A (zh) 2016-04-20
CN105515995B CN105515995B (zh) 2018-09-21

Family

ID=55723648

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510868876.2A Active CN105515995B (zh) 2015-12-01 2015-12-01 报文处理方法及装置

Country Status (1)

Country Link
CN (1) CN105515995B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108055202A (zh) * 2017-12-07 2018-05-18 锐捷网络股份有限公司 一种报文处理设备和方法
CN110311835A (zh) * 2019-07-09 2019-10-08 国网甘肃省电力公司电力科学研究院 一种基于内容模板的电力iec协议符合性验证方法
TWI681656B (zh) * 2018-07-06 2020-01-01 財團法人工業技術研究院 封包偵測之軟體定義無線電系統及封包偵測方法
CN111222017A (zh) * 2018-11-23 2020-06-02 恒为科技(上海)股份有限公司 一种利用tcam实现浮动字符串匹配的系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102946325A (zh) * 2012-11-14 2013-02-27 中兴通讯股份有限公司 一种基于软件定义网络的网络诊断方法、系统及设备
US8949467B1 (en) * 2013-11-23 2015-02-03 William A Flanagan Systems and methods of header compression in a software defined network
CN104348716A (zh) * 2013-07-23 2015-02-11 杭州华三通信技术有限公司 一种报文处理方法及设备
US20150131666A1 (en) * 2013-11-08 2015-05-14 Electronics And Telecommunications Research Institute Apparatus and method for transmitting packet

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102946325A (zh) * 2012-11-14 2013-02-27 中兴通讯股份有限公司 一种基于软件定义网络的网络诊断方法、系统及设备
CN104348716A (zh) * 2013-07-23 2015-02-11 杭州华三通信技术有限公司 一种报文处理方法及设备
US20150131666A1 (en) * 2013-11-08 2015-05-14 Electronics And Telecommunications Research Institute Apparatus and method for transmitting packet
US8949467B1 (en) * 2013-11-23 2015-02-03 William A Flanagan Systems and methods of header compression in a software defined network

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108055202A (zh) * 2017-12-07 2018-05-18 锐捷网络股份有限公司 一种报文处理设备和方法
CN108055202B (zh) * 2017-12-07 2020-11-20 锐捷网络股份有限公司 一种报文处理设备和方法
TWI681656B (zh) * 2018-07-06 2020-01-01 財團法人工業技術研究院 封包偵測之軟體定義無線電系統及封包偵測方法
CN111222017A (zh) * 2018-11-23 2020-06-02 恒为科技(上海)股份有限公司 一种利用tcam实现浮动字符串匹配的系统
CN110311835A (zh) * 2019-07-09 2019-10-08 国网甘肃省电力公司电力科学研究院 一种基于内容模板的电力iec协议符合性验证方法

Also Published As

Publication number Publication date
CN105515995B (zh) 2018-09-21

Similar Documents

Publication Publication Date Title
US9787503B2 (en) Utilizing proxy internet protocol addressing in a gateway for communicating with multiple service provider networks
CN102148773B (zh) 一种IPv6协议和IPv4协议转换的方法及系统
CN101621414B (zh) 一种网络资源及拓扑的发现方法及装置
US7310351B2 (en) Method and apparatus for translating protocol
US20070147421A1 (en) ISATAP router for tunneling packets and method thereof
CN101087296B (zh) 利用网络处理器实现IPv4/IPv6网络协议转换的方法
US10164910B2 (en) Method and apparatus for an information-centric MAC layer
US9178818B2 (en) Communication apparatus
CN105830406A (zh) 用于支持软件定义网络中的灵活查找关键字的方法、设备和系统
CN104579954B (zh) 报文跨域转发方法、装置及通信设备
US20080181216A1 (en) Optimized mobile IPv6 encapsulation for wireless networks
US10574570B2 (en) Communication processing method and apparatus
US10630584B2 (en) Packet processing method and apparatus
JP2016522627A (ja) パケット処理方法および装置
US9307555B2 (en) Method and system for mobile terminal to access the network through cell phone
CN105515995A (zh) 报文处理方法、流表生成方法及装置
CN105515992A (zh) Vxlan网络中的流表项处理方法及装置
US10110554B2 (en) Method and apparatus for supporting mobility of user equipment
CN102333039A (zh) 一种转发报文的方法、生成表项的方法及装置
CN107124483A (zh) 域名解析方法及服务器
KR100896438B1 (ko) IPv6를 IPv4네트워크망으로 터널링하기 위한 시스템및 IPv6패킷 변환방법
CN105052106A (zh) 用于接收和传输互联网协议(ip)数据包的方法和系统
CN109246016B (zh) 跨vxlan的报文处理方法和装置
CN116566897A (zh) 一种寻址路由方法、装置、设备及介质
CN106331211A (zh) 一种实现IPv6地址访问IPv4资源的方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20211224

Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province

Patentee after: Super fusion Digital Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right