Openflow協(xié)議通信流程解讀_第1頁
Openflow協(xié)議通信流程解讀_第2頁
Openflow協(xié)議通信流程解讀_第3頁
Openflow協(xié)議通信流程解讀_第4頁
Openflow協(xié)議通信流程解讀_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、Openflow協(xié)議通信流程解讀前言接觸了這么久的SDN,Openflow協(xié)議前前后后也讀過好多遍,但是一直沒有時間總結(jié)一下自己的一些見解?,F(xiàn)在有時間了,就寫一寫自己對Openflow協(xié)議通信流程的一些理解。SDN中Switch和controller在SDN中很重要的兩個實體是Switch跟Controller。Controller在網(wǎng)絡中相當于上帝,可以知道網(wǎng)絡中所有的消息,可以給交換機下發(fā)指令。Switch就是一個實現(xiàn)Controller指令的實體,只不過這個交換機跟傳統(tǒng)的交換機不一樣,他的轉(zhuǎn)發(fā)規(guī)則由流表指定,而流表由控制器發(fā)送。switch組成與傳統(tǒng)交換機的差異switch組成switc

2、h由一個Secure Channel和一個flow table組成,of1.3之后table變成多級流表,有256級。而of1.0中table只在table0中。· Secure Channel是與控制器通信的模塊,switch和controller之間的連接時通過socket連接實現(xiàn)。· Flow table里面存放這數(shù)據(jù)的轉(zhuǎn)發(fā)規(guī)則,是switch的交換轉(zhuǎn)發(fā)模塊。數(shù)據(jù)進入switch之后,在table中尋找對應的flow進行匹配,并執(zhí)行相應的action,若無匹配的flow則產(chǎn)生packet_in(后面有講)of中sw與傳統(tǒng)交換機的差異· 匹配層次高達4層,可以

