一種報(bào)文轉(zhuǎn)發(fā)方法及設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù),特別是一種報(bào)文轉(zhuǎn)發(fā)方法及設(shè)備。
【背景技術(shù)】
[0002] Openflow是一種新型的網(wǎng)絡(luò)交換模型,主要解決現(xiàn)有網(wǎng)絡(luò)中部署業(yè)務(wù)時(shí)面臨的 種種瓶頸,其核心思想就是軟件設(shè)計(jì)網(wǎng)絡(luò)(Software Defined Network, SDN)。SDN是指一 個(gè)新的網(wǎng)絡(luò)生態(tài)系統(tǒng),Openflow則是實(shí)現(xiàn)SDN的一種開(kāi)放協(xié)議標(biāo)準(zhǔn),其實(shí)現(xiàn)方式就是將現(xiàn) 有的完全由交換機(jī)、路由器控制的數(shù)據(jù)包轉(zhuǎn)發(fā)過(guò)程,轉(zhuǎn)化為由Openflow交換機(jī)和控制器 (Controller)分別完成的獨(dú)立過(guò)程。OpenFlow交換機(jī)在本地維護(hù)一個(gè)與傳統(tǒng)交換機(jī)上的 轉(zhuǎn)發(fā)表不同的流表(Flow Table),如果要轉(zhuǎn)發(fā)的數(shù)據(jù)包在流表中有對(duì)應(yīng)項(xiàng),則直接進(jìn)行快 速轉(zhuǎn)發(fā),如果流表中沒(méi)有此項(xiàng),數(shù)據(jù)包就會(huì)被發(fā)送到控制器進(jìn)行傳輸路徑的確認(rèn),再根據(jù)控 制器下發(fā)結(jié)果進(jìn)行轉(zhuǎn)發(fā)。
[0003] 其中,F(xiàn)low Table并非是指IP五元組,事實(shí)上OpenFlowL 0定義了包括端口號(hào), 虛擬局域網(wǎng)(Virtual Local Area Network,VLAN), L2/L3/L4 信息的 10 個(gè)關(guān)鍵字,如圖 1 所示,每個(gè)字段都可以通配,比如運(yùn)營(yíng)商只需要根據(jù)目的IP進(jìn)行路由,那么流表中就可以 只有目的IP字段是有效的,其他全為通配。
[0004] 目前流量根據(jù)流表轉(zhuǎn)發(fā)的技術(shù)有2種:
[0005] (I) Openf low交換機(jī)中的流表采用固定長(zhǎng)度的Flow Table來(lái)記錄,對(duì)于 OpenFlowL 0而言,F(xiàn)low Table的匹配長(zhǎng)度長(zhǎng)達(dá)252bit,而一般的Ipv4路由信息庫(kù)(RIB, Route Information Base)三態(tài)內(nèi)容尋址存儲(chǔ)器(TCAM,Ternary Content Addressable Memory)匹配字段長(zhǎng)度只有60-80個(gè)比特,開(kāi)銷增加了 3倍以上,而對(duì)于路由器的線卡而言, TCAM成本占了約20%-30%,功耗也占了很大一部分。
[0006] (2)0penFlowl. 1設(shè)計(jì)了多級(jí)流表來(lái)減少Flow Table的開(kāi)銷,將圖1中的10個(gè)關(guān) 鍵字進(jìn)行分別提取,分解成多個(gè)小表項(xiàng),然后查詢的時(shí)候進(jìn)行關(guān)聯(lián),如圖2所示,Openflow 交換機(jī)上存在兩級(jí)流表,第一級(jí)流表匹配的關(guān)鍵字是MAC+VLAN (圖1中SA為源MAC,DA為 目的MAC),第二級(jí)流表匹配的關(guān)鍵字是IP。
[0007] 從現(xiàn)有技術(shù)可以看出來(lái)上述2種流表查詢技術(shù)都存在缺點(diǎn):
[0008] 第一種流表查詢的缺點(diǎn)是TCAM存儲(chǔ)成本過(guò)高。
[0009] 第二種流表查詢的缺點(diǎn)是流水式架構(gòu)使得匹配的時(shí)延增加,存儲(chǔ)成本仍舊過(guò)高。
【發(fā)明內(nèi)容】
[0010] 有鑒于此,本發(fā)明提出了一種報(bào)文轉(zhuǎn)發(fā)方法及設(shè)備,有效解決了現(xiàn)有技術(shù)中進(jìn)行 流表查詢時(shí)TCAM存儲(chǔ)成本過(guò)高、流水式架構(gòu)使得匹配的時(shí)延增加的缺陷。本發(fā)明提出的技 術(shù)方案是:
[0011] 一種報(bào)文轉(zhuǎn)發(fā)方法,應(yīng)用于Openflow網(wǎng)絡(luò),所述Openflow網(wǎng)絡(luò)包括控制器 Controller與至少兩個(gè)節(jié)點(diǎn),各節(jié)點(diǎn)為Openflow交換機(jī),該方法包括:
[0012] 首節(jié)點(diǎn)接收直連設(shè)備發(fā)送的原始數(shù)據(jù)報(bào)文;
[0013] 所述首節(jié)點(diǎn)根據(jù)關(guān)鍵字遍歷其上的流表,查詢與所述原始數(shù)據(jù)報(bào)文匹配的第一轉(zhuǎn) 發(fā)標(biāo)識(shí)流表項(xiàng),所述第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)記錄有關(guān)鍵字與轉(zhuǎn)發(fā)標(biāo)識(shí)的映射關(guān)系;
[0014] 將所述匹配的第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)中的轉(zhuǎn)發(fā)標(biāo)識(shí)嵌套在所述原始數(shù)據(jù)報(bào)文中,生 成嵌套數(shù)據(jù)報(bào)文,并將所述嵌套數(shù)據(jù)報(bào)文發(fā)送給所述Openflow網(wǎng)絡(luò)中的下一跳節(jié)點(diǎn),使所 述下一跳節(jié)點(diǎn)在其上的流表中,根據(jù)轉(zhuǎn)發(fā)標(biāo)識(shí)查詢與所述嵌套數(shù)據(jù)報(bào)文匹配的第二轉(zhuǎn)發(fā)標(biāo) 識(shí)流表項(xiàng),對(duì)所述嵌套數(shù)據(jù)報(bào)文進(jìn)行處理,所述第二轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)記錄有轉(zhuǎn)發(fā)標(biāo)識(shí)。
[0015] 上述方案中,該方法進(jìn)一步包括:
[0016] 若所述首節(jié)點(diǎn)根據(jù)關(guān)鍵字遍歷其上的流表,未查詢到與所述原始數(shù)據(jù)報(bào)文匹配的 第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng),僅查詢到與所述原始數(shù)據(jù)報(bào)文匹配的普通關(guān)鍵字流表,則根據(jù)所述 匹配的普通關(guān)鍵字流表項(xiàng)轉(zhuǎn)發(fā)所述原始數(shù)據(jù)報(bào)文給所述Openflow網(wǎng)絡(luò)中的下一跳節(jié)點(diǎn), 并發(fā)送所述原始數(shù)據(jù)報(bào)文至控制器;
[0017] 所述首節(jié)點(diǎn)接收所述控制器返回的第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)并保存,其中,所述第一 轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)為所述控制器接收到所述原始數(shù)據(jù)報(bào)文后,為所述原始數(shù)據(jù)報(bào)文的關(guān)鍵字 設(shè)定一個(gè)轉(zhuǎn)發(fā)標(biāo)識(shí),并將所述轉(zhuǎn)發(fā)標(biāo)識(shí)與原始數(shù)據(jù)報(bào)文的關(guān)鍵字關(guān)聯(lián),生成第一轉(zhuǎn)發(fā)標(biāo)識(shí) 流表項(xiàng)下發(fā)給所述首節(jié)點(diǎn)。
[0018] 上述方案中,該方法進(jìn)一步包括:
[0019] 若所述首節(jié)點(diǎn)根據(jù)關(guān)鍵字遍歷其上的流表,未查詢到與所述原始數(shù)據(jù)報(bào)文匹配的 第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng),且未查詢到與所述原始數(shù)據(jù)報(bào)文匹配的普通關(guān)鍵字流表項(xiàng),則將所 述原始數(shù)據(jù)發(fā)送至控制器;
[0020] 所述首節(jié)點(diǎn)接收所述控制器返回的第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)并保存,其中,所述第一 轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)為所述控制器接收到所述原始數(shù)據(jù)報(bào)文后,為所述原始數(shù)據(jù)報(bào)文的關(guān)鍵字 設(shè)定一個(gè)轉(zhuǎn)發(fā)標(biāo)識(shí),并將所述轉(zhuǎn)發(fā)標(biāo)識(shí)與原始數(shù)據(jù)報(bào)文的關(guān)鍵字關(guān)聯(lián),生成第一轉(zhuǎn)發(fā)標(biāo)識(shí) 流表項(xiàng)下發(fā)給所述首節(jié)點(diǎn)。
[0021] 上述方案中,所述控制器接收到所述原始數(shù)據(jù)報(bào)文后,為所述原始數(shù)據(jù)報(bào)文的關(guān) 鍵字設(shè)定一個(gè)轉(zhuǎn)發(fā)標(biāo)識(shí),具體為:所述控制器接收到所述原始數(shù)據(jù)報(bào)文后,在轉(zhuǎn)發(fā)標(biāo)識(shí)列表 中為所述數(shù)據(jù)報(bào)文的關(guān)鍵字分配一個(gè)空閑的轉(zhuǎn)發(fā)標(biāo)識(shí);
[0022] 所述方法進(jìn)一步包括:
[0023] 若所述控制器沒(méi)有空閑轉(zhuǎn)發(fā)標(biāo)識(shí)分配給所述原始數(shù)據(jù)報(bào)文的關(guān)鍵字,則所述首節(jié) 點(diǎn)接收所述控制器發(fā)送的與所述原始數(shù)據(jù)報(bào)文關(guān)鍵字匹配的普通關(guān)鍵字流表項(xiàng)并保存,所 述普通關(guān)鍵字流表項(xiàng)記錄有關(guān)鍵字。
[0024] 一種報(bào)文轉(zhuǎn)發(fā)方法,應(yīng)用于Openflow網(wǎng)絡(luò),所述Openflow網(wǎng)絡(luò)包括控制器 Controller與至少兩個(gè)節(jié)點(diǎn),各節(jié)點(diǎn)為Openflow交換機(jī),該方法包括:
[0025] 所述控制器接收首節(jié)點(diǎn)發(fā)送的原始數(shù)據(jù)報(bào)文;
[0026] 所述控制器計(jì)算所述原始數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)路徑,并為所述原始數(shù)據(jù)報(bào)文的關(guān)鍵字 設(shè)定一個(gè)轉(zhuǎn)發(fā)標(biāo)識(shí);
[0027] 根據(jù)所述轉(zhuǎn)發(fā)路徑確定轉(zhuǎn)發(fā)所述數(shù)據(jù)報(bào)文經(jīng)過(guò)的各節(jié)點(diǎn),為各節(jié)點(diǎn)生成對(duì)應(yīng)的流 表項(xiàng)并下發(fā)到對(duì)應(yīng)的各節(jié)點(diǎn),以指導(dǎo)報(bào)文的轉(zhuǎn)發(fā),其中,所述首節(jié)點(diǎn)的流表項(xiàng)為第一轉(zhuǎn)發(fā)標(biāo) 識(shí)流表項(xiàng),所述第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)記錄有關(guān)鍵字與轉(zhuǎn)發(fā)標(biāo)識(shí)的映射關(guān)系,其它節(jié)點(diǎn)的流 表項(xiàng)為第二轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng),所述第二轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)記錄有轉(zhuǎn)發(fā)標(biāo)識(shí)。
[0028] 上述方案中,所述控制器為所述原始數(shù)據(jù)報(bào)文的關(guān)鍵字設(shè)定一個(gè)轉(zhuǎn)發(fā)標(biāo)識(shí),具體 為:所述控制器在轉(zhuǎn)發(fā)標(biāo)識(shí)列表中為所述數(shù)據(jù)報(bào)文的關(guān)鍵字分配一個(gè)空閑的轉(zhuǎn)發(fā)標(biāo)識(shí);
[0029] 該方法進(jìn)一步包括:
[0030] 若所述控制器沒(méi)有空閑轉(zhuǎn)發(fā)標(biāo)識(shí)分配給所述原始數(shù)據(jù)報(bào)文的關(guān)鍵字,則所述控制 器根據(jù)轉(zhuǎn)發(fā)路徑確定轉(zhuǎn)發(fā)所述數(shù)據(jù)報(bào)文經(jīng)過(guò)的各節(jié)點(diǎn),為各節(jié)點(diǎn)生成對(duì)應(yīng)的普通關(guān)鍵字流 表項(xiàng)并下發(fā)到對(duì)應(yīng)的各節(jié)點(diǎn),以指導(dǎo)報(bào)文的轉(zhuǎn)發(fā),所述普通關(guān)鍵字流表項(xiàng)記錄有關(guān)鍵字。
[0031] 一種Openflow交換機(jī)設(shè)備,應(yīng)用于Openflow網(wǎng)絡(luò),所述Openflow網(wǎng)絡(luò)包括控制 器Controller與至少兩個(gè)節(jié)點(diǎn),各節(jié)點(diǎn)為Openflow交換機(jī),該設(shè)備包括:
[0032] 報(bào)文收發(fā)模塊,用于接收直連設(shè)備發(fā)送的原始數(shù)據(jù)報(bào)文;
[0033] 查詢模塊,用于根據(jù)關(guān)鍵字遍歷流表,查詢與所述原始數(shù)據(jù)報(bào)文匹配的第一轉(zhuǎn)發(fā) 標(biāo)識(shí)流表項(xiàng),所述第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)記錄有關(guān)鍵字與轉(zhuǎn)發(fā)標(biāo)識(shí)的映射關(guān)系;
[0034] 轉(zhuǎn)發(fā)標(biāo)識(shí)嵌套模塊,用于將所述匹配的第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)中的轉(zhuǎn)發(fā)標(biāo)識(shí)嵌套在 所述原始數(shù)據(jù)報(bào)文中,生成嵌套數(shù)據(jù)報(bào)文;
[0035] 所述報(bào)文收發(fā)模塊,還用于將嵌套數(shù)據(jù)報(bào)文發(fā)送給所述Openflow網(wǎng)絡(luò)中的下一 跳交換機(jī),使所述下一跳節(jié)點(diǎn)在其上的流表中,根據(jù)轉(zhuǎn)發(fā)標(biāo)識(shí)查詢與所述嵌套數(shù)據(jù)報(bào)文匹 配的第二轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng),對(duì)所述嵌套數(shù)據(jù)報(bào)文進(jìn)行處理,所述第二轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)記錄 有轉(zhuǎn)發(fā)標(biāo)識(shí)。
[0036] 上述方案中,
[0037] 若所述查詢模塊根據(jù)關(guān)鍵字遍歷流表,未查詢到與所述原始數(shù)據(jù)報(bào)文匹配的第一 轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng),僅查詢到與所述原始數(shù)據(jù)報(bào)文匹配的普通關(guān)鍵字流表,則報(bào)文收發(fā)模塊 還用于,根據(jù)所述匹配的普通關(guān)鍵字流表項(xiàng)轉(zhuǎn)發(fā)所述原始數(shù)據(jù)報(bào)文給所述Openflow網(wǎng)絡(luò) 中的下一跳節(jié)點(diǎn),并發(fā)送所述原始數(shù)據(jù)報(bào)文至控制器;
[0038] 接收所述控制器返回的第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng),其中,所述第一轉(zhuǎn)發(fā)標(biāo)識(shí)流表項(xiàng)為 所述控制器接收到所述原始數(shù)據(jù)報(bào)文后,為所述原始數(shù)據(jù)報(bào)文的關(guān)鍵字設(shè)定一個(gè)轉(zhuǎn)發(fā)標(biāo) 識(shí),并將所述轉(zhuǎn)發(fā)標(biāo)