本發(fā)明涉及通信領(lǐng)域,特別涉及一種數(shù)據(jù)包傳輸方法、控制器及交換機。
背景技術(shù):
SDN(Software Defined Network,軟件定義網(wǎng)絡(luò))是一個新興的網(wǎng)絡(luò)架構(gòu),在SDN網(wǎng)絡(luò)中,控制面和數(shù)據(jù)面相分離,并且控制面是可直接編程的。在之前的網(wǎng)絡(luò)架構(gòu)中,網(wǎng)絡(luò)設(shè)備通常是同時具有控制功能和轉(zhuǎn)發(fā)功能。而在SDN中,將網(wǎng)絡(luò)設(shè)備控制面與數(shù)據(jù)面分離開來,從而實現(xiàn)了對網(wǎng)絡(luò)流量的靈活控制。
在SDN網(wǎng)絡(luò)中,每個交換機都會根據(jù)流表來轉(zhuǎn)發(fā)數(shù)據(jù)包。例如,交換機在接到一個數(shù)據(jù)包時,會在本地查找與該數(shù)據(jù)包對應(yīng)的流表,并根據(jù)查找到的流表來轉(zhuǎn)發(fā)該數(shù)據(jù)包,而如果交換機在本地沒有查找到與該數(shù)據(jù)包對應(yīng)的流表,則交換機會向控制器請求與該數(shù)據(jù)包對應(yīng)的流表,控制器在接到交換機的請求時,會計算該數(shù)據(jù)包的傳輸路徑,控制器確定該傳輸路徑中的交換機,并向每個交換機發(fā)送該交換機所對應(yīng)的流表,交換機按照接收到的流表轉(zhuǎn)發(fā)該數(shù)據(jù)包。
從上可知,如果交換機向控制器請求多個數(shù)據(jù)包的流表,則會向控制器發(fā)送大量的請求消息,而控制器也就需要構(gòu)造大量的流表并分別下發(fā),會極大地增加控制器的負擔。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種數(shù)據(jù)包傳輸方法、控制器及交換機,用于解決SDN中控制器負擔較重的技術(shù)問題。
第一方面,提供一種數(shù)據(jù)包傳輸方法,包括:
交換機接收第一消息,所述第一消息中包含第一數(shù)據(jù)包;
所述交換機從所述第一數(shù)據(jù)包中獲取所述第一數(shù)據(jù)包的傳輸路徑,所述傳輸路徑包括第一路由信息和第二路由信息,其中,所述第一路由信息是用于所述交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息,所述第二路由信息是用于其他交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息;
所述交換機根據(jù)所述第一數(shù)據(jù)包和所述第二路由信息構(gòu)造第二數(shù)據(jù)包;
所述交換機根據(jù)所述第一路由信息向所述其他交換機轉(zhuǎn)發(fā)所述第二數(shù)據(jù)包。
結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述第一數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的選項字段中。
結(jié)合第一方面,在第一方面的第二種可能的實現(xiàn)方式中,所述第一數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的數(shù)據(jù)字段中,以及所述傳輸路徑的總長度攜帶在所述第一數(shù)據(jù)包的選項字段中。
結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,所述第一路由信息包括所述交換機的標識信息,以及所述交換機的出端口信息。
結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,所述第一路由信息包括所述交換機的出端口信息。
結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式至第四種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第一方面的第五種可能的實現(xiàn)方式中,在所述交換機從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑之后,還包括:
所述交換機根據(jù)所述第一路由信息構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表。
第二方面,提供一種數(shù)據(jù)包傳輸方法,包括:
控制器接收交換機發(fā)送的第二消息,所述第二消息中包含待傳輸?shù)牡谌龜?shù)據(jù)包;
所述控制器確定所述第三數(shù)據(jù)包的傳輸路徑,并將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,形成第四數(shù)據(jù)包;
所述控制器根據(jù)所述第四數(shù)據(jù)包構(gòu)造第三消息,并向所述交換機發(fā)送所述第三消息。
結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述第三數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;所述將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,包括:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的選項字段中。
結(jié)合第二方面,在第二方面的第二種可能的實現(xiàn)方式中,所述第三數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;所述將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的選項字段中,包括:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的數(shù)據(jù)字段中,以及,將所述各交換機的路由信息的總長度添加到所述第三數(shù)據(jù)包的選項字段中。
結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,所述交換機的路由信息包括交換機的標識信息,以及交換機的出端口信息。
結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述交換機的路由信息包括交換機的出端口信息。
第三方面,提供一種交換機,包括:
接收模塊,用于接收第一消息,所述第一消息中包含第一數(shù)據(jù)包;
獲取模塊,用于從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑,所述傳輸路徑包括第一路由信息和第二路由信息,其中,所述第一路由信息是用于所述交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息,所述第二路由信息 是用于其他交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息;
第一構(gòu)造模塊,用于根據(jù)所述第一數(shù)據(jù)包和所述第二路由信息構(gòu)造第二數(shù)據(jù)包;
發(fā)送模塊,用于根據(jù)所述第一路由信息向所述其他交換機轉(zhuǎn)發(fā)所述第二數(shù)據(jù)包。
結(jié)合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,所述第一數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的選項字段中。
結(jié)合第三方面,在第三方面的第二種可能的實現(xiàn)方式中,所述第一數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的數(shù)據(jù)字段中,以及所述傳輸路徑的總長度攜帶在所述第一數(shù)據(jù)包的選項字段中。
結(jié)合第三方面或第三方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第三方面的第三種可能的實現(xiàn)方式中,所述第一路由信息包括所述交換機的標識信息,以及所述交換機的出端口信息。
結(jié)合第三方面或第三方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第三方面的第四種可能的實現(xiàn)方式中,所述第一路由信息包括所述交換機的出端口信息。
結(jié)合第三方面或第三方面的第一種可能的實現(xiàn)方式至第四種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第三方面的第五種可能的實現(xiàn)方式中,所述交換機還包括第二構(gòu)造模塊,用于:
在所述獲取模塊從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑之后,根據(jù)所述第一路由信息構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表。
第四方面,提供一種控制器,包括:
接收模塊,用于接收交換機發(fā)送的第二消息,所述第二消息中包含待傳輸?shù)牡谌龜?shù)據(jù)包;
確定模塊,用于確定所述第三數(shù)據(jù)包的傳輸路徑,并將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,形成第四數(shù)據(jù)包;
構(gòu)造模塊,用于根據(jù)所述第四數(shù)據(jù)包構(gòu)造第三消息,并向所述交換機發(fā)送所述第三消息。
結(jié)合第四方面,在第四方面的第一種可能的實現(xiàn)方式中,所述第三數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;所述確定模塊用于將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,具體為:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的選項字段中。
結(jié)合第四方面,在第四方面的第二種可能的實現(xiàn)方式中,所述第三數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;所述確定模塊用于將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,具體為:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的數(shù)據(jù)字段中,以及,將所述各交換機的路由信息的總長度添加到所述第三數(shù)據(jù)包的選項字段中。
結(jié)合第四方面或第四方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第四方面的第三種可能的實現(xiàn)方式中,所述交換機的路由信息包括交換機的標識信息,以及交換機的出端口信息。
結(jié)合第四方面或第四方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第四方面的第四種可能的實現(xiàn)方式中,所述交換機的路由信息包括交換機的出端口信息。
第五方面,提供一種交換機,包括存儲器、處理器和收發(fā)器,其中,所述存儲器和所述收發(fā)器均與所述處理器相連;
所述存儲器,用于存儲指令;
所述收發(fā)器,用于接收第一消息,所述第一消息中包含第一數(shù)據(jù)包;
所述處理器,用于執(zhí)行所述指令,從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑,所述傳輸路徑包括第一路由信息和第二路由信息,其中,所述第一路由信息是用于所述交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息, 所述第二路由信息是用于其他交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息;根據(jù)所述第一數(shù)據(jù)包和所述第二路由信息構(gòu)造第二數(shù)據(jù)包;及,根據(jù)所述第一路由信息,通過所述收發(fā)器向所述其他交換機轉(zhuǎn)發(fā)所述第二數(shù)據(jù)包。
結(jié)合第五方面,在第五方面的第一種可能的實現(xiàn)方式中,所述第一數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的選項字段中。
結(jié)合第五方面,在第五方面的第二種可能的實現(xiàn)方式中,所述第一數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的數(shù)據(jù)字段中,以及所述傳輸路徑的總長度攜帶在所述第一數(shù)據(jù)包的選項字段中。
結(jié)合第五方面或第五方面的第一種可能的實現(xiàn)方式或二種可能的實現(xiàn)方式,在第五方面的第三種可能的實現(xiàn)方式中,所述第一路由信息包括所述交換機的標識信息,以及所述交換機的出端口信息。
結(jié)合第五方面或第五方面的第一種可能的實現(xiàn)方式或二種可能的實現(xiàn)方式,在第五方面的第四種可能的實現(xiàn)方式中,所述第一路由信息包括所述交換機的出端口信息。
結(jié)合第五方面或第五方面的第一種可能的實現(xiàn)方式至第四種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第五方面的第五種可能的實現(xiàn)方式中,所述處理器還用于:
在從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑之后,根據(jù)所述第一路由信息構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表。
第六方面,提供一種控制器,包括存儲器、處理器和收發(fā)器,其中,所述存儲器和所述收發(fā)器分別與所述處理器相連;
所述存儲器,用于存儲指令;
所述收發(fā)器,用于接收交換機發(fā)送的第二消息,所述第二消息中包含待傳輸?shù)牡谌龜?shù)據(jù)包;
所述處理器,用于執(zhí)行所述指令,確定所述第三數(shù)據(jù)包的傳輸路徑,并將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,形成第四數(shù)據(jù)包;以及,根據(jù)所述第四數(shù)據(jù)包構(gòu)造第三消息,并通過所述收發(fā)器向所述交換機發(fā)送所述第三消息。
結(jié)合第六方面,在第六方面的第一種可能的實現(xiàn)方式中,所述第三數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;所述處理器用于將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,具體為:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的選項字段中。
結(jié)合第六方面,在第六方面的第二種可能的實現(xiàn)方式中,所述第三數(shù)據(jù)包為網(wǎng)際協(xié)議數(shù)據(jù)包;所述處理器用于將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,具體為:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的數(shù)據(jù)字段中,以及將所述各交換機的路由信息的總長度添加到所述第三數(shù)據(jù)包的選項字段中。
結(jié)合第六方面或第六方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第六方面的第三種可能的實現(xiàn)方式中,所述交換機的路由信息包括交換機的標識信息,以及交換機的出端口信息。
結(jié)合第六方面或第六方面的第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第六方面的第四種可能的實現(xiàn)方式中,所述交換機的路由信息包括交換機的出端口信息。
本發(fā)明實施例中,交換機在接收到攜帶第一數(shù)據(jù)包的第一消息時,可以從中獲取第一數(shù)據(jù)包的傳輸路徑,交換機可以根據(jù)其中的第一路由信息構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需的流表,并將剩余的路由信息繼續(xù)傳輸給下一個交換機,這樣,傳輸路徑所涉及到的各交換機在接到該數(shù)據(jù)包時,都可以根據(jù)該數(shù)據(jù)包生成對應(yīng)的流表,從而控制器只需向一個交換機傳輸數(shù)據(jù)包,無需向每個交換機下發(fā)流表,極大地減少了控制器所需要傳輸?shù)臄?shù)據(jù)量,并且控制器也無需生成多個流表,而只是將用于生成各流表的信息添加在該數(shù)據(jù)包中發(fā)送即可,減輕了控 制器的負擔。各個交換機在接收到該數(shù)據(jù)包時可以根據(jù)該數(shù)據(jù)包生成對應(yīng)的流表,并且,該數(shù)據(jù)包本身所攜帶的數(shù)據(jù)也得到了同步傳輸,相對于現(xiàn)有技術(shù)中要先下發(fā)流表然后再傳輸數(shù)據(jù)的方案來說,本發(fā)明實施例中的方案也提高了傳輸效率以及減少了需要傳輸?shù)臄?shù)據(jù)包的數(shù)量,節(jié)省系統(tǒng)資源。
另外,交換機和控制器之間的通信通道,即Secure Channel(安全通道),的帶寬相對有限,一旦出現(xiàn)交換機大量上報請求、控制器大量下發(fā)流表等的大量數(shù)據(jù)流傳輸情況,則Secure Channel的可用帶寬可能會急速減小,甚至Secure Channel可能會被阻塞,造成Secure Channel鏈路中斷,甚至完全癱瘓,影響到正常數(shù)據(jù)的傳輸。在采用本發(fā)明實施例中的技術(shù)方案后,控制器只需向一個交換機傳輸數(shù)據(jù)包,無需向每個交換機下發(fā)流表,減少了需要傳輸?shù)臄?shù)據(jù)量,也就節(jié)省了Secure Channel的帶寬資源,盡量避免Secure Channel出現(xiàn)阻塞現(xiàn)象,保證數(shù)據(jù)的正常傳輸。
附圖說明
圖1為本發(fā)明實施例中一種數(shù)據(jù)包傳輸方法的流程圖;
圖2為本發(fā)明實施例中流表的結(jié)構(gòu)示意圖;
圖3為本發(fā)明實施例中另一種數(shù)據(jù)包傳輸方法的流程圖;
圖4為本發(fā)明實施例中packet_out消息的結(jié)構(gòu)示意圖;
圖5為本發(fā)明實施例中交換機的結(jié)構(gòu)框圖;
圖6為本發(fā)明實施例中控制器的結(jié)構(gòu)框圖;
圖7為本發(fā)明實施例中交換機的結(jié)構(gòu)示意圖;
圖8為本發(fā)明實施例中控制器的結(jié)構(gòu)示意圖。
具體實施方式
在控制面和數(shù)據(jù)面分離的SDN中,設(shè)備(本發(fā)明實施例中也可以稱為SDN設(shè)備)分為Controller(控制器)和轉(zhuǎn)發(fā)設(shè)備(或稱為交換設(shè)備),控制器和交換設(shè)備之間的關(guān)系可以是一對多的關(guān)系,即一個控制器可以控制多個交換設(shè) 備??刂破鞯闹饕δ苁菍粨Q設(shè)備進行網(wǎng)絡(luò)資源的分配和調(diào)度、協(xié)議控制、拓撲管理、策略制定、表項下發(fā)等等,交換設(shè)備主要負責(zé)根據(jù)控制器通過南向接口下發(fā)的控制信息對報文進行轉(zhuǎn)發(fā),以及執(zhí)行一些其他的任務(wù)。
本發(fā)明實施例中,交換設(shè)備例如可以是指交換機(Switch),或者也可以是指其他具有報文轉(zhuǎn)發(fā)功能的設(shè)備。本發(fā)明實施例中以交換設(shè)備是交換機為例進行說明。
目前,openflow(一種網(wǎng)絡(luò)交換模型)協(xié)議是SDN中比較通用的協(xié)議,在SDN中,交換機是根據(jù)openflow協(xié)議格式的流表來轉(zhuǎn)發(fā)數(shù)據(jù)包。本發(fā)明實施例中的流表是以openflow協(xié)議格式的流表為例。當然,若SDN也支持其他協(xié)議格式的流表,則本發(fā)明實施例中的流表也可以是指其他格式的流表,只要流表的格式是SDN支持的協(xié)議格式即可。
本發(fā)明實施例中,一般是一個數(shù)據(jù)流對應(yīng)一個流表,不同的數(shù)據(jù)流可能分別對應(yīng)于不同的流表,或者也可能對應(yīng)于同一個流表。一個數(shù)據(jù)流中可以包括一個或多個數(shù)據(jù)包。
另外,由于IP(Internet Protocol,網(wǎng)際協(xié)議)在網(wǎng)絡(luò)中比較通用,因此本發(fā)明實施例中的數(shù)據(jù)包均是以IP數(shù)據(jù)包為例。當然,本發(fā)明實施例中的數(shù)據(jù)包也可以是其他協(xié)議格式的數(shù)據(jù)包,只要是SDN支持的協(xié)議格式即可。
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
另外,本文中術(shù)語“系統(tǒng)”和“網(wǎng)絡(luò)”在本文中常被可互換使用。本文中術(shù)語“和/或”,僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。另外,本文中字符“/”,如無特殊說明,一般表示前后關(guān)聯(lián)對象是一種“或” 的關(guān)系。
下面結(jié)合說明書附圖對本發(fā)明實施例作進一步詳細描述。
請參見圖1,基于同一發(fā)明構(gòu)思,本發(fā)明實施例提供一種數(shù)據(jù)包傳輸方法,該方法的主要流程描述如下。
步驟101:交換機接收第一消息,所述第一消息中包含第一數(shù)據(jù)包;
本發(fā)明實施例中的交換機可以是第一數(shù)據(jù)包的傳輸路徑中的任一交換機。
本發(fā)明實施例中,該交換機接收的第一消息可以來自于控制器,或者也可以來自于另一個交換機。
另外,本發(fā)明實施例中,如果該交換機接收的第一消息來自于控制器,那么第一消息可以是攜帶有第一數(shù)據(jù)包的pack_out消息,而如果該交換機接收的第一消息來自于其他交換機,那么第一消息可以就是第一數(shù)據(jù)包本身。
步驟102:所述交換機從所述第一數(shù)據(jù)包中獲取所述第一數(shù)據(jù)包的傳輸路徑,所述傳輸路徑包括第一路由信息和第二路由信息,其中,所述第一路由信息是用于所述交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息,所述第二路由信息是用于其他交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息;
步驟103:所述交換機根據(jù)所述第一數(shù)據(jù)包和所述第二路由信息構(gòu)造第二數(shù)據(jù)包;
步驟104:所述交換機根據(jù)所述第一路由信息向所述其他交換機轉(zhuǎn)發(fā)所述第二數(shù)據(jù)包。
可選的,本發(fā)明實施例中,該交換機接收到第一消息后,即步驟101之后,若第一消息是packet_out消息,即第一消息是控制器發(fā)送的,則該交換機需要首先剝?nèi)acket_out包頭,然后獲取第一數(shù)據(jù)包;而若第一消息就是第一數(shù)據(jù)包本身,即第一消息是另一個交換機發(fā)送的,則該交換機可以直接獲得第一數(shù)據(jù)包。
可選的,本發(fā)明實施例中,以攜帶交換機的路由信息的數(shù)據(jù)包須是IP數(shù)據(jù)包為例,則該交換機在獲得第一數(shù)據(jù)包后,可以判斷第一數(shù)據(jù)包是否是IP 數(shù)據(jù)包,若第一數(shù)據(jù)包是IP數(shù)據(jù)包,則按照本發(fā)明的處理流程進行后續(xù)處理,若第一數(shù)據(jù)包不是IP數(shù)據(jù)包,則該交換機按照現(xiàn)有技術(shù)中的方式處理第一數(shù)據(jù)包。
可選的,本發(fā)明實施例中,若確定第一數(shù)據(jù)包是IP數(shù)據(jù)包,則該交換機可以判斷第一數(shù)據(jù)包的選項字段是否復(fù)用,即判斷第一數(shù)據(jù)包中是否攜帶有交換機的路由信息。具體的,交換機根據(jù)接收到的第一數(shù)據(jù)包的包頭的長度就可以確定第一數(shù)據(jù)包的選項字段中是否攜帶有信息,即,交換機根據(jù)接收到的第一數(shù)據(jù)包的包頭的長度就可以確定是否復(fù)用了第一數(shù)據(jù)包的選項字段,即可以確定第一數(shù)據(jù)包的選項字段中是否攜帶有交換機的路由信息,或者可以確定第一數(shù)據(jù)包的選項字段中是否攜帶有交換機的路由信息的總長度,而相應(yīng)的,若第一數(shù)據(jù)包的選項字段中攜帶有交換機的路由信息的總長度,自然第一數(shù)據(jù)包的數(shù)據(jù)字段中也就攜帶有交換機的路由信息。
如果確定第一數(shù)據(jù)包的選項字段已復(fù)用,則按照本發(fā)明中的流程進行后續(xù)處理,如果確定第一數(shù)據(jù)包的選項字段沒有被復(fù)用,則該交換機按照現(xiàn)有技術(shù)中的方式處理第一數(shù)據(jù)包。
本發(fā)明實施例中,第一數(shù)據(jù)包中攜帶的是第一數(shù)據(jù)包的傳輸路徑所涉及到的至少一個交換機的路由信息,這里的至少一個交換機,指的是該交換機,以及第一數(shù)據(jù)包的傳輸路徑上位于該交換機之后的所有交換機。實際上該交換機從第一數(shù)據(jù)包中獲取的是至少一個交換機的路由信息,因為至少一個交換機的路由信息表明的是第一數(shù)據(jù)包的傳輸路徑,因此也可以認為該交換機從第一數(shù)據(jù)包中獲取的是第一數(shù)據(jù)包的傳輸路徑。
在第一數(shù)據(jù)包攜帶的至少一個交換機的路由信息中,包括該交換機的路由信息,以及還包括第一數(shù)據(jù)包的傳輸路徑上位于該交換機之后的所有交換機的路由信息,因此,本發(fā)明實施例中,將第一數(shù)據(jù)包攜帶的該交換機的路由信息稱為第一路由信息,將第一數(shù)據(jù)包攜帶的、第一數(shù)據(jù)包的傳輸路徑上位于該交換機之后的所有交換機的路由信息稱為第二路由信息。自然,第一路由信息的 用途為:該交換機根據(jù)第一路由信息構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需的流表,第二路由信息的用途為:其他交換機根據(jù)第二路由信息構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需的流表。
需要說明的是,在第一數(shù)據(jù)包中,第一路由信息和第二路由信息可以是一個整體,只是本發(fā)明實施例中為了方便描述而將其分別命名。
可選的,本發(fā)明實施例中,第一數(shù)據(jù)包為IP數(shù)據(jù)包;
傳輸路徑攜帶在第一數(shù)據(jù)包的選項字段中;或
傳輸路徑攜帶在第一數(shù)據(jù)包的數(shù)據(jù)字段中,以及傳輸路徑的總長度攜帶在第一數(shù)據(jù)包的選項字段中。
這里的傳輸路徑,指的是如前所述的第一數(shù)據(jù)包中攜帶的至少一個交換機的路由信息。
即,控制器可以將第一數(shù)據(jù)包的傳輸路徑所涉及到的各交換機的路由信息攜帶在第一數(shù)據(jù)包的選項字段中,或者,控制器也可以將第一數(shù)據(jù)包的傳輸路徑所涉及到的各交換機的路由信息攜帶在第一數(shù)據(jù)包的數(shù)據(jù)字段中,而將第一數(shù)據(jù)包的傳輸路徑所涉及到的各交換機的路由信息的總長度攜帶在第一數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,
第一路由信息包括該交換機的標識信息,以及該交換機的出端口信息;或
第一路由信息包括該交換機的出端口信息。
同樣的,第二路由信息可以分別包括第一數(shù)據(jù)包的傳輸路徑上位于該交換機之后的各交換機的標識信息、以及各交換機的出端口信息,或者,第二路由信息也可以包括第一數(shù)據(jù)包的傳輸路徑上位于該交換機之后的各交換機的出端口信息。
即,交換機的路由信息可以包括交換機的標識信息,以及交換機的出端口信息;或,交換機的路由信息包括交換機的出端口信息。
可選的,本發(fā)明實施例中,在交換機從第一數(shù)據(jù)包中獲取第一數(shù)據(jù)包的傳 輸路徑之后,即在步驟102之后,還包括:
交換機根據(jù)第一路由信息構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需要的流表。
即,該交換機從第一數(shù)據(jù)包中獲取的第一路由信息只是用于構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需的流表的信息,交換機還需要根據(jù)獲取的第一路由信息來構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需的流表。
請參見圖2,為本發(fā)明實施例中交換機構(gòu)造的流表的一種可能的格式,圖2中是以圖1所述的交換機構(gòu)造的流表為例。
圖2中,INGRESS PORT字段表示數(shù)據(jù)包的入端口。
IN_PHY PORT字段表示數(shù)據(jù)包的物理入端口。
MAC DST字段表示目的MAC(Media Access Control,媒體訪問控制)地址。
MAC SRC字段表示源MAC地址。
ETH TYPE字段表示以太網(wǎng)類型。
VLAN ID字段表示虛擬網(wǎng)絡(luò)ID。
IP SRC字段表示源IP地址。
IP DST字段表示目的IP地址。
TCP SPORT字段表示源TCP端口號。
TCP DPORT字段表示目的TCP端口號。
其中,INGRESS PORT字段、IN_PHY PORT字段、MAC DST字段、MAC SRC字段、ETH TYPE字段、VLAN ID字段、IP SRC字段、IP DST字段、TCP SPORT字段、以及TCP DPORT字段,均屬于Match Fields(匹配區(qū)域)。
Couters字段表示計數(shù)器。
Instructions(命令)中包括actions字段,actions字段攜帶的是在傳輸相應(yīng)數(shù)據(jù)包的過程中,本交換機的出端口的信息。例如圖2為Output port1(輸出端口1),即表明,該交換機在傳輸?shù)谝粩?shù)據(jù)包時,出端口是端口1。
另外,流表中還有一些字段,例如Match Fields中還包括一些字段,在圖 2中省略了,具體的流表格式可參照現(xiàn)有技術(shù)。
其中,Match Fields中包括的各個字段所需的信息,交換機可以從數(shù)據(jù)包的包頭中獲取,這里的數(shù)據(jù)包指的是IP數(shù)據(jù)包,或者是其他協(xié)議格式的數(shù)據(jù)包,而不是packet_out消息。即,若交換機接收到的是packet_out消息,則可以從packet_out消息攜帶的數(shù)據(jù)包的包頭中獲取Match Fields中包括的各個字段所需的信息,若交換機接收到的就是數(shù)據(jù)包,則可以直接從接收的數(shù)據(jù)包的包頭中獲取Match Fields中包括的各個字段所需的信息。actions字段所需的信息,交換機可以從數(shù)據(jù)包的選項字段中獲取,或者也可以從數(shù)據(jù)包的數(shù)據(jù)字段中獲取,同樣,這里的數(shù)據(jù)包也是指IP數(shù)據(jù)包,或者也可以是指其他協(xié)議格式的數(shù)據(jù)包。
即,對于一個交換機來說,可以根據(jù)數(shù)據(jù)包的包頭、以及數(shù)據(jù)包中攜帶的該交換機的路由信息來生成與該數(shù)據(jù)包對應(yīng)的流表,例如對于本發(fā)明實施例中的交換機來說,可以根據(jù)第一數(shù)據(jù)包的包頭、以及第一數(shù)據(jù)包中攜帶的第一路由信息來生成與第一數(shù)據(jù)包對應(yīng)的流表。這里所說的與第一數(shù)據(jù)包對應(yīng),是指該交換機會根據(jù)該交換機生成的流表來轉(zhuǎn)發(fā)第一數(shù)據(jù)包,自然的,第一數(shù)據(jù)包的傳輸路徑所涉及到的每個交換機都需生成與第一數(shù)據(jù)包對應(yīng)的流表,而這些流表可能是不同的。
可選的,本發(fā)明實施例中,若交換機的路由信息包括交換機的標識信息,以及交換機的出端口信息;
則,在交換機根據(jù)第一路由信息構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需要的流表之前,還包括:
交換機判斷第一數(shù)據(jù)包攜帶的傳輸路徑中的首個交換機的路由信息是否是該交換機的路由信息;
交換機根據(jù)第一路由信息構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需要的流表,包括:
若第一數(shù)據(jù)包攜帶的傳輸路徑中的首個交換機的路由信息是該交換機的路由信息,則該交換機根據(jù)第一數(shù)據(jù)包中攜帶的第一路由信息,構(gòu)造用于該交 換機轉(zhuǎn)發(fā)第一數(shù)據(jù)包的流表。
如果交換機的路由信息包括交換機的標識信息,以及交換機的出端口信息,那么在一個交換機接收到攜帶有交換機的路由信息的數(shù)據(jù)包時,可以先判斷該數(shù)據(jù)包中攜帶的至少一個交換機的路由信息中的首個交換機的路由信息是否是本交換機的路由信息,如果是的話,表明該數(shù)據(jù)包是按照傳輸路徑正常傳輸?shù)模梢赃M行本發(fā)明中的后續(xù)處理,即根據(jù)該數(shù)據(jù)包中攜帶的本交換機的路由信息,生成用于本交換機轉(zhuǎn)發(fā)該數(shù)據(jù)包的流表,而如果不是的話,表明該數(shù)據(jù)包在傳輸過程中出現(xiàn)了路徑錯誤,則交換機可能對該數(shù)據(jù)包進行其他處理,例如可能會丟棄該數(shù)據(jù)包。
交換機在構(gòu)造與第一數(shù)據(jù)包對應(yīng)的流表后,要從第一數(shù)據(jù)包攜帶的交換機的路由信息中刪除該交換機的路由信息,即從第一數(shù)據(jù)包攜帶的傳輸路徑中刪除第一路由信息,然后該交換機重新計算刪除第一路由信息之后的第一數(shù)據(jù)包的包頭,并根據(jù)計算得到的包頭重新封裝刪除第一路由信息之后的第一數(shù)據(jù)包,得到第二數(shù)據(jù)包,即,第二數(shù)據(jù)包是根據(jù)第一數(shù)據(jù)包和第二路由信息得到的。第二數(shù)據(jù)包與第一數(shù)據(jù)包的區(qū)別就在于,數(shù)據(jù)包的包頭不同,以及數(shù)據(jù)包中攜帶的交換機的路由信息不同,而兩個數(shù)據(jù)包中所攜帶的原始數(shù)據(jù)是相同的。這里的原始數(shù)據(jù),指的是一個數(shù)據(jù)包本來要傳輸?shù)臄?shù)據(jù)。
交換機在得到第二數(shù)據(jù)包后,按照第一路由信息,或者說按照該交換機構(gòu)造的轉(zhuǎn)發(fā)第一數(shù)據(jù)包的流表,將第二數(shù)據(jù)包轉(zhuǎn)發(fā)給第二數(shù)據(jù)包的傳輸路徑上的、該交換機的下一跳交換機,具體的,下一跳交換機的路由信息應(yīng)該是第二數(shù)據(jù)包中攜帶的第二路由信息中的首個交換機的路由信息。
下一跳交換機在接收到第二數(shù)據(jù)包后,會進行與該交換機同樣的處理,這樣,直到將一個數(shù)據(jù)包傳輸?shù)侥康墓?jié)點為止。
例如,一個數(shù)據(jù)包1傳輸?shù)浇粨Q機n時(n為正整數(shù)),交換機n按照與圖1流程中所述的交換機同樣的處理方式對數(shù)據(jù)包1處理完畢,得到數(shù)據(jù)包2,此時若在數(shù)據(jù)包2中已經(jīng)沒有攜帶交換機的路由信息了,則表明數(shù)據(jù)包2已經(jīng) 傳輸?shù)搅俗詈笠惶粨Q機,則交換機n會直接將數(shù)據(jù)包2發(fā)送給目的節(jié)點,傳輸結(jié)束。至此,數(shù)據(jù)包2的傳輸路徑上所涉及到的每個交換機都依次接收到了該數(shù)據(jù)包,也都分別生成了與該數(shù)據(jù)包對應(yīng)的流表,相當于各交換機在一邊生成流表的同時也完成了對數(shù)據(jù)包的傳輸,無需像現(xiàn)有技術(shù)中那樣,先由控制器生成多個流表,然后控制器將每個流表分別下發(fā)給對應(yīng)的交換機,然后再開始按照流表傳輸數(shù)據(jù)包,顯然,采用本發(fā)明實施例中的技術(shù)方案后,極大地縮短了傳輸數(shù)據(jù)包所需的時間,提高了傳輸效率,也極大地減少了需要傳輸?shù)臄?shù)據(jù)包的數(shù)量,盡量避免了通信通道的擁塞,保證通信的正常進行??刂破鳠o需生成多個流表,減小了控制器的工作負荷。
請參見圖3,基于同一發(fā)明構(gòu)思,本發(fā)明實施例提供另一種數(shù)據(jù)包傳輸方法,該方法是與圖1流程所述的方法相對應(yīng)的控制器側(cè)的實施過程,所述方法的主要流程描述如下。
步驟301:控制器接收交換機發(fā)送的第二消息,所述第二消息中包含待傳輸?shù)牡谌龜?shù)據(jù)包。
例如,終端設(shè)備在有需要傳輸?shù)臄?shù)據(jù)包時,會將該數(shù)據(jù)包發(fā)送給為該終端設(shè)備服務(wù)的交換機,例如將該數(shù)據(jù)包稱為第三數(shù)據(jù)包。該交換機收到第三數(shù)據(jù)包時,會在本地查找與該第三數(shù)據(jù)包所對應(yīng)的流表,若查找到了與第三數(shù)據(jù)包對應(yīng)的流表,則該交換機會按照現(xiàn)有技術(shù)中的方式來處理第三數(shù)據(jù)包,即按照查找到的流表來對第三數(shù)據(jù)包進行轉(zhuǎn)發(fā)等操作。
如果該交換機在本地沒有查找到與第三數(shù)據(jù)包對應(yīng)的流表,即該交換機沒有存儲與第三數(shù)據(jù)包對應(yīng)的流表,則該交換機會將該第三數(shù)據(jù)包發(fā)送給控制器,以向控制器請求第三數(shù)據(jù)包所對應(yīng)的流表,這樣,控制器就會接收到交換機發(fā)送的第三數(shù)據(jù)包。這個交換機,可以是指控制器所控制的交換機中的任一個交換機。
具體的,交換機可以將第三數(shù)據(jù)包封裝在packet_in(一種消息格式)消息中上報給控制器,本發(fā)明實施例中將攜帶有第三數(shù)據(jù)包的packet_in消息稱為 第二消息。即,控制器接收的packet_in消息中攜帶有第三數(shù)據(jù)包。此時,packet_in消息用于向控制器請求獲得第三數(shù)據(jù)包對應(yīng)的流表。
步驟302:所述控制器確定所述第三數(shù)據(jù)包的傳輸路徑,并將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,形成第四數(shù)據(jù)包;
步驟303:所述控制器根據(jù)所述第四數(shù)據(jù)包構(gòu)造第三消息,并向所述交換機發(fā)送所述第三消息。
控制器在接收到packet_in消息后,從中解析出第三數(shù)據(jù)包,計算第三數(shù)據(jù)包的傳輸路徑,在計算出第三數(shù)據(jù)包的傳輸路徑后,控制器自然也就知道該傳輸路徑所涉及到的每個交換機,以及知道每個交換機的路由信息。
可選的,本發(fā)明實施例中,以攜帶交換機的路由信息的數(shù)據(jù)包須是IP數(shù)據(jù)包為例,則在控制器確定第三數(shù)據(jù)包的傳輸路徑之后,控制器還可以判斷該第三數(shù)據(jù)包是否是IP數(shù)據(jù)包,如果是的話,再繼續(xù)本發(fā)明后續(xù)的流程,如果不是的話,則控制器會按照現(xiàn)有技術(shù)中的方式處理第三數(shù)據(jù)包。
另外,本發(fā)明實施例中,在控制器判斷該第三數(shù)據(jù)包是否是IP數(shù)據(jù)包之后,如果確定第三數(shù)據(jù)包是IP數(shù)據(jù)包,則可以繼續(xù)判斷第三數(shù)據(jù)包在其傳輸路徑中所涉及到的操作是否只有轉(zhuǎn)發(fā)操作,如果是的話,則繼續(xù)本發(fā)明后續(xù)的流程,如果不是的話,則控制器會按照現(xiàn)有技術(shù)中的方式處理第三數(shù)據(jù)包。因為一個數(shù)據(jù)包的傳輸路徑所涉及到的各交換機可能對該數(shù)據(jù)包進行多種不同的操作,例如可能都是轉(zhuǎn)發(fā)操作,或者可能有一些交換機會對數(shù)據(jù)包進行數(shù)據(jù)修改操作,或者有一些交換機可能會丟棄數(shù)據(jù)包,等等,而若要應(yīng)用本發(fā)明實施例中的方法,需要每個交換機都只能對該數(shù)據(jù)包進行轉(zhuǎn)發(fā)操作。
若第三數(shù)據(jù)包在其傳輸路徑中所涉及到的操作只有轉(zhuǎn)發(fā)操作,則,控制器可以修改第三數(shù)據(jù)包,即將該傳輸路徑所涉及到的每個交換機的路由信息均添加到第三數(shù)據(jù)包中,其中,對第三數(shù)據(jù)包里面原本攜帶的數(shù)據(jù)不作改動,相當于增加了第三數(shù)據(jù)包的數(shù)據(jù)量。本發(fā)明實施例中將修改后的第三數(shù)據(jù)包稱為第 四數(shù)據(jù)包。
可選的,本發(fā)明實施例中,第三數(shù)據(jù)包為IP數(shù)據(jù)包;將傳輸路徑所涉及到的各交換機的路由信息均添加到第三數(shù)據(jù)包中,包括:
將各交換機的路由信息添加到第三數(shù)據(jù)包的選項字段中;或
將各交換機的路由信息添加到第三數(shù)據(jù)包的數(shù)據(jù)字段中,以及將各交換機的路由信息的總長度添加到第三數(shù)據(jù)包的選項字段中。
即,交換機的路由信息可以攜帶在第三數(shù)據(jù)包的選項字段中,因為選項字段一般都是備用字段,將交換機的路由信息添加在選項字段中,不會影響到第三數(shù)據(jù)包所攜帶的正常數(shù)據(jù)。
或者,交換機的路由信息也可以攜帶在第三數(shù)據(jù)包的數(shù)據(jù)字段中,只將各交換機的路由信息的總長度添加到第三數(shù)據(jù)包的選項字段中。因為對于IP數(shù)據(jù)包來說,選項字段的長度一般都會受到IP包頭的限制,即選項字段的長度是有限的,所能夠攜帶的路由信息也就是有限的。如果一個數(shù)據(jù)包的傳輸路徑比較長,所涉及到的交換機比較多,那么優(yōu)選的,可以將各交換機的路由信息添加到該數(shù)據(jù)包的數(shù)據(jù)字段中,這樣可以攜帶的信息量比較多。
本發(fā)明實施例中,若要將交換機的路由信息攜帶在第三數(shù)據(jù)包的數(shù)據(jù)字段中,則第三數(shù)據(jù)包的數(shù)據(jù)字段中會攜帶交換機的路由信息和第三數(shù)據(jù)包中的原始數(shù)據(jù),具體交換機的路由信息是攜帶在第三數(shù)據(jù)包的數(shù)據(jù)字段中的哪個位置,可以根據(jù)協(xié)議或標準而定,或者也可以由控制器和交換機事先商定,本發(fā)明不作限制。
一般對于IP數(shù)據(jù)包來說,如果沒有復(fù)用選項字段,即如果選項字段沒有攜帶任何內(nèi)容,或者數(shù)據(jù)包中沒有包括選項字段,那么IP數(shù)據(jù)包的包頭的長度是固定的,而如果選項字段中攜帶有信息,則IP數(shù)據(jù)包的包頭的長度會比固定長度要長,因此,交換機根據(jù)接收到的數(shù)據(jù)包的包頭的長度就可以確定該數(shù)據(jù)包的選項字段中是否攜帶有信息,即,交換機根據(jù)接收到的數(shù)據(jù)包的包頭的長度就可以確定是否復(fù)用了該數(shù)據(jù)包的選項字段,即可以確定該數(shù)據(jù)包的選 項字段中是否攜帶有交換機的路由信息,或者可以確定該數(shù)據(jù)包的選項字段中是否攜帶有交換機的路由信息的總長度,而相應(yīng)的,若該數(shù)據(jù)包的選項字段中攜帶有交換機的路由信息的總長度,自然該數(shù)據(jù)包的數(shù)據(jù)字段中也就攜帶有交換機的路由信息。
可選的,本發(fā)明實施例中,
交換機的路由信息包括交換機的標識信息,以及交換機的出端口信息;或
交換機的路由信息包括交換機的出端口信息。
本發(fā)明實施例中,交換機的標識信息可以是指交換機的身份信息,例如是交換機的ID(Identity,身份標識號),或者也可以是指其他的、能夠用于唯一標識一個交換機的信息。
在將第三數(shù)據(jù)包修改完畢后,控制器自然需要重新計算修改后的第三數(shù)據(jù)包的包頭,例如第三數(shù)據(jù)包為IP數(shù)據(jù)包,則控制器相當于重新計算IP數(shù)據(jù)包的包頭,具體的計算過程可參考現(xiàn)有技術(shù)。在計算完畢后,控制器根據(jù)重新計算的包頭重新封裝修改后的第三數(shù)據(jù)包,得到第四數(shù)據(jù)包。
控制器在得到第四數(shù)據(jù)包后,一般需要將第四數(shù)據(jù)包進一步封裝,以將其封裝為packet_out消息,本發(fā)明實施例中將攜帶了第四數(shù)據(jù)包的packet_out消息稱為第三消息。因為packet_in消息和packet_out消息是控制器和交換機之間比較常用的消息格式,因此在傳輸數(shù)據(jù)包時一般也要將數(shù)據(jù)包進行封裝后傳輸。
具體的,packet_out消息的格式可以參考圖4,圖4以交換機的路由信息包括交換機的身份信息以及交換機的出端口信息為例。
圖4左邊的表格表示各交換機的路由信息,例如左邊的表格中,每個格子代表32位,交換機的身份信息(表格中以Dpid ID表示)為64位,則在左邊的表格中,一個交換機的身份信息就需要占用兩個格子,而交換機的出端口信息(表格中以Port(端口)表示)為32位,則在左邊的表格中,一個交換機的出端口信息只需要占用一個格子。另外,在交換機的路由信息中可以只包括 交換機的出端口信息,而不包括交換機的入端口信息,這是因為交換機之間的連接方式是固定的,上一個交換機的出端口確定后,下一個交換機的入端口自然是唯一確定的,因此為了盡量減少第三數(shù)據(jù)包的數(shù)據(jù)量,可以無需攜帶交換機的入端口信息。
圖4中右邊上面的三個字段表示packet_out(一種消息格式)消息的格式。
packet_out消息包括packet_out包頭、攜帶數(shù)據(jù)包(Data)、以及Actions(動作)(Output Port2(出端口2))三個字段。
packet_out包頭一般包括有header(頭)字段、buffer id(緩沖ID)字段、in_port(輸入端口)字段、actions_len(動作長度)字段、以及pad(填充)字段等。其中,header中攜帶的是openflow包頭,buffer id攜帶的是由datapath(數(shù)據(jù)路徑)分配的ID,in_port字段攜帶的是數(shù)據(jù)包的輸入端口信息,actions_len字段攜帶的是action的長度信息(一般用字節(jié)(byte)數(shù)表示),pad為填充字段。
攜帶數(shù)據(jù)包部分,這里以攜帶的是第四數(shù)據(jù)包為例,第四數(shù)據(jù)包的格式可參考圖4中右邊的下半部分。
Actions部分一般攜帶的是數(shù)據(jù)包執(zhí)行的action列表,例如可以用于指示該packet_out消息從控制器的哪個端口輸出,例如圖4中就以從控制器的出端口2輸出為例。
圖4右邊的下半部分,就是第四數(shù)據(jù)包的格式。在第四數(shù)據(jù)包中,
版本字段的用于記錄數(shù)據(jù)報文具體符合哪一個版本的協(xié)議。
長度字段的用于指明第四數(shù)據(jù)包的包頭的長度
TOS(type of service,服務(wù)類型)字段一共包含8個比特,前3個比特表示優(yōu)先級,第4個比特表示要求有更低的時延,第5個比特表示要求有更高的吞吐量,第6個比特表示要求更高的可靠性,第7個比特表示選擇價格更低廉的路由,最后一個比特暫時未用。
總長度字段包括第四數(shù)據(jù)包的包頭的長度和攜帶的數(shù)據(jù)的長度,最大長度 為216=65536字節(jié)。
左邊的分段標識字段的用于數(shù)據(jù)分段,一個數(shù)據(jù)包在傳輸過程中可能分成若干段,分段標識字段中攜帶的分段標識符可以用于區(qū)分某個分段屬于某個報文,一個數(shù)據(jù)包的所有分段都具有相同的分段標識符。
中間的標識字段共包括三個比特,第一個比特?zé)o意義,第二個比特位稱為DF,當DF為1時表示不分段,當DF為0時表示允許分段。第三個比特位稱為MF,表示后面還有一個分段。且,除了最后一個分段之外,其他所有分段的MF均置為1。
片偏移字段的用于指明此分段在當前數(shù)據(jù)包中的位置。
生存周期字段是用于限定分段生存期的計數(shù)器,當該字段為0時則該分段被拋棄。時間單位為秒。
協(xié)議字段的用于指明傳輸此數(shù)據(jù)包的過程屬于哪一種傳送過程。
頭部校驗和字段攜帶的是校驗頭部的校驗和。
源地址字段中攜帶的是第四數(shù)據(jù)包的源地址,也即第三數(shù)據(jù)包的源地址。
目的地址字段中攜帶的是第四數(shù)據(jù)包要發(fā)送到的目的地址,也即第三數(shù)據(jù)包的目的地址。
圖4是以將交換機的路由信息均攜帶在選項字段中為例,即,圖4中左邊表格所示的部分均要添加在右邊的選項字段中。
數(shù)據(jù)字段中攜帶的是第三數(shù)據(jù)包中原本攜帶的數(shù)據(jù)。
控制器在得到第二消息后,可以將第二消息下發(fā)給傳輸路徑中的第一個交換機。
在步驟301中介紹了,是由一個交換機(例如將其稱為交換機1)首先接收到第三數(shù)據(jù)包,交換機1由于在本地未查詢到與第三數(shù)據(jù)包對應(yīng)的流表,才將第三數(shù)據(jù)包發(fā)送給控制器,那么,控制器在計算第三數(shù)據(jù)包的傳輸路徑時,一般都會將該交換機1設(shè)置為第三數(shù)據(jù)包的傳輸路徑中的第一個交換機,即,控制器會將攜帶有第四數(shù)據(jù)包的packet_out消息下發(fā)給交換機1。
第四數(shù)據(jù)包會依次傳輸至第四數(shù)據(jù)包的傳輸路徑所對應(yīng)的每個交換機,相應(yīng)的交換機在收到第四數(shù)據(jù)包后,都會根據(jù)其中攜帶的自身的路由信息來生成相應(yīng)的、與第四數(shù)據(jù)包對應(yīng)的流表。這樣,無需控制器分別將流表下發(fā)給對應(yīng)的交換機,交換機都可以直接根據(jù)接收的數(shù)據(jù)包生成相應(yīng)的流表,減少了控制器的工作量,同時,控制器由于無需下發(fā)大量的流表,而只需下發(fā)一個數(shù)據(jù)包即可,極大地減少了需要傳輸?shù)臄?shù)據(jù)包的數(shù)量,盡量避免控制器與交換機之間的通信通道被阻塞,保證通信的正常進行。
本發(fā)明實施例中,若圖1流程中的交換機接收的第一消息來自于控制器,則如前所述的第一數(shù)據(jù)包與第四數(shù)據(jù)包為同一數(shù)據(jù)包,而若該交換機接收的第一消息來自于另一個交換機,則第一數(shù)據(jù)包與第四數(shù)據(jù)包嚴格來說不是同一數(shù)據(jù)包,但第一數(shù)據(jù)包和第四數(shù)據(jù)包中所攜帶的原始的數(shù)據(jù)是相同的,只是第一數(shù)據(jù)包和第四數(shù)據(jù)包中攜帶的交換機的路由信息可能不同。
以下結(jié)合附圖介紹本發(fā)明實施例中的設(shè)備。
請參見圖5,基于同一發(fā)明構(gòu)思,本發(fā)明實施例提供一種交換機,所述交換機可以是如前所述的交換機。所述交換機可以包括接收模塊501、獲取模塊502、第一構(gòu)造模塊503和發(fā)送模塊504。
接收模塊501,用于接收第一消息,所述第一消息中包含第一數(shù)據(jù)包;
獲取模塊502,用于從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑,所述傳輸路徑包括第一路由信息和第二路由信息,其中,所述第一路由信息是用于所述交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息,所述第二路由信息是用于其他交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息;
第一構(gòu)造模塊503,用于根據(jù)所述第一數(shù)據(jù)包和所述第二路由信息構(gòu)造第二數(shù)據(jù)包;
發(fā)送模塊504,用于根據(jù)所述第一路由信息向所述其他交換機轉(zhuǎn)發(fā)所述第二數(shù)據(jù)包。
可選的,本發(fā)明實施例中,所述第一數(shù)據(jù)包為IP數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,所述第一數(shù)據(jù)包為IP數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的數(shù)據(jù)字段中,以及所述傳輸路徑的總長度攜帶在所述第一數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,所述第一路由信息包括所述交換機的標識信息,以及所述交換機的出端口信息。
可選的,本發(fā)明實施例中,所述第一路由信息包括所述交換機的出端口信息。
可選的,本發(fā)明實施例中,所述交換機還包括第二構(gòu)造模塊,用于:
在獲取模塊502從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑之后,根據(jù)所述第一路由信息構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表。
請參見圖6,基于同一發(fā)明構(gòu)思,本發(fā)明實施例提供一種控制器,所述控制器可以包括接收模塊601、確定模塊602和構(gòu)造模塊603。
接收模塊601,用于接收交換機發(fā)送的第二消息,所述第二消息中包含待傳輸?shù)牡谌龜?shù)據(jù)包;
確定模塊602,用于確定所述第三數(shù)據(jù)包的傳輸路徑,并將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,形成第四數(shù)據(jù)包;
構(gòu)造模塊603,用于根據(jù)所述第四數(shù)據(jù)包構(gòu)造第三消息,并向所述交換機發(fā)送所述第三消息。
可選的,本發(fā)明實施例中,所述第三數(shù)據(jù)包為IP數(shù)據(jù)包;確定模塊602用于將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,具體為:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,所述第三數(shù)據(jù)包為IP數(shù)據(jù)包;確定模塊602用于將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù) 包中,具體為:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的數(shù)據(jù)字段中,以及,將所述各交換機的路由信息的總長度添加到所述第三數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,所述交換機的路由信息包括交換機的標識信息,以及交換機的出端口信息。
可選的,本發(fā)明實施例中,所述交換機的路由信息包括交換機的出端口信息。
請參見圖7,基于同一發(fā)明構(gòu)思,本發(fā)明實施例提供一種交換機,所述交換機可以是如前所述的交換機。所述交換機可以包括存儲器701、處理器702和收發(fā)器703。其中,存儲器701和收發(fā)器703分別與處理器702相連。收發(fā)器703可以是一個整體模塊,該模塊既可以發(fā)數(shù)據(jù)也可以接收數(shù)據(jù),或者,收發(fā)器703也可以包括接收器和發(fā)送器兩部分,對于收發(fā)器703具體的結(jié)構(gòu)本發(fā)明不作限制。
存儲器701,用于存儲處理器702執(zhí)行任務(wù)所需的指令;
收發(fā)器703,用于接收第一消息,所述第一消息中包含第一數(shù)據(jù)包;
處理器702,用于從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑,所述傳輸路徑包括第一路由信息和第二路由信息,其中,所述第一路由信息是用于所述交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息,所述第二路由信息是用于其他交換機構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表的信息;根據(jù)所述第一數(shù)據(jù)包和所述第二路由信息構(gòu)造第二數(shù)據(jù)包;及,根據(jù)所述第一路由信息,通過收發(fā)器703向所述其他交換機轉(zhuǎn)發(fā)所述第二數(shù)據(jù)包。
可選的,本發(fā)明實施例中,所述第一數(shù)據(jù)包為IP數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,所述第一數(shù)據(jù)包為IP數(shù)據(jù)包;
所述傳輸路徑攜帶在所述第一數(shù)據(jù)包的數(shù)據(jù)字段中,以及所述傳輸路徑的總長度攜帶在所述第一數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,所述第一路由信息包括所述交換機的標識信息,以及所述交換機的出端口信息。
可選的,本發(fā)明實施例中,所述第一路由信息包括所述交換機的出端口信息。
可選的,本發(fā)明實施例中,處理器702還用于:
在從所述第一數(shù)據(jù)包獲取所述第一數(shù)據(jù)包的傳輸路徑之后,根據(jù)所述第一路由信息構(gòu)造轉(zhuǎn)發(fā)所述第一數(shù)據(jù)包所需要的流表。
請參見圖8,基于同一發(fā)明構(gòu)思,本發(fā)明實施例提供一種控制器,所述控制器可以包括存儲器801、處理器802和收發(fā)器803,其中,存儲器801和收發(fā)器803分別與處理器802相連。收發(fā)器803可以是一個整體模塊,該模塊既可以發(fā)數(shù)據(jù)也可以接收數(shù)據(jù),或者,收發(fā)器803也可以包括接收器和發(fā)送器兩部分,對于收發(fā)器803具體的結(jié)構(gòu)本發(fā)明不作限制。
存儲器801,用于存儲處理器802執(zhí)行任務(wù)所需的指令;
收發(fā)器803,用于接收交換機發(fā)送的第二消息,所述第二消息中包含待傳輸?shù)牡谌龜?shù)據(jù)包;
處理器802,用于執(zhí)行所述指令,確定所述第三數(shù)據(jù)包的傳輸路徑,并將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,形成第四數(shù)據(jù)包;以及,根據(jù)所述第四數(shù)據(jù)包構(gòu)造第三消息,并通過收發(fā)器803向所述交換機發(fā)送所述第三消息。
可選的,本發(fā)明實施例中,所述第三數(shù)據(jù)包為IP數(shù)據(jù)包;處理器802用于將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,具體為:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,所述第三數(shù)據(jù)包為IP數(shù)據(jù)包;處理器802用于將所述傳輸路徑所涉及到的各交換機的路由信息均添加到所述第三數(shù)據(jù)包中,具體為:
將所述各交換機的路由信息添加到所述第三數(shù)據(jù)包的數(shù)據(jù)字段中,以及將所述各交換機的路由信息的總長度添加到所述第三數(shù)據(jù)包的選項字段中。
可選的,本發(fā)明實施例中,所述交換機的路由信息包括交換機的標識信息,以及交換機的出端口信息。
可選的,本發(fā)明實施例中,所述交換機的路由信息包括交換機的出端口信息。
本發(fā)明實施例中,交換機在接收到攜帶第一數(shù)據(jù)包的第一消息時,可以從中獲取第一數(shù)據(jù)包的傳輸路徑,交換機可以根據(jù)其中的第一路由信息構(gòu)造轉(zhuǎn)發(fā)第一數(shù)據(jù)包所需的流表,并將剩余的路由信息繼續(xù)傳輸給下一個交換機,這樣,該數(shù)據(jù)包的傳輸路徑上的各交換機在接到該數(shù)據(jù)包時都可以根據(jù)該數(shù)據(jù)包生成對應(yīng)的流表,從而控制器只需向一個交換機傳輸數(shù)據(jù)包,無需向每個交換機下發(fā)流表,極大地減少了控制器所需要傳輸?shù)臄?shù)據(jù)量,并且控制器也無需生成多個流表,而只是將用于生成各流表的信息添加在該數(shù)據(jù)包中發(fā)送即可,減輕了控制器的負擔。各個交換機在接收到該數(shù)據(jù)包時就可以根據(jù)該數(shù)據(jù)包生成對應(yīng)的流表,并且,該數(shù)據(jù)包本身所攜帶的數(shù)據(jù)也得到了同步傳輸,相對于現(xiàn)有技術(shù)中要先下發(fā)流表然后再傳輸數(shù)據(jù)的方案來說,本發(fā)明實施例中的方案也提高了傳輸效率以及減少了需要傳輸?shù)臄?shù)據(jù)包的數(shù)量,節(jié)省系統(tǒng)資源。
另外,交換機和控制器之間的通信通道,即Secure Channel,的帶寬相對有限,一旦出現(xiàn)交換機大量上報請求、控制器大量下發(fā)流表等的大量數(shù)據(jù)流傳輸情況,則Secure Channel的可用帶寬可能會急速減小,甚至Secure Channel可能會被阻塞,造成Secure Channel鏈路中斷,甚至完全癱瘓,影響到正常數(shù)據(jù)的傳輸。在采用本發(fā)明實施例中的技術(shù)方案后,控制器只需向一個交換機傳輸數(shù)據(jù)包,無需向每個交換機下發(fā)流表,減少了需要傳輸?shù)臄?shù)據(jù)量,也就節(jié)省了Secure Channel的帶寬資源,盡量避免Secure Channel出現(xiàn)阻塞現(xiàn)象,保證數(shù)據(jù)的正常傳輸。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,僅以上述 各功能單元的劃分進行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能單元完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能單元,以完成以上描述的全部或者部分功能。上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元或單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或processor(處理器)執(zhí)行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、ROM(Read-Only Memory,只讀存儲器)、RAM(Random Access Memory,隨機存取存儲器)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以對本申請的技術(shù)方案進行了詳細介紹,但以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想,不應(yīng)理解為對本發(fā)明的限制。本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。