3、匹配到端口,而傳統(tǒng)交換機只是2層的設備。· 運行of協(xié)議,實現(xiàn)許多路由器的功能,比如組播。· 求補充!(如果你知道,請告訴我,非常感謝?。﹐penflow的switch可以從以下方式獲得· 實體of交換機,目前市場上有一些廠商已經(jīng)制造出of交換機,但是普遍反映價格較貴!性能最好。· 在實體機上安裝OVS,OVS可以使計算機變成一個openflow交換機。性能相對穩(wěn)定。· 使用mininet模擬環(huán)境??梢源罱ㄔS多交換機,任意拓撲,搭建拓撲具體教程本博客有一篇。性能依賴虛擬機的性能。controller組成控制器有許多種,不同的語言,如python

4、寫的pox,ryu,如java寫的floodlight等等。從功能層面controller分為以下幾個模塊:· 底層通信模塊:openflow中目前controller與switch之間使用的是socket連接,所以控制器底層的通信是socket。· openflow協(xié)議。socket收到的數(shù)據(jù)的處理規(guī)則需按照openflow協(xié)議去處理。· 上層應用:根據(jù)openflow協(xié)議處理后的數(shù)據(jù),開發(fā)上層應用,比如pox中就l2_learning,l3_learning等應用。更多的應用需要用戶自己去開發(fā)。Openflow通信流程以下教程環(huán)境為:mininet+自編簡單控

5、制器建立連接首先啟動mininet,mininet會自行啟動一個default拓撲,你也可以自己建立你的拓撲。sw建立完成之后,會像controllerIP:controllerport發(fā)送數(shù)據(jù)。controller啟動之后,監(jiān)聽指定端口,默認6633,但是好像以后的都改了,因為該端口被其他協(xié)議占用。3次握手之后,建立連接,這個是底層的通信,是整一套系統(tǒng)的基礎設施。OFPT_HELLO創(chuàng)建socket之后,sw跟controller會彼此發(fā)送hello數(shù)據(jù)包。· 目的:協(xié)議協(xié)商。· 內(nèi)容:本方支持的最高版本的協(xié)議· 成果:使用雙方都支持的最低版本協(xié)議。·

6、 成功:建立連接· 失敗:OFPT_ERROR (TYPE:OFPT_HELLO_FAILED,CODE =0),終止連接。OFPT_ERROR說到OFPT_ERROR,我們不妨先了解一下。ofp_error_type = 0: "OFPET_HELLO_FAILED", 1: "OFPET_BAD_REQUEST", 2: "OFPET_BAD_ACTION", 3: "OFPET_FLOW_MOD_FAILED", 4: "OFPET_PORT_MOD_FAILED", 5: &q

7、uot;OFPET_QUEUE_OP_FAILED"錯誤類型如上所示。對應的type還會有對應的code.所以報錯的格式為:OFPT_ERRORTYPE: CODE:PAYLOAD具體的錯誤信息。如 TYPE:0 CODE:0為:*OFPHFC_INCOMPATIBLE*具體對應的關系,請自行查看OF協(xié)議。OFPT_ECHO· 分類:對稱信息 OFPT_ECHO_REQUEST, OFPT_ECHO_REPLY· 作用:查詢連接狀態(tài),確保通信通暢。當沒有其他的數(shù)據(jù)包進行交換時,controller會定期循環(huán)給sw發(fā)送OFPT_ECHO_REQUEST。OFPT_F

8、EATURES當sw跟controller完成連接之后,控制器會向交換機下發(fā)OFPT_FEATYRES_REQUEST的數(shù)據(jù)包,目的是請求交換機的信息。· 發(fā)送時間:連接建立完成之后· 發(fā)送數(shù)據(jù):OFPT_FEATURES_REQUEST· 對稱數(shù)據(jù):OFPT_FEATURES_REPLY· 目的:獲取交換機的信息OFPT_FEATURES_REQUEST· TYPE=5· Without dataOFPT_FEATURES_REPLY· TYPE =6· 0:8為header· 8:32長度24byte

9、為sw的features· 32:長度與端口數(shù)成正比,存放port的信息。每一個port信息長度為48byte。· class ofp_features_reply(Packet):· name = "OpenFlow Switch Features Reply"· fields_desc= BitFieldLenField('datapath_id', None, 64, length_of='varfield'),· BitFieldLenField('n_buffers'

10、, None, 32, length_of='varfield'),· XByteField("n_tables", 0),· X3BytesField("pad", 0),· #features· BitField("NOT DEFINED", 0, 24),· BitField("OFPC_ARP_MATCH_IP", 0, 1), #1<<7 Match IP address in ARP packets· BitFiel

11、d("OFPC_QUEUE_STATS", 0, 1), #1<<6 Queue statistics· BitField("OFPC_IP_STREAM", 0, 1), #1<<5 Can reassemble IP fragments· BitField("OFPC_RESERVED", 0, 1), #1<<4 Reserved, must be zero· BitField("OFPC_STP", 0, 1), #1<<3 80

12、2.1d spanning tree· BitField("OFPC_PORT_STATS", 0, 1), #1<<2 Port statistics· BitField("OFPC_TABLE_STATS", 0, 1), #1<<1 Table statistics· BitField("OFPC_FLOW_STATS", 0, 1), #1<<0 Flow statistics· BitFieldLenField('actions',

13、None, 32, length_of='varfield'),· bind_layers( ofp_header, ofp_features_reply, type=6 )以上的結(jié)構(gòu)是交換機的features,緊跟在后面的是端口的結(jié)構(gòu):class ofp_phy_port(Packet): name = "OpenFlow Port" fields_desc= ShortEnumField("port_no", 0, ofp_port), MACField("hw_addr", "00:00:00

14、:00:00:00"), StrFixedLenField("port_name", None, length=16), BitField("not_defined", 0, 25), BitField("OFPPC_NO_PACKET_IN", 0, 1), BitField("OFPPC_NO_FWD", 0, 1), BitField("OFPPC_NO_FLOOD", 0, 1), BitField("OFPPC_NO_RECV_STP",0, 1), Bi

15、tField("OFPPC_NO_RECV", 0, 1), BitField("OFPPC_NO_STP", 0, 1), BitField("OFPPC_PORT_DOWN", 0, 1), #uint32_t for state BitField("else", 0, 31), BitField("OFPPS_LINK_DOWN", 0, 1), #uint32_t for Current features BitField("not_defined", 0, 20),

16、 BitField("OFPPF_PAUSE_ASYM", 0, 1), BitField("OFPPF_PAUSE", 0, 1), BitField("OFPPF_AUTONEG", 0, 1), BitField("OFPPF_FIBER", 0, 1), BitField("OFPPF_COPPER", 0, 1), BitField("OFPPF_10GB_FD", 0, 1), BitField("OFPPF_1GB_FD", 0, 1), B

17、itField("OFPPF_1GB_HD", 0, 1), BitField("OFPPF_100MB_FD", 0, 1), BitField("OFPPF_100MB_HD", 0, 1), BitField("OFPPF_10MB_FD", 0, 1), BitField("OFPPF_10MB_HD", 0, 1), #uint32_t for features being advised by the port BitField("advertised", 0,

18、32), #uint32_t for features supported by the port BitField("supported", 0, 32), #uint32_t for features advertised by peer BitField("peer", 0, 32)交換機和端口的配置信息在整一個通信過程起著至關的作用,因為所有關于的操作都需要從features里面提取相關的信息,如dpid,port_no,等在整個通信過程中多次被用到的重要數(shù)據(jù)。所以,對這兩個數(shù)據(jù)結(jié)構(gòu)了然于心,對于研究openflow來說,至關重要。每一次交換機連

