本申請涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,特別涉及一種標簽封裝方法及裝置。
背景技術(shù):
mpls(multiprotocollabelswitching,多協(xié)議標簽交換)是一種應(yīng)用比較廣泛的骨干網(wǎng)技術(shù)。mpls在無連接的ip(internetprotocol,因特網(wǎng)協(xié)議)網(wǎng)絡(luò)上引入面向連接的標簽交換概念,將第三層(layer3)路由技術(shù)和第二層(layer2)交換技術(shù)相結(jié)合,充分發(fā)揮了ip路由的靈活性和二層交換的簡潔性。
在mpls網(wǎng)絡(luò)中,在接收到報文后,lsr(labelswitchingrouter,標簽交換路由器)中的轉(zhuǎn)發(fā)芯片會通過查表確定對應(yīng)的fec_next_hop(轉(zhuǎn)發(fā)等價類下一跳)信息,然后,通過fec_next_hop信息獲取encap_db表項中包含的出標簽(outlabel),將該出標簽封裝到該報文中后轉(zhuǎn)發(fā)出去。
在現(xiàn)有技術(shù)中,某些轉(zhuǎn)發(fā)芯片在報文中封裝的標簽數(shù)量是有限的,最多只能封裝4層標簽,從而無法按照實際組網(wǎng)的需求進行更多層標簽的封裝,應(yīng)用范圍受限。具體的封裝過程如下:
轉(zhuǎn)發(fā)芯片確定出待轉(zhuǎn)發(fā)報文的fec_next_hop信息后,從fec_next_hop信息中獲取出端口的標識(id)和第一級encap_db(封裝數(shù)據(jù)庫)表項的索引index1_1,通過索引index1_1查找第一級encap_db表項并從該表項中獲取2個標簽值和第二級encap_db表項的索引index1_2,通過索引index1_2查找第二級encap_db表項并從該表項中獲取2個標簽值,從而最終獲取到4個標簽值,這4個標簽值即為待轉(zhuǎn)發(fā)報文的出標簽的標簽值。將攜帶這些標簽值的標簽封裝到待轉(zhuǎn)發(fā)報文中后,將封裝得到的標簽封裝報文從該出端口上轉(zhuǎn)發(fā)出去。
可見,在此種轉(zhuǎn)發(fā)芯片中,fec_next_hop信息中的encap_db表項可以采用指針索引形式進行級聯(lián),但是級聯(lián)次數(shù)有限,只能級聯(lián)2次,而每個encap_db表項中只能包含2個標簽值,因此,最多只能在報文中封裝4層標簽。
技術(shù)實現(xiàn)要素:
有鑒于此,本申請?zhí)峁┮环N標簽封裝方法及裝置。
具體地,本申請是通過如下技術(shù)方案實現(xiàn)的:
一方面,提供了一種標簽封裝方法,該方法應(yīng)用于標簽交換轉(zhuǎn)發(fā)設(shè)備中的轉(zhuǎn)發(fā)芯片,該方法包括:
確定待轉(zhuǎn)發(fā)報文對應(yīng)的第一級fec_next_hop信息、以及與第一級fec_next_hop信息級聯(lián)的第二級fec_next_hop信息,其中,第二級fec_next_hop信息中包含出端口標識和第一級encap_db表項的索引;
通過第二級fec_next_hop信息,查找第一級encap_db表項、以及與第一級encap_db表項級聯(lián)的第二級encap_db表項;
從第一級fec_next_hop信息、第一級encap_db表項、以及第二級encap_db表項中獲取附加信息和原有標簽值,得到一個以上附加信息和一個以上原有標簽值,其中,第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中的一個或兩個以上包含附加信息,第一級encap_db表項和第二級encap_db表項中包含原有標簽值;
將攜帶原有標簽值的原有標簽封裝到待轉(zhuǎn)發(fā)報文中得到標準標簽封裝報文;
將每個附加信息作為一個新增標簽的標簽值封裝到標準標簽封裝報文中,得到擴展標簽封裝報文。
另一方面,還提供了一種標簽封裝裝置,該裝置應(yīng)用于標簽交換轉(zhuǎn)發(fā)設(shè)備中的轉(zhuǎn)發(fā)芯片上,該裝置包括:
查找單元,用于確定待轉(zhuǎn)發(fā)報文對應(yīng)的第一級fec_next_hop信息、以及與第一級fec_next_hop信息級聯(lián)的第二級fec_next_hop信息,其中,第二級fec_next_hop信息中包含出端口標識和第一級encap_db表項的索引;通過第二級fec_next_hop信息,查找第一級encap_db表項、以及與第一級encap_db表項級聯(lián)的第二級encap_db表項;
獲取單元,用于從第一級fec_next_hop信息、第一級encap_db表項、以及第二級encap_db表項中獲取附加信息和原有標簽值,得到一個以上附加信息和一個以上原有標簽值,其中,第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中的一個或兩個以上包含附加信息,第一級encap_db表項和第二級encap_db表項中包含原有標簽值;
封裝單元,用于將攜帶原有標簽值的原有標簽封裝到待轉(zhuǎn)發(fā)報文中得到標準標簽封裝報文;將每個附加信息作為一個新增標簽的標簽值封裝到標準標簽封裝報文中,得到擴展標簽封裝報文。
通過本申請的以上技術(shù)方案,轉(zhuǎn)發(fā)芯片可以在報文中封裝更多層的標簽,最多可以封裝7層標簽,從而可以按照實際組網(wǎng)的需求進行更多層標簽的封裝,擴大了應(yīng)用范圍。
附圖說明
圖1是本申請實施例示出的標簽封裝方法的流程圖;
圖2是本申請實施例示出的確定第一級fec_next_hop信息和第二級fec_next_hop信息的一種示意圖;
圖3是本申請實施例示出的確定第一級fec_next_hop信息和第二級fec_next_hop信息的另一種示意圖;
圖4是本申請實施例示出的查找第一級encap_db表項和第二級encap_db表項的示意圖;
圖5是本申請實施例示出的標簽格式示意圖;
圖6是本申請實施例示出的擴展標簽封裝報文中的7層標簽的結(jié)構(gòu)示意圖;
圖7是本申請實施例示出的標簽封裝裝置的結(jié)構(gòu)示意圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術(shù)語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項目的任何或所有可能組合。
應(yīng)當理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應(yīng)于確定”。
在現(xiàn)有技術(shù)中,lsr中的交換芯片最多只能在待轉(zhuǎn)發(fā)報文中封裝4層標簽,從而無法按照實際組網(wǎng)的需求進行更多層標簽的封裝,應(yīng)用范圍受限。為了解決上述問題,本申請以下實施例中提供了一種標簽封裝方法,以及一種可以應(yīng)用該方法的裝置。
本申請實施例的標簽封裝方法可以由標簽交換轉(zhuǎn)發(fā)設(shè)備中的轉(zhuǎn)發(fā)芯片來執(zhí)行,上述標簽交換轉(zhuǎn)發(fā)設(shè)備例如可以是lsr等具有標簽分發(fā)和交換能力的轉(zhuǎn)發(fā)設(shè)備。目前,標準的轉(zhuǎn)發(fā)芯片可以實現(xiàn)fec_next_hop信息級聯(lián),但是,受到芯片硬件資源的限制,fec_next_hop信息的級聯(lián)次數(shù)有限,只能級聯(lián)兩次,這樣,本申請實施例中可以利用上述fec_next_hop信息級聯(lián)的特點,當fec_next_hop信息級聯(lián)時,第一級fec_next_hop信息中包括第二級fec_next_hop信息的索引,即第一級fec_next_hop信息指向第二級fec_next_hop信息,而將出端口標識和第一級encap_db表項的索引攜帶在第二級fec_next_hop信息中,此時,第一級fec_next_hop信息中可以提供20比特的保留位用于攜帶附加信息。
另外,現(xiàn)有的第一級encap_db表項和第二級encap_db表項中也可以提供20比特的保留位用于攜帶附加信息。
在實際實施過程中,附加信息的具體值可以由用戶進行配置,本申請實施例中對此不做限定。在本申請實施例中,可以在第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中的任意一個中攜帶附加信息,也可以這三者中的任意兩個中攜帶附加信息,或者還可以在這三者中均攜帶附加信息。
基于此,本申請實施例的標簽封裝方法中包括:確定待轉(zhuǎn)發(fā)報文對應(yīng)的第一級fec_next_hop信息、以及與第一級fec_next_hop信息級聯(lián)的第二級fec_next_hop信息,其中,第二級fec_next_hop信息中包含出端口標識和第一級encap_db表項的索引;通過第二級fec_next_hop信息,查找第一級encap_db表項、以及與第一級encap_db表項級聯(lián)的第二級encap_db表項;從第一級fec_next_hop信息、第一級encap_db表項、以及第二級encap_db表項中獲取附加信息和原有標簽值,得到一個以上附加信息和一個以上原有標簽值,其中,第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中的一個或兩個以上包含附加信息,第一級encap_db表項和第二級encap_db表項中包含原有標簽值;將攜帶原有標簽值的原有標簽封裝到待轉(zhuǎn)發(fā)報文中得到標準標簽封裝報文;將每個附加信息作為一個新增標簽的標簽值封裝到標準標簽封裝報文中,得到擴展標簽封裝報文。
下面以一個具體實例對上述標簽封裝方法進行詳細說明。標準轉(zhuǎn)發(fā)芯片的內(nèi)部功能可以分為:固定邏輯、可配置邏輯、以及可編程邏輯。在現(xiàn)有技術(shù)中,由固定邏輯和可配置邏輯來完成標簽封裝過程,可編程邏輯無需參與該過程。本申請實施例中,為了能夠在第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中的一個或多個中攜帶附加信息,并且,后續(xù),能夠?qū)⒚總€附加信息作為一個新增標簽的標簽值封裝到標準標簽封裝報文中,可以通過可配置邏輯和可編程邏輯實現(xiàn)以下3點:
(1)通過可配置邏輯實現(xiàn)fec_next_hop信息的級聯(lián),第一級fec_next_hop信息中包括:20比特的附加信息和第二級fec_next_hop信息的索引;第二級fec_next_hop信息中包括:出端口標識和第一級encap_db表項的索引。
(2)通過可配置邏輯,在第一級encap_db表項和第二級encap_db表項中分別攜帶20比特的附加信息,這樣,每一級encap_db表項中除了攜帶原有標簽值外,還可以攜帶附加信息。
(3)通過可編程邏輯,可以將每個附加信息作為一個新增標簽的標簽值封裝到標準標簽封裝報文中,其中,標準標簽封裝報文是按照現(xiàn)有技術(shù)封裝得到的報文,標準標簽封裝報文中最多攜帶4層原有標簽。
下面以第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中均包含附加信息為例進行說明。
如圖1所示,本申請實施例的轉(zhuǎn)發(fā)芯片執(zhí)行的標簽封裝方法包括以下步驟:
步驟s101,確定待轉(zhuǎn)發(fā)報文對應(yīng)的第一級fec_next_hop信息、以及與第一級fec_next_hop信息級聯(lián)的第二級fec_next_hop信息;
其中,第一級fec_next_hop信息中包括:20比特的附加信息1000和第二級fec_next_hop信息的索引index2_2;第二級fec_next_hop信息中包括:出端口標識port1和第一級encap_db表項的索引index3_1。
具體的,如圖2所示,當待轉(zhuǎn)發(fā)報文是ip報文時,根據(jù)待轉(zhuǎn)發(fā)報文的目的ip地址,在fib(forwardinginformationbase,轉(zhuǎn)發(fā)信息庫)表中查找第一級fec_next_hop信息的索引index2_1,通過該索引index2_1查找第一級fec_next_hop信息;通過第一級fec_next_hop信息中包含的第二級fec_next_hop信息的索引index2_2,查找第二級fec_next_hop信息。
或者,如圖3所示,當待轉(zhuǎn)發(fā)報文是標簽封裝報文(例如,mpls報文)時,根據(jù)待轉(zhuǎn)發(fā)報文中攜帶的標簽,在lfib(labelforwardinginformationbase,標簽轉(zhuǎn)發(fā)信息庫)表中查找第一級fec_next_hop信息的索引index2_1,通過該索引index2_1查找第一級fec_next_hop信息;通過第一級fec_next_hop信息中包含的第二級fec_next_hop信息的索引index2_2,查找第二級fec_next_hop信息。
步驟s102,通過第二級fec_next_hop信息,查找第一級encap_db表項、以及與第一級encap_db表項級聯(lián)的第二級encap_db表項;
具體的,如圖4所示,從第二級fec_next_hop信息中獲取第一級encap_db表項的索引index3_1,通過該索引index3_1查找第一級encap_db表項,其中,第一級encap_db表項中包括:第二級encap_db表項的索引index3_2、2個原有標簽值100和200、以及20比特的附加信息2000;通過該索引index3_2查找第二級encap_db表項,其中,第二級encap_db表項中包括:2個原有標簽值300和400、以及20比特的附加信息3000。
步驟s103,從第一級fec_next_hop信息、第一級encap_db表項和第二級encap_db表項中獲取附加信息和原有標簽值,得到3個附加信息1000、2000、3000,以及4個原有標簽值100、200、300、400。
步驟s104,將攜帶有原有標簽值的原有標簽封裝到待轉(zhuǎn)發(fā)報文中,得到標準標簽封裝報文;
具體的,針對獲取到的4個原有標簽值中的每個標簽值,將攜帶有該原有標簽值的原有標簽封裝到待轉(zhuǎn)發(fā)報文中,具體的封裝過程同現(xiàn)有技術(shù),這里不再詳述。標簽的封裝格式如圖5所示:
label字段:用于攜帶標簽值,該字段的長度為20比特。
tc(trafficclass,流量等級)字段:又稱為exp(experimental)字段,該字段的長度為3比特,用于進行qos(qualityofservice,服務(wù)質(zhì)量)。
s字段:又稱為bos字段,該字段為標簽棧底標識位(bottom-of-stackindicator),字段長度為1比特。由于mpls支持多重標簽,即在報文中可以封裝多層標簽,形成標簽棧。由于標簽封裝在報文的鏈路層幀頭和網(wǎng)絡(luò)層報文頭之間,因此,靠近鏈路層幀頭的最外層標簽為棧頂標簽,靠近網(wǎng)絡(luò)層報文頭的最內(nèi)層標簽為棧底標簽。s位為1時表示該標簽為棧底標簽,s位為0時表示該標簽為非棧底標簽。
ttl(timetolive,生存時間)字段:該字段長度為8比特,該字段的含義與ip報文中的ttl意義相同,可以用來防止環(huán)路。
假設(shè),標準標簽封裝報文中的4個原有標簽中的標簽值,按照從內(nèi)層到外層的順序依次為:100、200、300、400,其中,100為最內(nèi)層的棧底標簽的標簽值。
在實際實施過程中,上述步驟s101至步驟s104具體可以由轉(zhuǎn)發(fā)芯片中的固定邏輯和可配置邏輯來執(zhí)行,在執(zhí)行步驟s103獲取附加信息和原有標簽值時,固定邏輯和可配置邏輯無法識別附加信息,即不知道附加信息是何種類型的信息,并且,在執(zhí)行步驟s104封裝原有標簽時無法將附加信息作為標簽值封裝到報文中。在執(zhí)行完步驟s104后,固定邏輯和可配置邏輯會將獲取到的3個附加信息1000、2000、3000攜帶在芯片內(nèi)部的邏輯轉(zhuǎn)發(fā)信息中,將該邏輯轉(zhuǎn)發(fā)信息和標準標簽封裝報文一起傳送給可編程邏輯。
其中,為了能夠讓可編程邏輯判斷出附加信息是第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中的哪一個攜帶的,還需要為每個附加信息設(shè)置對應(yīng)的標識,用于表示該附加信息屬于第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中的哪一個。
步驟s105,針對第一級fec_next_hop信息中包含的附加信息1000,生成標簽值為1000的第一新增標簽,將第一新增標簽作為最內(nèi)層的棧底標簽封裝到標準標簽封裝報文中;針對第一級encap_db表項中包含的附加信息2000,生成標簽值為2000的第二新增標簽,將第二新增標簽封裝到標準標簽封裝報文中的原有標簽的最外層;針對第二級encap_db表項中包含的附加信息3000,生成標簽值為3000的第三新增標簽,將第三新增標簽封裝到標準標簽封裝報文中的原有標簽的最外層。
可編程邏輯可以提供多條指令來靈活的對報文進行編輯,本申請實施例中利用可編程邏輯的上述特點,通過可編程邏輯執(zhí)行上述步驟s105。具體的,在步驟s105中,可編程邏輯在接收到邏輯轉(zhuǎn)發(fā)信息和標準標簽封裝報文后,會獲取標準標簽封裝報文中的棧底標簽中的tc值和s值,然后,按照以下三種情況進行新增標簽的封裝:
情況一:第一級fec_next_hop信息中包含附加信息1000
將標準標簽封裝報文中當前的棧底標簽(標簽值為100的原有標簽)中的s值置為0,此時,該標簽變?yōu)榉菞5讟撕灒簧蓸撕炛禐?000的第一新增標簽,并將第一新增標簽中的tc值和s值分別設(shè)置為獲取到的tc值和s值,將第一新增標簽中的s值置為1,表示第一新增標簽為棧底標簽;然后,將第一新增標簽插入到標準標簽封裝報文中原有標簽的最內(nèi)層,成為新的棧底標簽。
情況二:第一級encap_db表項中包含附加信息2000
生成標簽值為2000的第二新增標簽,并將第二新增標簽中的tc值和s值分別設(shè)置為獲取到的tc值和s值,將第二新增標簽中的s值置為0;然后,將第二新增標簽插入到標準標簽封裝報文中的原有標簽的最外層。
情況三:第二級encap_db表項中包含附加信息3000
生成標簽值為3000的第三新增標簽,并將第三新增標簽中的tc值和s值分別設(shè)置為獲取到的tc值和s值,將第三新增標簽中的s值置為0;然后,將第三新增標簽插入到標準標簽封裝報文中的原有標簽的最外層。
在實際實施過程中,由于不同的原有標簽中的tc值相同,ttl值也相同,因此,在封裝新增標簽時,可以獲取標準標簽封裝報文中的棧底標簽(原有標簽)中的tc值和ttc值,作為新增標簽中的tc值和ttc值;也可以獲取其它原有標簽中的tc值和ttc值,本申請實施例對此不做限定。可見,擴展標簽封裝報文中的原有標簽與新增標簽中的tc值相等,且ttl值也相等。
另外,攜帶附加信息2000的第二新增標簽和攜帶附加信息3000的第三新增標簽,均需要插入到原有標簽的最外層,這兩個新增標簽之間可以不限定內(nèi)外層關(guān)系,也就是說,第二新增標簽可以在第三新增標簽的內(nèi)層或外層。
如果第二新增標簽位于第三新增標簽的內(nèi)層,此時,擴展標簽封裝報文中封裝有7層標簽,這7層標簽中的標簽值按照從內(nèi)層到外層的順序依次為:1000、100、200、300、400、2000、3000,如圖6所示??梢?,通過本申請實施例的方法,可以在報文中封裝最多7層的標簽。
與前述標簽封裝方法的實施例相對應(yīng),本申請還提供了標簽封裝裝置的實施例,該裝置應(yīng)用于標簽交換轉(zhuǎn)發(fā)設(shè)備中的轉(zhuǎn)發(fā)芯片上。
請參考圖7,本申請實施例的標簽封裝裝置中包括:查找單元701、獲取單元702和封裝單元703,其中:
查找單元701,用于確定待轉(zhuǎn)發(fā)報文對應(yīng)的第一級fec_next_hop信息、以及與第一級fec_next_hop信息級聯(lián)的第二級fec_next_hop信息,其中,第二級fec_next_hop信息中包含出端口標識和第一級encap_db表項的索引;通過第二級fec_next_hop信息,查找第一級encap_db表項、以及與第一級encap_db表項級聯(lián)的第二級encap_db表項;
獲取單元702,用于從第一級fec_next_hop信息、第一級encap_db表項、以及第二級encap_db表項中獲取附加信息和原有標簽值,得到一個以上附加信息和一個以上原有標簽值,其中,第一級fec_next_hop信息、第一級encap_db表項、第二級encap_db表項中的一個或兩個以上包含附加信息,第一級encap_db表項和第二級encap_db表項中包含原有標簽值;
封裝單元703,用于將攜帶原有標簽值的原有標簽封裝到待轉(zhuǎn)發(fā)報文中得到標準標簽封裝報文;將每個附加信息作為一個新增標簽的標簽值封裝到標準標簽封裝報文中,得到擴展標簽封裝報文。
其中,第一級fec_next_hop信息中的保留比特位用于攜帶附加信息;
第一級encap_db表項中的保留比特位用于攜帶附加信息;
第二級encap_db表項中的保留比特位用于攜帶附加信息。
其中,封裝單元703具體用于通過以下方式將每個附加信息作為一個新增標簽的標簽值封裝到標準標簽封裝報文中:
若第一級fec_next_hop信息中包含附加信息,則生成標簽值為該附加信息的第一新增標簽,將第一新增標簽作為最內(nèi)層的棧底標簽封裝到標準標簽封裝報文中;
若第一級encap_db表項中包含附加信息,則生成標簽值為該附加信息的第二新增標簽,將第二新增標簽封裝到標準標簽封裝報文中的原有標簽的最外層;
若第二級encap_db表項中包含附加信息,則生成標簽值為該附加信息的第三新增標簽,將第三新增標簽封裝到標準標簽封裝報文中的原有標簽的最外層。
其中,在擴展標簽封裝報文中,新增標簽中的tc值與原有標簽中的tc值相等,且新增標簽中的ttl值與原有標簽中的ttl值相等。
其中,原有標簽的數(shù)量范圍在1至4之間,新增標簽的數(shù)量范圍在1至3之間。
上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應(yīng)于方法實施例,所以相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本申請方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本申請保護的范圍之內(nèi)。