本發(fā)明實(shí)施例涉及通信技術(shù),尤其涉及報(bào)文處理方法和轉(zhuǎn)發(fā)設(shè)備(forwardingelement)。
背景技術(shù):
:現(xiàn)有技術(shù)中,forwardingelement接收到報(bào)文后,需要確定報(bào)文數(shù)據(jù)格式,例如確定報(bào)文是網(wǎng)際協(xié)議(InternetProtocol,IP)數(shù)據(jù)包或者多協(xié)議標(biāo)簽交換(MultipleprotocolLabelSwitching,MPLS)報(bào)文,從而對(duì)所述報(bào)文進(jìn)行處理。例如,交換機(jī)收到以太報(bào)文后,需要根據(jù)端口表確定所述以太報(bào)文的協(xié)議為媒體訪問(wèn)控制(MediaAccessControl,MAC)協(xié)議。然后,所述交換機(jī)根據(jù)MAC協(xié)議,對(duì)所述以太報(bào)文的MAC協(xié)議頭進(jìn)行解析,從而獲取所述以太報(bào)文的目的MAC協(xié)議地址。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供了報(bào)文處理方法和forwardingelement。對(duì)報(bào)文進(jìn)行處理前,forwardingelement不需要理解所述報(bào)文的數(shù)據(jù)格式??梢允沟胒orwardingelement靈活地支持不同數(shù)據(jù)格式的報(bào)文。當(dāng)需要支持新的數(shù)據(jù)格式時(shí),不需要更新硬件或者軟件就可以對(duì)該數(shù)據(jù)格式的報(bào)文進(jìn)行處理。第一方面,提供了一種報(bào)文處理方法,包括:forwardingelement通過(guò)入端口接收?qǐng)?bào)文;所述forwardingelement根據(jù)所述入端口查找端口表(porttable),確定第一偏移(offset)、第一長(zhǎng)度(length)和第一表的標(biāo)識(shí),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)對(duì)應(yīng)所述入端口;所述forwardingelement根據(jù)所述第一offset和所述第一length確定第一關(guān)鍵字(key),根據(jù)所述第一key查找所述第一表,確定第一指令(instruction);以及所述forwardingelement根據(jù)所述第一instruction處理所述報(bào)文。上述技術(shù)方案中,所述forwardingelement根據(jù)所述入端口確定所述第一offset和所述第一length。所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key。所述forwardingelement根據(jù)所述第一key確定所述第一instruction,從而處理所述報(bào)文。因此,對(duì)所述報(bào)文進(jìn)行處理前,所述forwardingelement不需要理解所述報(bào)文的數(shù)據(jù)格式。可以使得所述forwardingelement靈活地支持不同數(shù)據(jù)格式的報(bào)文。當(dāng)需要支持新的數(shù)據(jù)格式時(shí),不需要更新硬件或者軟件就可以對(duì)該數(shù)據(jù)格式的報(bào)文進(jìn)行處理。第一方面的第一種可能的實(shí)現(xiàn)方式中,所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key包括:所述forwardingelement獲取所述報(bào)文中的第一數(shù)據(jù)段(datasegment),所述第一datasegment的起始位置根據(jù)所述第一offset確定,所述第一datasegment的長(zhǎng)度為所述第一length;以及所述forwardingelement確定所述第一datasegment為所述第一key。第一方面的第二種可能的實(shí)現(xiàn)方式中,所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key包括:所述forwardingelement獲取中間數(shù)據(jù)(metedata)中的第二datasegment,所述第二datasegment的起始位置根據(jù)所述第一offset確定,所述第二datasegment的長(zhǎng)度為所述第一length;以及所述forwardingelement確定所述第二datasegment為所述第一key。根據(jù)第一方面的第二種可能的實(shí)現(xiàn)方式,在第一方面的第三種可能的實(shí)現(xiàn)方式中,所述metedata存儲(chǔ)于所述forwardingelement的寄存器(registers);或者所述metedata存儲(chǔ)于所述forwardingelement的存儲(chǔ)器(memory)。根據(jù)第一方面、第一方面的第一種可能的實(shí)現(xiàn)方式、第一方面的第二種可能的實(shí)現(xiàn)方式或者第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,所述第一instruction用于指示所述forwardingelement執(zhí)行操作,所述操作包括下述操作中的至少一個(gè):修改所述報(bào)文、計(jì)算所述報(bào)文的校驗(yàn)和(checksum)、寫metedata、讀metedata、計(jì)數(shù)器更新(counterupdate)、對(duì)所述報(bào)文進(jìn)行承諾訪問(wèn)速率(committedaccessrate,CAR)處理,丟棄所述報(bào)文,發(fā)送所述報(bào)文和修改所述報(bào)文的基礎(chǔ)偏移(baseoffset)。根據(jù)第一方面、第一方面的第一種可能的實(shí)現(xiàn)方式、第一方面的第二種可能的實(shí)現(xiàn)方式或者第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第五種可能的實(shí)現(xiàn)方式中,所述forwardingelement根據(jù)所述第一指令處理所述報(bào)文包括:所述forwardingelement根據(jù)所述第一表確定所述報(bào)文的baseoffset、第二offset、第二length和第二表的標(biāo)識(shí),所述報(bào)文的baseoffset、所述第二offset、所述第二length和所述第二表的標(biāo)識(shí)對(duì)應(yīng)所述第一key;所述forwardingelement根據(jù)所述報(bào)文的baseoffset、所述第二offset和所述第二length確定第二key,根據(jù)所述第二key查找所述第二表,確定第二instruction;以及所述forwardingelement根據(jù)所述第二instruction處理所述報(bào)文。第二方面,提供了一種forwardingelement,包括:接收電路,用于通過(guò)入端口接收?qǐng)?bào)文;查找單元,用于根據(jù)所述入端口查找porttable,確定第一offset、第一length和第一表的標(biāo)識(shí),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)對(duì)應(yīng)所述入端口;確定單元,用于根據(jù)所述第一offset和所述第一length確定第一key,根據(jù)所述第一key查找所述第一表,確定instruction;以及處理單元,用于根據(jù)所述instruction處理所述報(bào)文。上述技術(shù)方案中,所述forwardingelement根據(jù)所述入端口確定所述第一offset和所述第一length。所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key。所述forwardingelement根據(jù)所述第一key確定所述第一instruction,從而處理所述報(bào)文。因此,對(duì)所述報(bào)文進(jìn)行處理前,所述forwardingelement不需要理解所述報(bào)文的數(shù)據(jù)格式。可以使得所述forwardingelement靈活地支持不同數(shù)據(jù)格式的報(bào)文。當(dāng)需要支持新的數(shù)據(jù)格式時(shí),不需要更新硬件或者軟件就可以對(duì)該數(shù)據(jù)格式的報(bào)文進(jìn)行處理。第二方面的第一種可能的實(shí)現(xiàn)方式中,所述查找單元用于:獲取所述報(bào)文中的第一datasegment,所述第一datasegment的起始位置根據(jù)所述第一offset確定,所述第一datasegment的長(zhǎng)度為所述第一length;以及確定所述第一datasegment為所述第一key。第二方面的第二種可能的實(shí)現(xiàn)方式中,所述查找單元用于:獲取metedata中的第二datasegment,所述第二datasegment的起始位置根據(jù)所述第一offset確定,所述第二datasegment的長(zhǎng)度為所述第一length;以及確定所述第二datasegment為所述第一key。根據(jù)第二方面的第二種可能的實(shí)現(xiàn)方式,在第二方面的第三種可能的實(shí)現(xiàn)方式中,還包括registers或者memory;所述metedata存儲(chǔ)于所述registers或者所述memory。根據(jù)第二方面、第二方面的第一種可能的實(shí)現(xiàn)方式、第二方面的第二種可能的實(shí)現(xiàn)方式或者第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第四種可能的實(shí)現(xiàn)方式中,所述instruction用于指示所述forwardingelement執(zhí)行操作,所述操作包括下述操作中的至少一個(gè):修改所述報(bào)文、計(jì)算所述報(bào)文的checksum、寫metedata、讀metedata、counterupdate、對(duì)所述報(bào)文進(jìn)行CAR處理,丟棄所述報(bào)文,發(fā)送所述報(bào)文和修改所述報(bào)文的baseoffset。根據(jù)第二方面、第二方面的第一種可能的實(shí)現(xiàn)方式、第二方面的第二種可能的實(shí)現(xiàn)方式或者第二方面的第三種可能的實(shí)現(xiàn)方式,在第二方面的第五種可能的實(shí)現(xiàn)方式中,所述處理單元用于:根據(jù)所述第一表確定所述報(bào)文的baseoffset、第二offset、第二length和第二表的標(biāo)識(shí),所述報(bào)文的baseoffset、所述第二offset、所述第二length和所述第二表的標(biāo)識(shí)對(duì)應(yīng)所述第一key;根據(jù)所述報(bào)文的baseoffset、所述第二offset和所述第二length確定第二key,根據(jù)所述第二key查找所述第二表,確定第二instruction;以及根據(jù)所述第二instruction處理所述報(bào)文。第三方面,提供了一種forwardingelement,包括:接收電路、處理器、查找引擎(searchengine)以及memory。所述接收電路用于通過(guò)入端口接收?qǐng)?bào)文。所述處理器與所述接收電路耦合,所述處理器與所述memory耦合,所述處理器包括指令執(zhí)行電路和指令存儲(chǔ)器,所述指令執(zhí)行電路和所述指令存儲(chǔ)器耦合,所述指令存儲(chǔ)器用于存儲(chǔ)計(jì)算機(jī)指令,所述指令執(zhí)行電路通過(guò)讀所述計(jì)算機(jī)指令執(zhí)行如下動(dòng)作:觸發(fā)所述searchengine,以使所述searchengine根據(jù)所述入端口查找porttable,確定第一offset、第一長(zhǎng)度length和第一表的標(biāo)識(shí),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)對(duì)應(yīng)所述入端口,所述porttable存儲(chǔ)在所述memory中;根據(jù)所述第一offset和所述第一length確定第一key;觸發(fā)所述searchengine,以使所述searchengine根據(jù)所述第一key查找所述第一表,確定第一instruction;以及根據(jù)所述第一instruction處理所述報(bào)文。第三方面的第一種可能的實(shí)現(xiàn)方式中,所述searchengine還用于獲取所述報(bào)文中的第一datasegment,所述第一datasegment的起始位置根據(jù)所述第一offset確定,所述第一datasegment的長(zhǎng)度為所述第一length;所述指令執(zhí)行電路還用于確定所述第一datasegment為所述第一key。所述處理器還包括數(shù)據(jù)存儲(chǔ)器,所述數(shù)據(jù)存儲(chǔ)器與所述指令執(zhí)行電路耦合,所述報(bào)文存儲(chǔ)在所述數(shù)據(jù)存儲(chǔ)器中。第三方面的第二種可能的實(shí)現(xiàn)方式中,所述searchengine還用于獲取metedata中的第二datasegment,所述第二datasegment的起始位置根據(jù)所述第一offset確定,所述第二datasegment的長(zhǎng)度為所述第一length;所述指令執(zhí)行電路還用于確定所述第二datasegment為所述第一key。根據(jù)第三方面的第二種可能的實(shí)現(xiàn)方式,在第三方面的第三種可能的實(shí)現(xiàn)方式中,所述處理器還包括registers,所述registers與所述指令執(zhí)行電路耦合,所述metedata存儲(chǔ)在所述registers中。根據(jù)第三方面的第二種可能的實(shí)現(xiàn)方式,在第三方面的第四種可能的實(shí)現(xiàn)方式中,所述metedata存儲(chǔ)在所述memory中。根據(jù)第三方面、第三方面的第一種可能的實(shí)現(xiàn)方式、第三方面的第二種可能的實(shí)現(xiàn)方式、第三方面的第三種可能的實(shí)現(xiàn)方式或者第三方面的第四種可能的實(shí)現(xiàn)方式,在第三方面的第五種可能的實(shí)現(xiàn)方式中,所述第一instruction用于指示所述指令執(zhí)行電路執(zhí)行操作,所述操作包括下述操作中的至少一個(gè):修改所述報(bào)文、計(jì)算所述報(bào)文的checksum、寫metedata、讀metedata、counterupdate、對(duì)所述報(bào)文進(jìn)行CAR處理,丟棄所述報(bào)文,發(fā)送所述報(bào)文和修改所述報(bào)文的baseoffset。根據(jù)第三方面、第三方面的第一種可能的實(shí)現(xiàn)方式、第三方面的第二種可能的實(shí)現(xiàn)方式、第三方面的第三種可能的實(shí)現(xiàn)方式或者第三方面的第四種可能的實(shí)現(xiàn)方式,在第三方面的第六種可能的實(shí)現(xiàn)方式中,所述指令執(zhí)行電路還用于:根據(jù)所述第一表確定所述報(bào)文的baseoffset、第二offset、第二length和第二表的標(biāo)識(shí),所述報(bào)文的baseoffset、所述第二offset、所述第二length和所述第二表的標(biāo)識(shí)對(duì)應(yīng)所述第一key。所述指令執(zhí)行電路還用于:根據(jù)所述報(bào)文的baseoffset、所述第二offset和所述第二length確定第二key。所述指令執(zhí)行電路還用于觸發(fā)所述searchengine,以使所述searchengine根據(jù)所述第二key查找所述第二表,確定第二instruction。所述指令執(zhí)行電路還用于根據(jù)所述第二instruction處理所述報(bào)文。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實(shí)施例提供的一種報(bào)文處理方法的流程示意圖;圖2是本發(fā)明實(shí)施例提供的一種報(bào)文處理方法的流程示意圖;圖3是本發(fā)明實(shí)施例提供的一種報(bào)文處理方法的流程示意圖;圖4是本發(fā)明實(shí)施例提供的一種報(bào)文處理方法的流程示意圖;圖5是本發(fā)明實(shí)施例提供的一種轉(zhuǎn)發(fā)設(shè)備的結(jié)構(gòu)示意圖;圖6是本發(fā)明實(shí)施例提供的一種轉(zhuǎn)發(fā)設(shè)備的結(jié)構(gòu)示意圖;圖7是本發(fā)明實(shí)施例提供的一種表項(xiàng)的格式示意圖;圖8是本發(fā)明實(shí)施例提供的一種表項(xiàng)的格式示意圖。具體實(shí)施方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。圖1為本發(fā)明實(shí)施例提供的一種報(bào)文處理方法的流程示意圖。參見圖1,所述方法包括:102、forwardingelement通過(guò)入端口接收?qǐng)?bào)文。舉例來(lái)說(shuō),所述forwardingelement可以是路由器、交換機(jī)、防火墻或者負(fù)載均衡器。舉例來(lái)說(shuō),所述報(bào)文可以是IP數(shù)據(jù)包,以太報(bào)文或者M(jìn)PLS報(bào)文。舉例來(lái)說(shuō),102的執(zhí)行主體可以是接收電路。104、所述forwardingelement根據(jù)所述入端口查找porttable,確定第一offset、第一length和第一表的標(biāo)識(shí),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)對(duì)應(yīng)所述入端口。舉例來(lái)說(shuō),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)存儲(chǔ)在與所述入端口匹配的所述porttable的表項(xiàng)中。所述第一offset可以是一個(gè)offset,也可以是多個(gè)offset。所述第一length可以是一個(gè)length,也可以是多個(gè)length。所述多個(gè)offset與所述多個(gè)length一一對(duì)應(yīng)。舉例來(lái)說(shuō),所述第一表可以是MAC協(xié)議表、地址解析協(xié)議(AddressResolutionProtocol,ARP)表、轉(zhuǎn)發(fā)信息庫(kù)(forwardinginformationbase,F(xiàn)IB)或者M(jìn)PLS標(biāo)簽表。舉例來(lái)說(shuō),104的執(zhí)行主體可以是searchengine。106、所述forwardingelement根據(jù)所述第一offset和所述第一length確定第一key,根據(jù)所述第一key查找所述第一表,確定第一instruction。舉例來(lái)說(shuō),所述第一key可以是所述報(bào)文中的datasegment。所述第一key也可以是metedata中的datasegment。所述metedata存儲(chǔ)在registers中。舉例來(lái)說(shuō),所述第一key可以是一個(gè)key或者多個(gè)key。所述多個(gè)key與所述多個(gè)offset一一對(duì)應(yīng)。所述多個(gè)key與所述多個(gè)length一一對(duì)應(yīng)。舉例來(lái)說(shuō),所述第一key可以只來(lái)源于所述報(bào)文,也可以只來(lái)源于所述metedata。所述第一key也可以來(lái)源于所述報(bào)文以及所述metedata。舉例來(lái)說(shuō),106的執(zhí)行主體可以是searchengine以及指令執(zhí)行電路。108、所述forwardingelement根據(jù)所述第一instruction處理所述報(bào)文。舉例來(lái)說(shuō),所述第一instruction可以是標(biāo)準(zhǔn)制定組織(StandardSettingOrganization,SSO)開放網(wǎng)絡(luò)基礎(chǔ)(OpenNetworkingFoundation,ONF)發(fā)布的《開放流交換機(jī)規(guī)范1.3.0》(OpenFlowSwitchSpecification1.3.0)中定義的instruction。舉例來(lái)說(shuō),108的執(zhí)行主體可以是網(wǎng)絡(luò)處理器(networkprocessor,NP)。具體來(lái)說(shuō),108的執(zhí)行主體可以是所述NP中的指令執(zhí)行電路。上述技術(shù)方案中,所述forwardingelement根據(jù)所述入端口確定所述第一offset和所述第一length。所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key。所述forwardingelement根據(jù)所述第一key確定所述第一instruction,從而處理所述報(bào)文。因此,對(duì)所述報(bào)文進(jìn)行處理前,所述forwardingelement不需要理解所述報(bào)文的數(shù)據(jù)格式??梢允沟盟鰂orwardingelement靈活地支持不同數(shù)據(jù)格式的報(bào)文。當(dāng)需要支持新的數(shù)據(jù)格式時(shí),不需要更新硬件或者軟件就可以對(duì)該數(shù)據(jù)格式的報(bào)文進(jìn)行處理。可選地,圖1所示的方法中,所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key包括:202、所述forwardingelement獲取所述報(bào)文中的第一datasegment,所述第一datasegment的起始位置根據(jù)所述第一offset確定,所述第一datasegment的長(zhǎng)度為所述第一length。204、所述forwardingelement確定所述第一datasegment為所述第一key。關(guān)于202和204,具體請(qǐng)參見圖2。舉例來(lái)說(shuō),所述第一datasegment的起始位置根據(jù)所述第一offset確定具體可以是所述第一datasegment的起始位置可以用第一baseoffset與所述第一offset的和進(jìn)行標(biāo)識(shí)。所述第一baseoffset為0。上述技術(shù)方案中,所述第一key來(lái)源于所述報(bào)文。可選地,圖1所示的方法中,所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key包括:302、所述forwardingelement獲取metedata中的第二datasegment,所述第二datasegment的起始位置根據(jù)所述第一offset確定,所述第二datasegment的長(zhǎng)度為所述第一length。304、所述forwardingelement確定所述第二datasegment為所述第一key。關(guān)于302和304,具體請(qǐng)參見圖3。舉例來(lái)說(shuō),所述第二datasegment的起始位置根據(jù)所述第一offset確定具體可以是所述第二datasegment的起始位置可以用第二baseoffset與所述第一offset的和進(jìn)行標(biāo)識(shí)。所述第二baseoffset為0。上述技術(shù)方案中,所述第一key來(lái)源于所述metedata??蛇x地,圖1所示的方法中,所述metedata存儲(chǔ)于所述forwardingelement的registers。舉例來(lái)說(shuō),所述registers可以位于NP中??蛇x地,圖1所示的方法中,所述metedata存儲(chǔ)于所述forwardingelement的memory。舉例來(lái)說(shuō),所述memory可以與所述NP耦合。可選地,圖1所示的方法中,所述第一instruction用于指示所述forwardingelement執(zhí)行操作,所述操作包括下述操作中的至少一個(gè):修改所述報(bào)文、計(jì)算所述報(bào)文的checksum、寫metedata、讀metedata、counterupdate、對(duì)所述報(bào)文進(jìn)行CAR處理,丟棄所述報(bào)文,發(fā)送所述報(bào)文和修改所述報(bào)文的baseoffset。舉例來(lái)說(shuō),修改所述報(bào)文可以是刪除所述報(bào)文中的datasegment、替換所述報(bào)文中的datasegment或者在所述報(bào)文中插入datasegment。舉例來(lái)說(shuō),所述checksum可以是IPchecksum、傳輸控制協(xié)議(TransmissionControlProtocol,TCP)checksum或者用戶數(shù)據(jù)報(bào)協(xié)議(UserDatagramProtocol,UDP)checksum??蛇x地,圖1所示的方法中,所述forwardingelement根據(jù)所述第一instruction處理所述報(bào)文包括:402、所述forwardingelement根據(jù)所述第一表確定baseoffset、第二offset、第二length和第二表的標(biāo)識(shí),所述baseoffset、所述第二offset、所述第二length和所述第二表的標(biāo)識(shí)對(duì)應(yīng)所述第一key。舉例來(lái)說(shuō),所述baseoffset等于所述第一baseoffset與所述第一offset的和。404、所述forwardingelement根據(jù)所述baseoffset、所述第二offset和所述第二length確定第二key,根據(jù)所述第二key查找所述第二表,確定第二instruction。舉例來(lái)說(shuō),所述第二key可以是一個(gè)key或者多個(gè)key。如果所述第二key是多個(gè)key,則所述baseoffset是多個(gè)baseoffset,所述第二offset是多個(gè)第二offset,所述第二length是多個(gè)第二length。所述多個(gè)baseoffset與所述多個(gè)key一一對(duì)應(yīng)。所述多個(gè)第二offset與所述多個(gè)key一一對(duì)應(yīng)。所述多個(gè)第二length與所述多個(gè)key一一對(duì)應(yīng)。舉例來(lái)說(shuō),所述第二key可以只來(lái)源于所述報(bào)文,也可以只來(lái)源于所述metedata。所述第二key也可以來(lái)源于所述報(bào)文以及所述metedata。406、所述forwardingelement根據(jù)所述第二instruction處理所述報(bào)文。舉例來(lái)說(shuō),所述第二instruction可以是ONF發(fā)布的OpenFlowSwitchSpecification1.3.0中定義的instruction。關(guān)于402、404和406,具體請(qǐng)參考圖4。圖5為本發(fā)明實(shí)施例提供的一種forwardingelement的結(jié)構(gòu)示意圖。所述forwardingelement可以用于執(zhí)行圖1所示的方法。舉例來(lái)說(shuō),所述forwardingelement可以是路由器、交換機(jī)、防火墻或者負(fù)載均衡器。參見圖5,所述forwardingelement包括:接收電路502,用于通過(guò)入端口接收?qǐng)?bào)文。舉例來(lái)說(shuō),所述報(bào)文可以是IP數(shù)據(jù)包,以太報(bào)文或者M(jìn)PLS報(bào)文。查找單元504,用于根據(jù)所述入端口查找porttable,確定第一offset、第一長(zhǎng)度length和第一表的標(biāo)識(shí),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)對(duì)應(yīng)所述入端口。舉例來(lái)說(shuō),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)存儲(chǔ)在與所述入端口匹配的所述porttable的表項(xiàng)中。所述第一offset可以是一個(gè)offset,也可以是多個(gè)offset。所述第一length可以是一個(gè)length,也可以是多個(gè)length。所述多個(gè)offset與所述多個(gè)length一一對(duì)應(yīng)。舉例來(lái)說(shuō),所述第一表可以是MAC協(xié)議表、ARP表、FIB或者M(jìn)PLS標(biāo)簽表。舉例來(lái)說(shuō),查找單元504可以是searchengine。確定單元506,用于根據(jù)所述第一offset和所述第一length確定第一key,根據(jù)所述第一key查找所述第一表,確定第一instruction。舉例來(lái)說(shuō),所述第一key可以是所述報(bào)文中的datasegment。所述第一key也可以是metedata中的datasegment。所述metedata存儲(chǔ)在registers中。舉例來(lái)說(shuō),所述第一key可以是一個(gè)key或者多個(gè)key。所述多個(gè)key與所述多個(gè)offset一一對(duì)應(yīng)。所述多個(gè)key與所述多個(gè)length一一對(duì)應(yīng)。舉例來(lái)說(shuō),所述第一key可以只來(lái)源于所述報(bào)文,也可以只來(lái)源于所述metedata。所述第一key也可以來(lái)源于所述報(bào)文以及所述metedata。舉例來(lái)說(shuō),確定單元506可以是searchengine以及指令執(zhí)行電路。處理單元508,用于根據(jù)所述第一instruction處理所述報(bào)文。舉例來(lái)說(shuō),所述第一instruction可以是ONF發(fā)布的OpenFlowSwitchSpecification1.3.0中定義的instruction。舉例來(lái)說(shuō),處理單元508可以是NP。具體來(lái)說(shuō),可以是所述NP中的指令執(zhí)行電路。上述技術(shù)方案中,所述forwardingelement根據(jù)所述入端口確定所述第一offset和所述第一length。所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key。所述forwardingelement根據(jù)所述第一key確定所述第一instruction,從而處理所述報(bào)文。因此,對(duì)所述報(bào)文進(jìn)行處理前,所述forwardingelement不需要理解所述報(bào)文的數(shù)據(jù)格式??梢允沟盟鰂orwardingelement靈活地支持不同數(shù)據(jù)格式的報(bào)文。當(dāng)需要支持新的數(shù)據(jù)格式時(shí),不需要更新硬件或者軟件就可以對(duì)該數(shù)據(jù)格式的報(bào)文進(jìn)行處理。可選地,圖5所述的forwardingelement中,所述查找單元504用于:獲取所述報(bào)文中的第一datasegment,所述第一datasegment的起始位置根據(jù)所述第一offset確定,所述第一datasegment的長(zhǎng)度為所述第一length。確定所述第一datasegment為所述第一key。舉例來(lái)說(shuō),所述第一datasegment的起始位置根據(jù)所述第一offset確定具體可以是所述第一datasegment的起始位置可以用第一baseoffset與所述第一offset的和進(jìn)行標(biāo)識(shí)。所述第一baseoffset為0。上述技術(shù)方案中,所述第一key來(lái)源于所述報(bào)文。可選地,圖5所述的forwardingelement中,所述查找單元504用于:獲取metedata中的第二datasegment,所述第二datasegment的起始位置根據(jù)所述第一offset確定,所述第二datasegment的長(zhǎng)度為所述第一length。確定所述第二datasegment為所述第一key。舉例來(lái)說(shuō),所述第二datasegment的起始位置根據(jù)所述第一offset確定具體可以是所述第二datasegment的起始位置可以用第二baseoffset與所述第一offset的和進(jìn)行標(biāo)識(shí)。所述第二baseoffset為0。上述技術(shù)方案中,所述第一key來(lái)源于所述metedata。可選地,圖5所述的forwardingelement中,還包括registers或者memory。所述metedata存儲(chǔ)于所述registers或者所述memory??蛇x地,圖5所述的forwardingelement中,所述第一instruction用于指示所述forwardingelement執(zhí)行操作,所述操作包括下述操作中的至少一個(gè):修改所述報(bào)文、計(jì)算所述報(bào)文的checksum、寫metedata、讀metedata、counterupdate、對(duì)所述報(bào)文進(jìn)行CAR處理,丟棄所述報(bào)文,發(fā)送所述報(bào)文和修改所述報(bào)文的baseoffset。舉例來(lái)說(shuō),修改所述報(bào)文可以是刪除所述報(bào)文中的datasegment、替換所述報(bào)文中的datasegment或者在所述報(bào)文中插入datasegment。舉例來(lái)說(shuō),所述checksum可以是IPchecksum、傳輸控制協(xié)議TCPchecksum或者UDPchecksum。可選地,圖5所述的forwardingelement中,所述處理單元508用于:根據(jù)所述第一表確定所述報(bào)文的baseoffset、第二offset、第二length和第二表的標(biāo)識(shí),所述報(bào)文的baseoffset、所述第二offset、所述第二length和所述第二表的標(biāo)識(shí)對(duì)應(yīng)所述第一key。根據(jù)所述報(bào)文的baseoffset、所述第二offset和所述第二length確定第二key,根據(jù)所述第二key查找所述第二表,確定第二instruction。根據(jù)所述第二instruction處理所述報(bào)文。舉例來(lái)說(shuō),所述baseoffset等于所述第一baseoffset與所述第一offset的和。舉例來(lái)說(shuō),所述第二key可以是一個(gè)key或者多個(gè)key。如果所述第二key是多個(gè)key,則所述baseoffset是多個(gè)baseoffset,所述第二offset是多個(gè)第二offset,所述第二length是多個(gè)第二length。所述多個(gè)baseoffset與所述多個(gè)key一一對(duì)應(yīng)。所述多個(gè)第二offset與所述多個(gè)key一一對(duì)應(yīng)。所述多個(gè)第二length與所述多個(gè)key一一對(duì)應(yīng)。舉例來(lái)說(shuō),所述第二key可以只來(lái)源于所述報(bào)文,也可以只來(lái)源于所述metedata。所述第二key也可以來(lái)源于所述報(bào)文以及所述metedata。舉例來(lái)說(shuō),所述第二instruction可以是ONF發(fā)布的OpenFlowSwitchSpecification1.3.0中定義的instruction。圖6為本發(fā)明實(shí)施例提供的一種forwardingelement的結(jié)構(gòu)示意圖。所述forwardingelement可以用于執(zhí)行圖1所示的方法。舉例來(lái)說(shuō),所述forwardingelement可以是路由器、交換機(jī)、防火墻或者負(fù)載均衡器。參見圖6,所述forwardingelement包括:接口電路601、接口電路602、存儲(chǔ)器(memory)603、查找引擎(searchengine)604以及處理器609。所述處理器609包括指令執(zhí)行電路605和指令存儲(chǔ)器607。可選地,所述處理器609可以包括寄存器(registers)606以及數(shù)據(jù)存儲(chǔ)器608。所述接收電路601用于通過(guò)入端口接收?qǐng)?bào)文。所述處理器609與所述接收電路601耦合,所述處理器609與所述memory603耦合,所述處理器609包括指令執(zhí)行電路605和指令存儲(chǔ)器607,所述指令執(zhí)行電路605和所述指令存儲(chǔ)器607耦合,所述指令存儲(chǔ)器607用于存儲(chǔ)計(jì)算機(jī)指令,所述指令執(zhí)行電路605通過(guò)讀所述計(jì)算機(jī)指令執(zhí)行如下動(dòng)作:觸發(fā)所述查找引擎604,以使所述查找引擎604根據(jù)所述入端口查找porttable,確定第一offset、第一長(zhǎng)度length和第一表的標(biāo)識(shí),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)對(duì)應(yīng)所述入端口,所述porttable存儲(chǔ)在所述memory603中。根據(jù)所述第一offset和所述第一length確定第一key。觸發(fā)所述查找引擎604,以使所述查找引擎604根據(jù)所述第一key查找所述第一表,確定第一instruction。根據(jù)所述第一instruction處理所述報(bào)文。舉例來(lái)說(shuō),所述處理器609可以通過(guò)交叉開關(guān)(crossbar)與所述存儲(chǔ)器603耦合。所述處理器609可以通過(guò)crossbar與所述查找引擎604耦合。舉例來(lái)說(shuō),所述報(bào)文可以是IP數(shù)據(jù)包,以太報(bào)文或者M(jìn)PLS報(bào)文。舉例來(lái)說(shuō),所述第一offset、所述第一length和所述第一表的標(biāo)識(shí)存儲(chǔ)在與所述入端口匹配的所述porttable的表項(xiàng)中。所述第一offset可以是一個(gè)offset,也可以是多個(gè)offset。所述第一length可以是一個(gè)length,也可以是多個(gè)length。所述多個(gè)offset與所述多個(gè)length一一對(duì)應(yīng)。圖7為所述porttable的表項(xiàng)的格式示意圖。圖7中的入端口701、第一偏移702、第一長(zhǎng)度703以及第一表的標(biāo)識(shí)704分別對(duì)應(yīng)所述入端口、所述第一offset、所述第一length以及所述第一表的標(biāo)識(shí)。舉例來(lái)說(shuō),所述第一表可以是MAC協(xié)議表、ARP表、FIB或者M(jìn)PLS標(biāo)簽表。舉例來(lái)說(shuō),所述第一key可以是所述報(bào)文中的datasegment。所述第一key也可以是metedata中的datasegment。所述metedata存儲(chǔ)在registers中。舉例來(lái)說(shuō),所述第一key可以是一個(gè)key或者多個(gè)key。所述多個(gè)key與所述多個(gè)offset一一對(duì)應(yīng)。所述多個(gè)key與所述多個(gè)length一一對(duì)應(yīng)。舉例來(lái)說(shuō),所述第一key可以只來(lái)源于所述報(bào)文,也可以只來(lái)源于所述metedata。所述第一key也可以來(lái)源于所述報(bào)文以及所述metedata。舉例來(lái)說(shuō),所述第一instruction可以是ONF發(fā)布的OpenFlowSwitchSpecification1.3.0中定義的instruction。上述技術(shù)方案中,所述forwardingelement根據(jù)所述入端口確定所述第一offset和所述第一length。所述forwardingelement根據(jù)所述第一offset和所述第一length確定所述第一key。所述forwardingelement根據(jù)所述第一key確定所述第一instruction,從而處理所述報(bào)文。因此,對(duì)所述報(bào)文進(jìn)行處理前,所述forwardingelement不需要理解所述報(bào)文的數(shù)據(jù)格式??梢允沟盟鰂orwardingelement靈活地支持不同數(shù)據(jù)格式的報(bào)文。當(dāng)需要支持新的數(shù)據(jù)格式時(shí),不需要更新硬件或者軟件就可以對(duì)該數(shù)據(jù)格式的報(bào)文進(jìn)行處理??蛇x地,圖6所示的forwardingelement中,所述查找引擎604還用于獲取所述報(bào)文中的第一datasegment,所述第一datasegment的起始位置根據(jù)所述第一offset確定,所述第一datasegment的長(zhǎng)度為所述第一length。所述指令執(zhí)行電路605還用于確定所述第一datasegment為所述第一key。所述處理器還包括數(shù)據(jù)存儲(chǔ)器608,所述數(shù)據(jù)存儲(chǔ)器608與所述指令執(zhí)行電路605耦合,所述報(bào)文存儲(chǔ)在所述數(shù)據(jù)存儲(chǔ)器608中。舉例來(lái)說(shuō),所述第一datasegment的起始位置根據(jù)所述第一offset確定具體可以是所述第一datasegment的起始位置可以用第一baseoffset與所述第一offset的和進(jìn)行標(biāo)識(shí)。所述第一baseoffset為0。上述技術(shù)方案中,所述第一key來(lái)源于所述報(bào)文。可選地,圖6所示的forwardingelement中,所述查找引擎604還用于獲取metedata中的第二datasegment,所述第二datasegment的起始位置根據(jù)所述第一offset確定,所述第二datasegment的長(zhǎng)度為所述第一length。所述指令執(zhí)行電路605還用于確定所述第二datasegment為所述第一key。舉例來(lái)說(shuō),所述第二datasegment的起始位置根據(jù)所述第一offset確定具體可以是所述第二datasegment的起始位置可以用第二baseoffset與所述第一offset的和進(jìn)行標(biāo)識(shí)。所述第二baseoffset為0。上述技術(shù)方案中,所述第一key來(lái)源于所述metedata。可選地,圖6所示的forwardingelement中,所述處理器609還包括registers606,所述registers606與所述指令執(zhí)行電路605耦合,所述metedata存儲(chǔ)在所述registers606中。可選地,圖6所示的forwardingelement中,所述metedata存儲(chǔ)在所述memory603中??蛇x地,圖6所示的forwardingelement中,所述第一instruction用于指示所述指令執(zhí)行電路執(zhí)行操作,所述操作包括下述操作中的至少一個(gè):修改所述報(bào)文、計(jì)算所述報(bào)文的checksum、寫metedata、讀metedata、counterupdate、對(duì)所述報(bào)文進(jìn)行CAR處理,丟棄所述報(bào)文,發(fā)送所述報(bào)文和修改所述報(bào)文的baseoffset。舉例來(lái)說(shuō),修改所述報(bào)文可以是刪除所述報(bào)文中的datasegment、替換所述報(bào)文中的datasegment或者在所述報(bào)文中插入datasegment。舉例來(lái)說(shuō),所述checksum可以是IPchecksum、TCPchecksum或者UDPchecksum。舉例來(lái)說(shuō),發(fā)送所述報(bào)文的執(zhí)行主體可以是所述接口電路602??蛇x地,圖6所示的forwardingelement中,所述指令執(zhí)行電路605還用于:根據(jù)所述第一表確定所述報(bào)文的baseoffset、第二offset、第二length和第二表的標(biāo)識(shí),所述報(bào)文的baseoffset、所述第二offset、所述第二length和所述第二表的標(biāo)識(shí)對(duì)應(yīng)所述第一key。所述指令執(zhí)行電路605還用于:根據(jù)所述報(bào)文的baseoffset、所述第二offset和所述第二length確定第二key。所述指令執(zhí)行電路605還用于觸發(fā)所述查找引擎604,以使所述查找引擎604根據(jù)所述第二key查找所述第二表,確定第二instruction。所述指令執(zhí)行電路605還用于根據(jù)所述第二instruction處理所述報(bào)文。舉例來(lái)說(shuō),所述baseoffset等于所述第一baseoffset與所述第一offset的和。舉例來(lái)說(shuō),所述第二key可以是一個(gè)key或者多個(gè)key。如果所述第二key是多個(gè)key,則所述baseoffset是多個(gè)baseoffset,所述第二offset是多個(gè)第二offset,所述第二length是多個(gè)第二length。所述多個(gè)baseoffset與所述多個(gè)key一一對(duì)應(yīng)。所述多個(gè)第二offset與所述多個(gè)key一一對(duì)應(yīng)。所述多個(gè)第二length與所述多個(gè)key一一對(duì)應(yīng)。舉例來(lái)說(shuō),所述第二key可以只來(lái)源于所述報(bào)文,也可以只來(lái)源于所述metedata。所述第二key也可以來(lái)源于所述報(bào)文以及所述metedata。舉例來(lái)說(shuō),所述第二instruction可以是ONF發(fā)布的OpenFlowSwitchSpecification1.3.0中定義的instruction。舉例來(lái)說(shuō),所述第二表的表項(xiàng)包含所述第二key和所述第二instruction。圖8為所述第二表項(xiàng)的格式示意圖。圖8中的第二關(guān)鍵字801和第二指令802分別對(duì)應(yīng)所述第二key和所述第二instruction。本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來(lái)實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng)、裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,可以僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(Read-OnlyMemory,ROM)、隨機(jī)存取存儲(chǔ)器(RandomAccessMemory,RAM)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本
技術(shù)領(lǐng)域:
的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。當(dāng)前第1頁(yè)1 2 3