19、到控制器,都會收到控制器的features_request,當sw將自己的features回復給控制器之后,控制器就對交換機有了一個全面的了解,從而為后面的控制提供的控制信息。OFPT_PACKET_IN在控制器獲取完交換機的特性之后,交換機開始處理數(shù)據(jù)。對于進入交換機而沒有匹配流表,不知道如何操作的數(shù)據(jù)包,交換機會將其封裝在packet_in中發(fā)給controller。包含在packet_in中的數(shù)據(jù)可能是很多種類型,arp和icmp是最常見的類型。當然產(chǎn)生packet_in的原因不止一種,產(chǎn)生packet_in的原因主要有一下兩種:· OFPR_NO_MATCH· OF

20、PR_ACTION無法匹配的數(shù)據(jù)包會產(chǎn)生packet_in,action也可以指定將數(shù)據(jù)包發(fā)給packet_in,也就是說我們可以利用這一點,將需要的數(shù)據(jù)包發(fā)給控制器。packet_in事件之后,一般會觸發(fā)兩類事件:· packet_out· flow_mod如果是廣播包,如arp,控制器一般會將其包裝起來,封裝成packet_out數(shù)據(jù)包,將其發(fā)給交換機,讓其flood,flood操作是將數(shù)據(jù)包往除去in_port以外的所有端口發(fā)送數(shù)據(jù)包。OFPT_PACKET_OUT很多人不是特別了解packet_out的作用。· 作用:通過控制器發(fā)送交換機希望發(fā)送的數(shù)據(jù)&#

21、183; 例子:arp在廣播的時候,在ofsw中不能直接將arp廣播,而是,將其封裝在packet_out里面,交換機泛洪的是packet_out。我個人觀點,這個數(shù)據(jù)包,是一個兼容性之的數(shù)據(jù)包,為了實現(xiàn)信令,不得不處理arp,但是arp又不能直接處理,所以將其封裝在packet_out,從而能夠在of的sw中傳播,從而在openflow里實現(xiàn)arp等IP網(wǎng)的功能。OFPT_FLOW_MODOFPT_FLOW_MOD是整一個Openflow協(xié)議中最重要的數(shù)據(jù)結(jié)構(gòu),沒有之一。OFPT_FLOW_MOD由header+match+flow_mod+action組成。為了操作簡單,以下的結(jié)構(gòu)是將wi

22、ldcards和match分開的形式,形成兩個結(jié)構(gòu),在編程的時候能更方便一些。由于這個數(shù)據(jù)包很重要,所以,我將把這個數(shù)據(jù)包仔細拆分解讀。flow_mod = of.ofp_header(type=14,length=72)/of.ofp_flow_wildcards(OFPFW_NW_TOS=1, OFPFW_DL_VLAN_PCP=1, OFPFW_NW_DST_MASK=0, OFPFW_NW_SRC_MASK=0, OFPFW_TP_DST=1, OFPFW_TP_SRC=1, OFPFW_NW_PROTO=1, OFPFW_DL_TYPE=1, OFPFW_DL_VLAN=1, OFP

23、FW_IN_PORT=1, OFPFW_DL_DST=1, OFPFW_DL_SRC=1) /of.ofp_match(in_port=msg.payload.payload.payload.in_port, dl_src=pkt_parsed.src, dl_dst=pkt_parsed.dst, dl_type=pkt_parsed.type, dl_vlan=pkt_parsed.payload.vlan, nw_tos=pkt_parsed.payload.tos, nw_proto=pkt_to, nw_src=pkt_parsed.payload

24、.src, nw_dst=pkt_parsed.payload.dst, tp_src = 0, tp_dst = 0) /of.ofp_flow_mod(cookie=0, command=0, idle_timeout=10, hard_timeout=30, out_port=msg.payload.payload.payload.payload.port, buffer_id=buffer_id, flags=1)OFP_HEADERheader是所有數(shù)據(jù)包的報頭,有三個參數(shù):· type:類型· length:整個數(shù)據(jù)包的長度· xid:數(shù)據(jù)包的編號比如

25、ofp_flow_mod的type就是14,具體的哪一種數(shù)據(jù)的類型將在文章最后給出。length最基本長度為72,每一個action長度為8。所以長度必定為8的倍數(shù)才是一個正確的數(shù)據(jù)長度。WILDCARDS這是從match域提取出來的前32bit。在of1.0中這里的0,1意義跟我們平時接觸的如子網(wǎng)掩碼等意義相反,如OFPFW_NW_DST_MASK=0則表示全匹配目標IP。如果為63,則表示不匹配IP。為什么拿這個舉例?原因就在于,他的長度是6bit,最大是63,需要將數(shù)值轉(zhuǎn)變成對應2進制數(shù)值才是我們想要的匹配規(guī)則,且注意,1是忽略,0是匹配。如果wildcards全0,則表示由match精

26、確指定,即所有12元組都匹配。當然高興的是,在1.3的時候,這個邏輯改成了正常的與邏輯。即1為使能匹配,0為默認不匹配。MATCH這個數(shù)據(jù)結(jié)構(gòu)會出現(xiàn)在幾乎所有重要的數(shù)據(jù)包中,因為他存的就是控制信息。如有packet_in引發(fā)的下發(fā)流表,則match部分應對應填上對應的數(shù)據(jù),這樣下發(fā)的流表才是正確的。但是在下發(fā)的時候還需要注意許多細節(jié),比如:· 并不是所有的數(shù)據(jù)包都有vlan_tag。如0×0800就是純IP,并沒有攜帶vlan_tag,所以填充式應根據(jù)packet_in的具體情況填充。· 并不是所有的數(shù)據(jù)都有四層端口,所以四層的源端口,目的端口都不是任何時候都能由

27、packet_in去填充的。不去管就好了,默認的會填充一個默認值,匹配的時候不去匹配4層端口就沒有問題。FLOW_MOD這里面的信息也是至關重要的。class ofp_flow_mod(Packet): name = "OpenFlow Flow Modify" fields_desc= BitField("cookie", 0, 64), #Opaque controller-issued identifier ShortEnumField("command", 0, ofp_flow_mod_command), ShortFiel

28、d("idle_timeout", 60), ShortField("hard_timeout", 0), ShortField("priority", 0), IntField("buffer_id", 0), ShortField("out_port", 0), #flags are important, the 1<<0 bit is OFPFF_SEND_FLOW_REM, send OFPT_FLOW_REMOVED #1<<1 bit is OFPFF_CHE

29、CK_OVERLAP, checking if the entries' field overlaps(among same priority) #1<<2 bit is OFPFF_EMERG, used only switch disconnected with controller) ShortField("flags", 0)command里面的類型決定了flow_mod的操作是添加,修改還是刪除等。類型如下ofp_flow_mod_command = 0: "OFPFC_ADD", # New flow 1: "O

30、FPFC_MODIFY", # Modify all matching flows 2: "OFPFC_MODIFY_STRICT", # Modify entry strictly matching wildcards 3: "OFPFC_DELETE", # Delete all matching flows 4: "OFPFC_DELETE_STRICT" # Strictly match wildcards and priority例如:如果要添加一條新流,command=0。兩個時間參數(shù)idle_timeout &

31、amp; idle_timeout:· idle_timeout:如值為10,則某條流在10秒之內(nèi)沒有被匹配,則刪除,可以稱之為活躍時間吧。· hard_timeout:如值為30,則30秒到達的時候,一定刪除這條流,即使他還活躍,即被匹配。prioritypriority是流的優(yōu)先級的字段,字數(shù)越大則優(yōu)先級越高,存放在號數(shù)越小的table中。buffer_id由交換機指定的buffei_id,準確的說是由dpid指定的。如果是手動下發(fā)的流,buffer_id應填-1,即0xffff,告訴交換機這個數(shù)據(jù)包并沒有緩存在隊列中。out_port指定流的出口,但是這個出口并不是直

32、接指導流轉(zhuǎn)發(fā)的,至少我是這么覺得,指導流轉(zhuǎn)發(fā)的出口會在action里面添加,這個端口是為了在flow_removed的時候查詢,并返回控制器的作用。(求糾正!)有一些端口是很特殊的,如flood,local等。具體分類如下:ofp_port = 0xff00: "OFPP_MAX", 0xfff8: "OFPP_IN_PORT", 0xfff9: "OFPP_TABLE", 0xfffa: "OFPP_NORMAL", 0xfffb: "OFPP_FLOOD", 0xfffc: "OF

33、PP_ALL", 0xfffd: "OFPP_CONTROLLER", 0xfffe: "OFPP_LOCAL", 0xffff: "OFPP_NONE"如果你不知道端口是多少,最好填flood,也就是0xfffb。flags在上面的注釋中也說得比較清楚了。如果沒有特殊用處,請將他置1,因為這樣能讓交換機在刪除一條流的時候給交換機上報flow_removed信息。ACTIONaction是openflow里面最重要的結(jié)構(gòu)。對,他也是最重要的。每一條流都必須指定必要的action,不然匹配上之后,沒有指定action,交換機會

34、默認執(zhí)行drop操作。action有2種類型:· 必備行動: Forward and Drop· 選擇行動:FLOOD,NALMAL 等如添加output就是一個必須要添加的action.每一個action最好有一個action_header(),然后再接一個實體。如:ofp_action_header(type=0)/ofp_action_output(type =0, port =oxfffb,len =8)具體的action類型如下:ofp_action_type = 0: "OFPAT_OUTPUT", 1: "OFPAT_SET_VL

35、AN_VID", 2: "OFPAT_SET_VLAN_PCP", 3: "OFPAT_STRIP_VLAN", 4: "OFPAT_SET_DL_SRC", 5: "OFPAT_SET_DL_DST", 6: "OFPAT_SET_NW_SRC", 7: "OFPAT_SET_NW_DST", 8: "OFPAT_SET_NW_TOS", 9: "OFPAT_SET_TP_SRC", 10: "OFPAT_SET_

36、TP_DST", 11: "OFPAT_ENQUEUE" action不僅僅會出現(xiàn)在flow_mod中,也會出現(xiàn)在如stats_reply中。OFPT_BARRIER_REQUEST && REPLY這個數(shù)據(jù)包可以的作用很簡單,交換機在收到OFPT_BARRIER_REQUEST的時候,會回復控制器一個OFPT_BARRIER_REPLY。我們默認數(shù)據(jù)下發(fā)的順序不會在傳輸中發(fā)生變化,在進入消息隊列之后處理也是按照FIFO進行的,那么只要在flow_mod之后發(fā)送這個數(shù)據(jù),當收到reply之后,交換機默認flow已經(jīng)寫成功。也許你會問他只是保證了fl

37、ow_mod命令執(zhí)行了,寫入的結(jié)果如何并沒有保證,如何確定確實寫入流表了呢?· 如果非邏輯錯誤,那么交換機在處理flow_mod的時候會報錯。所以我們會知道寫入結(jié)果。· 如果是邏輯錯誤,那么會寫進去,但是邏輯錯誤應該是人的問題,所以barrier還是有他的功能的。OFPT_FLOW_REMOVED如果flow_mod的flags填成1,則該流在失效之后會回復控制器一條OFPT_FLOW_REMOVED信息。· 結(jié)構(gòu):header()/wildcards()/match()/flow_removed()· 作用:在流失效的時候回復控制器,并攜帶若干統(tǒng)計數(shù)據(jù)

38、。· class ofp_flow_removed(Packet):· name = "Openflow flow removed"· fields_desc = BitField("cookie", 0, 64),· BitField("priority", 0,16),· BitField("reason", 0, 8),· ByteField("pad", None),· BitField("duration_

39、sec", 0, 32),· BitField("duration_nsec", 0, 32),· BitField("idle_timeout", 0, 16),· ByteField("pad", 0),· ByteField("pad", 0),· BitField("packet_count", 0, 64),· BitField("byte_count", 0, 64) 其實的duration_s

40、ec是流存在的時間,單位為秒,duration_nsec單位為納秒。OFPT_STATS_REQUEST && REPLY以上的數(shù)據(jù)都是通信過程中必須的部分。還有一些數(shù)據(jù)包是為了某些目的而設計的,如OFPT_STATS_REQUEST && REPLY可以獲得統(tǒng)計信息,我們可以利用統(tǒng)計信息做的事情就太多了。如:負載平衡, 流量監(jiān)控等基于流量的操作。OFPT_STATS_REQUESTOFPT_STATS_REQUEST類型有很多,回復的類型也很多。class ofp_stats_request(Packet): name = "OpenFlow Sta

41、ts Request" fields_desc= ShortEnumField("type", 0, ofp_stats_types), ShortField("flag", 0)Type· 0:請求交換機版本信息,制造商家等信息。· 1:單流請求信息· 2:多流請求信息· 3:流表請求信息· 4:端口信息請求· 5:隊列請求信息· 6:vendor請求信息,有時候沒有定義。· msg = 0: of.ofp_header(type = 16, length = 1

42、2)/of.ofp_stats_request(type = 0), #Type of OFPST_DESC (0) · 1: of.ofp_header(type = 16, length = 56)/of.ofp_stats_request(type =1)/ofp_flow_wildcards/ofp_match/of.ofp_flow_stats_request(out_port = ofp_flow_mod.out_port), #flow stats· 2: of.ofp_header(type = 16, length =56)/of.ofp_stats_re

43、quest(type = 2)/ofp_flow_wildcards/of.ofp_match/of.ofp_aggregate_stats_request(), # aggregate stats request· 3: of.ofp_header(type = 16, length = 12)/of.ofp_stats_request(type = 3), #Type of OFPST_TABLE (0) · 4: of.ofp_header(type = 16, length =20)/of.ofp_stats_request(type = 4)/of.ofp_por

44、t_stats_request(port_no = port), # port stats request · 5: of.ofp_header(type = 16, length =20)/of.ofp_stats_request(type =5)/of.ofp_queue_stats_request(), #queue request· 6: of.ofp_header(type = 16, length = 12)/of.ofp_stats_request(type = 0xffff) #vendor request OFPT_STATS_REPLY每一種請求信息都會

45、對應一種回復信息。我們只介紹最重要的flow_stats_reply。· 結(jié)構(gòu):header(type=17)/reply_header()/flow_stats/wildcards/match/ flow_stats_data· 作用:攜帶流的統(tǒng)計信息,如通過的數(shù)據(jù)包個數(shù),字節(jié)數(shù)。ofp_flow_stats(body4:8)里面會有的table_id字段表明該流存放在哪一個流表里。flow_stats_data里面有packet_count和byte_count是最有價值的字段,流量統(tǒng)計就是由這兩個字段提供的信息。如想統(tǒng)計某條流的速率:前后兩個reply的字節(jié)數(shù)相減除以

46、duration_time只差就可以求得速率由速率我們可以做很多基于流量的app,如流量監(jiān)控,負載均衡等等。值得注意的是,在這些數(shù)據(jù)之后,其實還有一些action,但是目前我還沒有查看這些action到底是干什么用的。后續(xù)寫到這里,我使用到的數(shù)據(jù)包都寫了一遍,其他的報文其實道理也是一樣的。如OFPT_GET_CONFIG_REQUEST和REPLY,道理應該和stats一樣,只是數(shù)據(jù)結(jié)構(gòu)不一樣罷了。不再多說。最后把我們用的一些比較多的信息帖出來讓大家更好的學習。ERROR在調(diào)試的過程中遇到錯誤是再所難免的,前面也提到了error的結(jié)構(gòu)。這里就貼一下type跟code吧。Typeofp_erro

47、r_type = 0: "OFPET_HELLO_FAILED", 1: "OFPET_BAD_REQUEST", 2: "OFPET_BAD_ACTION", 3: "OFPET_FLOW_MOD_FAILED", 4: "OFPET_PORT_MOD_FAILED", 5: "OFPET_QUEUE_OP_FAILED"Code:ofp_hello_failed_code = 0: "OFPHFC_INCOMPATIBLE", 1: "OFP

48、HFC_EPERM"ofp_bad_request_code = 0: "OFPBRC_BAD_VERSION", 1: "OFPBRC_BAD_TYPE", 2: "OFPBRC_BAD_STAT", 3: "OFPBRC_BAD_VENDOR", 4: "OFPBRC_BAD_SUBTYPE", 5: "OFPBRC_EPERM", 6: "OFPBRC_BAD_LEN", 7: "OFPBRC_BUFFER_EMPTY"

49、, 8: "OFPBRC_BUFFER_UNKNOWN"ofp_bad_action_code = 0: "OFPBAC_BAD_TYPE", 1: "OFPBAC_BAD_LEN", 2: "OFPBAC_BAD_VENDOR", 3: "OFPBAC_BAD_VENDOR_TYPE", 4: "OFPBAC_BAD_OUT_PORT", 6: "OFPBAC_BAD_ARGUMENT", 7: "OFPBAC_EPERM", #pe

50、rmissions error 8: "OFPBAC_TOOMANY", 9: "OFPBAC_BAD_QUEUE"ofp_flow_mod_failed_code = 0: "OFPFMFC_ALL_TABLES_FULL", 1: "OFPFMFC_OVERLAP", 2: "OFPFMFC_EPERM", 3: "OFPFMFC_BAD_EMERG_TIMEOUT", 4: "OFPFMFC_BAD_COMMAND", 5: "OFPFMF

51、C_UNSUPPORT"ofp_port_mod_failed_code = 0: "OFPPMFC_BAD_PORT", 1: "OFPPFMC_BAD_HW_ADDR"ofp_queue_op_failed_code = 0: "OFPQOFC_BAD_PORT", 1: "OFPQOFC_BAD_QUEUE"第二章 理論基礎2.1軟件定義網(wǎng)絡SDN軟件定義網(wǎng)絡(英語:Software-defined networking,縮寫為SDN),一種網(wǎng)絡虛擬化(Network virtualization)

52、技術(shù),由美國史丹佛大學Clean State提出。利用OpenFlow協(xié)定,把路由器的控制平面(control plane)從數(shù)據(jù)平面(data plane)中分離出來,以軟件方式實做。這個架構(gòu)可以讓網(wǎng)絡管理員,在不更動硬件裝置的前提下,以中央控制方式,用程式重新規(guī)劃網(wǎng)絡,為控制網(wǎng)絡流量提供了新的方法,也提供了核心網(wǎng)絡及應用創(chuàng)新的良好平臺。2.2 openflow網(wǎng)絡架構(gòu)OpenFlow網(wǎng)絡由OpenFlow交換機、FlowVisor和Controller三部分組成。OpenFlow交換機進行數(shù)據(jù)層的轉(zhuǎn)發(fā);FlowVisor對網(wǎng)絡進行虛擬化;Controller對網(wǎng)絡進行集中控制,實現(xiàn)控制層的功能。如下圖所示:2.2.1 openflow交換機OpenFlow交換機由流表、安全通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論