版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
SDN北向接口第6章6.1 北向接口概述6.2 RESTAPI6.3 RESTCONF協(xié)議北向接口是一套為開發(fā)者提供網(wǎng)絡(luò)高層的邏輯抽象和業(yè)務(wù)模型的編程接口實際上,北向接口就是提供了SDN中開發(fā)者與控制器間的交互能力SDN則為開發(fā)者提供了更大的靈活性,以API的形式開放出強大的二次開發(fā)能力,使開發(fā)者可以著力關(guān)注更高層的應(yīng)用業(yè)務(wù),而非底層硬件實現(xiàn)6.1北向接口概述6.1北向接口概述6.1.1ONF北向接口6.1.2SDN其他北向接口6.1.3SDN北向接口的前景計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。6.1.1ONF北向接口主導(dǎo)SDN/OpenFlow標(biāo)準(zhǔn)組織ONF于2013年10月成立SDN北向接口工作小組,旨在通過北向接口的標(biāo)準(zhǔn)化以加速SDN的商用成立背景ONF成立之初倡導(dǎo)的是用戶決定應(yīng)用,覺得標(biāo)準(zhǔn)化會大大限制用戶的創(chuàng)新,未提出要將SDN北向接口標(biāo)準(zhǔn)化隨著控制器市場的百花齊放,ONF發(fā)現(xiàn)這些控制器提供的北向接口非?;靵y,時常會給用戶帶來很大的困擾,同時為了防止控制器通過提供殺手級應(yīng)用形成廠商鎖定的局面,故決定將SDN北向接口標(biāo)準(zhǔn)化計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。目標(biāo)與規(guī)劃ONF所設(shè)計的SDN北向接口需要滿足的條件:良好的穩(wěn)定性很強的可擴展性靈活性和敏捷性標(biāo)準(zhǔn)化的北向接口必須具備底層無關(guān)性各個接口必須具有簡潔明了的功能接口間層次必須十分清晰,允許傳統(tǒng)網(wǎng)絡(luò)工作者在不了解SDN網(wǎng)絡(luò)底層實現(xiàn)的情況下使用網(wǎng)絡(luò)各個層次的可編程能力計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。ONF北向接口設(shè)計層次控制器基礎(chǔ)功能API:提供了控制平面中最為底層的能力網(wǎng)絡(luò)服務(wù)API:提供了基礎(chǔ)網(wǎng)絡(luò)服務(wù)的編程接口北向接口應(yīng)用API:提供了業(yè)務(wù)邏輯層的抽象計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。北向接口功能集的初步設(shè)計最底層為控制器收發(fā)信令的基礎(chǔ)能力往上面一層是自驗證能力、開發(fā)所用的編程語言以及設(shè)備的抽象層,提供了網(wǎng)絡(luò)轉(zhuǎn)發(fā)設(shè)備級的編程接口網(wǎng)絡(luò)切片、拓撲生成、路徑發(fā)現(xiàn)、路由與交換等提供了網(wǎng)絡(luò)層的編程接口其余部分則提供了更高層的業(yè)務(wù)邏輯隨著Web的普及,RESTAPI以其靈活易用性在SDN北向接口設(shè)計中得到了廣泛的應(yīng)用,REST定義了一組體系架構(gòu)原則,開發(fā)者可以根據(jù)這些原則設(shè)計以系統(tǒng)資源為中心的Web服務(wù)這種架構(gòu)下,每個資源都具有唯一的標(biāo)識,對資源的操作包括獲取、創(chuàng)建、修改和刪除資源將REST用在SDN北向接口的設(shè)計中,可將控制器基本功能模塊和各網(wǎng)元看作網(wǎng)絡(luò)資源,對其進行標(biāo)識,通過增刪查改的方法操作相應(yīng)資源的數(shù)據(jù)。RESTAPI操作簡單,界面友好,很多控制器都提供了這種通過Web對SDN進行管理與設(shè)計的方式。計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。6.1.2SDN其他北向接口OnePK(OnePlatformKit)開發(fā)平臺Cisco于2012年6月提出了CiscoONE(OpenNetworkEnvironment)戰(zhàn)略,以在傳統(tǒng)設(shè)備的基礎(chǔ)上提供可編程能力。其中OnePK作為ONE戰(zhàn)略下重要的技術(shù)平臺為傳統(tǒng)Cisco的設(shè)備提供了一套完整的可編程環(huán)境OnePK架構(gòu)OnePK提供了一套通用的編程接口OnePKAPI,上層應(yīng)用可以基于這套API使用不同的高級語言進行開發(fā),并通過OnePKAPI基礎(chǔ)架構(gòu)實現(xiàn)上層API和底層網(wǎng)絡(luò)操作系統(tǒng)間的適配與代理。計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。6.1.2SDN其他北向接口計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。6.1.2SDN其他北向接口作為從傳統(tǒng)網(wǎng)絡(luò)到SDN的過渡性解決方案,OnePK的可編程能力可跨越傳統(tǒng)的CiscoIOS、CiscoNXOS、CiscoIOSXR交換機操作系統(tǒng)實現(xiàn),同時若在OnePK中集成對其他SDN南向接口協(xié)議的支持,就可以實現(xiàn)支持其他SDN協(xié)議的網(wǎng)絡(luò)架構(gòu)模型。OpenPK架構(gòu)示意圖計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。6.1.3SDN北向接口的前景控制器本質(zhì)上就是SDN的操作系統(tǒng),它通過南向接口與轉(zhuǎn)發(fā)設(shè)備通信,對用戶屏蔽底層實現(xiàn)細節(jié)。通過北向接口與上層應(yīng)用交互,提供更高層次的業(yè)務(wù)邏輯抽象SDN的最終價值:根據(jù)豐富的上層應(yīng)用需求更加靈活地部署和控制網(wǎng)絡(luò)控制器能否獲得大規(guī)模應(yīng)用的決定因素:北向接口是否友好、完備,直接決定著控制器的生命力計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。6.1.3SDN北向接口的前景SDN北向接口的發(fā)展現(xiàn)狀目前不甚明朗市場上控制器的種類五花八門各種控制器的應(yīng)用模塊只是獨立地實現(xiàn)了業(yè)務(wù)邏輯,并沒有提供數(shù)據(jù)、消息的交互接口開發(fā)人員很難使用這些模塊進行二次開發(fā)沒有統(tǒng)一的北向接口標(biāo)準(zhǔn)標(biāo)準(zhǔn)化工作迫在眉睫,但在網(wǎng)絡(luò)的一致性與差異性之間難以找到一個平衡點,故業(yè)界卻遲遲沒有動作計算機網(wǎng)絡(luò)上的通信面臨以下兩大類威脅:被動攻擊和主動攻擊。6.1.3SDN北向接口的前景標(biāo)準(zhǔn)化工作迫在眉睫,但在網(wǎng)絡(luò)的一致性與差異性之間難以找到一個平衡點,故業(yè)界卻遲遲沒有動作不同的產(chǎn)業(yè)對IT能力的需求大相徑庭不同利益方考慮的方面是不同的同一產(chǎn)業(yè)不同用戶的網(wǎng)絡(luò)環(huán)境也各不相同因此標(biāo)準(zhǔn)化功能集的定義問題就很難達成共識ONF計劃制定的這套API標(biāo)準(zhǔn)函數(shù)集,仍然會需要很長一段時間去普及和推廣盡管SDN北向接口的前景仍然不甚明朗,但毫無疑問,SDN未來要進行大規(guī)模的商用,離不開北向接口的標(biāo)準(zhǔn)化。6.2RESTAPI6.2.1什么是RESTAPI6.2.2RESTAPI的設(shè)計規(guī)范6.2.3開源控制器的RESTAPI6.2.1什么是RESTAPI
RESTAPI也稱為RESTfulAPI,是遵循REST架構(gòu)規(guī)范的應(yīng)用編程接口(API或WebAPI),支持與RESTfulWeb服務(wù)進行交互。REST是表述性狀態(tài)傳遞的英文縮寫,由計算機科學(xué)家RoyFielding創(chuàng)建。REST是一組架構(gòu)規(guī)范,并非協(xié)議或標(biāo)準(zhǔn)。API開發(fā)人員可以采用各種方式實施REST。用于接入設(shè)備執(zhí)行監(jiān)控和配置任務(wù)的協(xié)議和機制已經(jīng)被適度地應(yīng)用于SDN,例如SNMP、CLI、TLI、NETCONF和TR-069。作為SDN適用的API的一種新技術(shù)選擇,REST使用了HTTP或HTTPS。基于這一技術(shù)的API稱為RESTful接口。6.2.2RESTAPI的設(shè)計規(guī)范
從最基本的層面上講,API是一種機制,使一個應(yīng)用程序或服務(wù)能夠訪問另一個應(yīng)用程序或服務(wù)中的資源客戶機:執(zhí)行訪問的應(yīng)用程序或服務(wù)服務(wù)器:包含所需資源的應(yīng)用程序或服務(wù)RESTAPI幾乎可以使用任何編程語言進行開發(fā),并支持多種數(shù)據(jù)格式。唯一的要求是它們要符合以下六個REST設(shè)計原則-也稱為架構(gòu)約束。REST設(shè)計原則統(tǒng)一接口:無論請求來自何處,對同一資源發(fā)出的所有API請求都應(yīng)該看起來相同。RESTAPI應(yīng)確保同一條數(shù)據(jù)(例如用戶的姓名或電子郵件地址)僅屬于一個統(tǒng)一資源標(biāo)識符(URI)。資源不應(yīng)過大,但應(yīng)包含客戶可能需要的每一條信息。
客戶端/服務(wù)器解耦:在RESTAPI設(shè)計中,客戶端和服務(wù)器應(yīng)用程序必須彼此完全獨立??蛻舳藨?yīng)用程序只需知道所請求資源的URI即可;它不能以任何其他方式與服務(wù)器應(yīng)用程序交互。同樣,除了通過HTTP將客戶端應(yīng)用程序傳遞到所請求的數(shù)據(jù)外,服務(wù)器應(yīng)用程序不應(yīng)修改客戶端應(yīng)用程序。REST設(shè)計原則無狀態(tài):RESTAPI是無狀態(tài)的,這意味著每個請求都需要包含處理它所需的全部信息。換句話說,RESTAPI不需要任何服務(wù)器端會話。不允許服務(wù)器應(yīng)用程序存儲與客戶端請求相關(guān)的任何數(shù)據(jù)。可緩存性:如果可能,資源應(yīng)該可以在客戶端或服務(wù)器端緩存。服務(wù)器響應(yīng)還需要包含有關(guān)是否允許對交付的資源進行緩存的信息。目標(biāo)是提高客戶端的性能,同時增強服務(wù)器端的可擴展性。REST設(shè)計原則分層系統(tǒng)架構(gòu):在RESTAPI中,調(diào)用和響應(yīng)都會經(jīng)過多個不同的層。根據(jù)經(jīng)驗,請懷要將客戶端和服務(wù)器應(yīng)用程序直接相互連接。通信環(huán)路中可能包含多個不同的中介服務(wù)器。要設(shè)計RESTAPI,讓客戶端和服務(wù)器都無法判斷它是與最終應(yīng)用程序還是中介服務(wù)器進行通信。按需編碼(可選):RESTAPI通常發(fā)送靜態(tài)資源,但在某些情況下,響應(yīng)也可以包含可執(zhí)行代碼(例如Java小程序)。在這些情況下,代碼只應(yīng)按需運行。6.2.3開源控制器的RESTAPIRyu的RESTAPIRyu是一個基于組件的軟件定義網(wǎng)絡(luò)框架。Ryu提供具有明確定義的API的軟件組件,使研發(fā)人員能夠輕松創(chuàng)建新的網(wǎng)絡(luò)管理和控制應(yīng)用程序。Ryu支持各種協(xié)議來管理網(wǎng)絡(luò)設(shè)備,例如OpenFlow,Netconf,OF-confng等。所有代碼都可以在Apache2.0許可證下免費獲得。Ryu是完全用Python編寫的。ryu.app.ofctl_rest提供了于檢索交換機統(tǒng)計信息和更新交換機統(tǒng)計信息的RESTAPI(a)獲取所有交換機獲取連接到控制器的所有交換機的列表。用法:響應(yīng)消息正文:MethodGETURI/stats/swithesAttributeDescriptionExampledpidDatapathID1檢索交換機統(tǒng)計信息(a)獲取所有交換機使用示例:
$curl-XGEThttp://localhost:8080/stats/switches響應(yīng):[1,2,3]檢索交換機統(tǒng)計信息(b)獲取統(tǒng)計數(shù)據(jù)獲取在URI中使用數(shù)據(jù)路徑ID指定的交換機的desc統(tǒng)計信息。用法:檢索交換機統(tǒng)計信息MethodGETURI/stats/desc/<dpid>(b)獲取統(tǒng)計數(shù)據(jù)響應(yīng)消息正文:檢索交換機統(tǒng)計信息AttributeDescriptionExampledpidDatapathID1mfr_descManufacturerdescriptionNicria,Inc.hw_descHarwaredescriptionOpenvSwitchsw_descSoftwaredescription2.3.90serial_descSerialnumberNonedp_descHumanreadabledescriptionofdatapathNone(b)獲取統(tǒng)計數(shù)據(jù)使用示例:$curl-XGEThttp://localhost:8080/stats/desc/1響應(yīng):{"1":{"mfr_desc":"Nicira,Inc.","hw_desc":"OpenvSwitch","sw_desc":"2.3.90","serial_num":"None","dp_desc":"None"}}檢索交換機統(tǒng)計信息(c)獲取所有流統(tǒng)計信息獲取在URI中使用數(shù)據(jù)路徑ID指定的交換機的所有流量統(tǒng)計信息。用法:檢索交換機統(tǒng)計信息MethodGETURI/stats/flow/<dpid>(c)獲取所有流統(tǒng)計信息檢索交換機統(tǒng)計信息AttributeDescriptionExampledpidDatapathID"1"lengthLengthofthisentry88table_idTableID0duration_secTimeflowhasbeenaliveinseconds2duration_nsecTimeflowhasbeenaliveinnanosecondsbeyondduration_sec6.76e+08priorityPriorityoftheentry11111idle_timeoutNumberofsecondsidlebeforeexpiration0hard_timeoutNumberofsecondsbeforeexpiration0flagsBitmapofOFPFF_*flags1cookieOpaquecontroller-issuedidentifier1packet_countNumberofpacketsinflow0byte_countNumberofbytesinflow0matchFieldstomatch{"in_port":1}actionsInstructionset["OUTPUT:2"]響應(yīng)消息正文(c)獲取所有流統(tǒng)計信息使用示例:curl-XGEThttp://localhost:8080/stats/flow/1響應(yīng):{"1":[{"length":88,"table_id":0,"duration_sec":2,"duration_nsec":6.76e+08,"priority":11111,"idle_timeout":0,"hard_timeout":0,"flags":1,檢索交換機統(tǒng)計信息"cookie":1,"packet_count":0,"byte_count":0,"match":{"in_port":1},"actions":["OUTPUT:2"]}]}(d)獲取字段篩選的流統(tǒng)計信息獲取按OFPFlowStats字段篩選的交換機的流統(tǒng)計信息。這是獲取所有流統(tǒng)計信息的POST方法版本。用法:檢索交換機統(tǒng)計信息MethodPOSTURI/stats/flow/<dpid>(d)獲取字段篩選的流統(tǒng)計信息請求消息正文:檢索交換機統(tǒng)計信息AttributeDescriptionExampleDefaulttable_idTableID(int)0OFPTT_ALLout_portRequirematchingentriestoincludethisasanoutputport(int)2OFPP_ANYout_portRequirematchingentriestoincludethisasanoutputgroup(int)1OFPG_ANYcookieRequirematchingentriestocontainthiscookievalue(int)10cookie_maskMaskusedtorestrictthecookiebitsthatmustmatch(int)10matchFieldstomatch(dict){“int_port”:1}{}#wildcardedpriorityPriorityoftheentry(int)(SeeNote)11111#wildcarded(d)獲取字段篩選的流統(tǒng)計信息響應(yīng)消息正文:與獲取流統(tǒng)計信息相同使用示例:$curl-XPOST-d'{"table_id":0,"out_port":2,"cookie":1,"cookie_mask":1,"match":{"in_port":1}
}'http://localhost:8080/stats/flow/1檢索交換機統(tǒng)計信息(d)獲取字段篩選的流統(tǒng)計信息響應(yīng)消息正文:與獲取流統(tǒng)計信息相同響應(yīng):{"1":[{"length":88,"table_id":0,"duration_sec":2,"duration_nsec":6.76e+08,"priority":11111,"idle_timeout":0,"hard_timeout":0,檢索交換機統(tǒng)計信息"flags":1,"cookie":1,"packet_count":0,"byte_count":0,"match":{"in_port":1},"actions":["OUTPUT:2"]}]}(a)添加流條目將流條目添加到交換機。用法:更新交換機統(tǒng)計信息MethodPOSTURI/stats/flowentry/add(a)添加流條目請求消息正文更新交換機統(tǒng)計信息AttributeDescriptionExampleDefaultdpidDatapathID(int)1(Mandatory)cookieOpaquecontroller-issuedidentifier(int)10cookie_maskMaskusedtorestrictthecookiebits(int)10table_idTableIDtoputtheflowin(int)00idle_timeoutIdletimebeforediscarding(seconds)(int)300hard_timeoutMaxtimebeforediscarding(seconds)(int)300priorityPrioritylevelofflowentry(int)111110buffer_idBufferedpackettoapplyto,orOFP_NO_BUFFER(int)1OFP_NO_BUFFERflagsBitmapofOFPFF_*flags(int)10matchFieldstomatch(dict){"in_port":1}{}#wildcardedactionsInstructionset(listofdict)[{"type":"OUTPUT","port":2}][]#DROP(a)添加流條目使用示例:$curl-XPOST-d'{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"idle_timeout":30,"hard_timeout":30,"priority":11111,"flags":1,更新交換機統(tǒng)計信息"match":{"in_port":1},"actions":[{"type":"OUTPUT","port":2}]}'http://localhost:8080/stats/flowentry/add(a)添加流條目使用示例:$curl-XPOST-d'{"dpid":1,"priority":22222,"match":{"in_port":1},"actions":[{"type":"GOTO_TABLE","table_id":1}]}'http://localhost:8080/stats/flowentry/add更新交換機統(tǒng)計信息(a)添加流條目使用示例:$curl-XPOST-d'{"dpid":1,"priority":33333,"match":{"in_port":1},"actions":[{"type":"WRITE_METADATA","metadata":1,"metadata_mask":1}]}'http://localhost:8080/stats/flowentry/add更新交換機統(tǒng)計信息(a)添加流條目使用示例:$curl-XPOST-d'{"dpid":1,"priority":44444,"match":{"in_port":1},"actions":[{"type":"METER","meter_id":1}]}'http://localhost:8080/stats/flowentry/add更新交換機統(tǒng)計信息(b)修改所有匹配的流條目修改交換機的所有匹配流條目。用法:更新交換機統(tǒng)計信息MethodPOSTURI/stats/flowentry/modify(b)修改所有匹配的流條目請求消息正文更新交換機統(tǒng)計信息AttributeDescriptionExampleDefaultdpidDatapathID(int)1(Mandatory)cookieOpaquecontroller-issuedidentifier(int)10cookie_maskMaskusedtorestrictthecookiebits(int)10table_idTableIDtoputtheflowin(int)00idle_timeoutIdletimebeforediscarding(seconds)(int)300hard_timeoutMaxtimebeforediscarding(seconds)(int)300priorityPrioritylevelofflowentry(int)111110buffer_idBufferedpackettoapplyto,orOFP_NO_BUFFER(int)1OFP_NO_BUFFERflagsBitmapofOFPFF_*flags(int)10matchFieldstomatch(dict){"in_port":1}{}#wildcardedactionsInstructionset(listofdict)[{"type":"OUTPUT","port":2}][]#DROP(b)修改所有匹配的流條目使用示例:$curl-XPOST-d'{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"idle_timeout":30,"hard_timeout":30,"priority":11111,"flags":1,"match":{"in_port":1},更新交換機統(tǒng)計信息"actions":[{"type":"OUTPUT","port":2}]}'http://localhost:8080/stats/flowentry/modify(c)嚴格修改流條目嚴格按照匹配通配符和優(yōu)先級修改流條目。用法:更新交換機統(tǒng)計信息MethodPOSTURI/stats/flowentry/modify_strict(c)嚴格修改流條目請求消息正文更新交換機統(tǒng)計信息AttributeDescriptionExampleDefaultdpidDatapathID(int)1(Mandatory)cookieOpaquecontroller-issuedidentifier(int)10cookie_maskMaskusedtorestrictthecookiebits(int)10table_idTableIDtoputtheflowin(int)00idle_timeoutIdletimebeforediscarding(seconds)(int)300hard_timeoutMaxtimebeforediscarding(seconds)(int)300priorityPrioritylevelofflowentry(int)111110buffer_idBufferedpackettoapplyto,orOFP_NO_BUFFER(int)1OFP_NO_BUFFERflagsBitmapofOFPFF_*flags(int)10matchFieldstomatch(dict){"in_port":1}{}#wildcardedactionsInstructionset(listofdict)[{"type":"OUTPUT","port":2}][]#DROP(c)嚴格修改流條目使用示例:$curl-XPOST-d'{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"idle_timeout":30,"hard_timeout":30,"priority":11111,"flags":1,"match":{"in_port":1},更新交換機統(tǒng)計信息"actions":[{"type":"OUTPUT","port":2}]}'http://localhost:8080/stats/flowentry/modify_strict(d)刪除所有匹配的流條目刪除交換機的所有匹配流條目。用法:更新交換機統(tǒng)計信息MethodPOSTURI/stats/flowentry/delete(d)刪除所有匹配的流條目請求消息正文更新交換機統(tǒng)計信息AttributeDescriptionExampleDefaultdpidDatapathID(int)1(Mandatory)cookieOpaquecontroller-issuedidentifier(int)10cookie_maskMaskusedtorestrictthecookiebits(int)10table_idTableIDtoputtheflowin(int)00idle_timeoutIdletimebeforediscarding(seconds)(int)300hard_timeoutMaxtimebeforediscarding(seconds)(int)300priorityPrioritylevelofflowentry(int)111110buffer_idBufferedpackettoapplyto,orOFP_NO_BUFFER(int)1OFP_NO_BUFFERout_portOutputport(int)1OFPP_ANYout_groupOutputgroup(int)1OFPG_ANYflagsBitmapofOFPFF_*flags(int)10matchFieldstomatch(dict){"in_port":1}{}#wildcardedactionsInstructionset(listofdict)[{"type":"OUTPUT","port":2}][]#DROP(d)刪除所有匹配的流條目使用示例:$curl-XPOST-d'{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"idle_timeout":30,"hard_timeout":30,"priority":11111,"flags":1,"match":{"in_port":1},更新交換機統(tǒng)計信息"actions":[{"type":"OUTPUT","port":2}]}'http://localhost:8080/stats/flowentry/delete6.2.3開源控制器的RESTAPIFloodlight的RESTAPIFloodlightdRESTAPI包括四類,分別為ACL(AccessControlList)、Firewall、StaticEntryPusher、VirtualNetworkFilter6.2.3開源控制器的RESTAPI用法示例
URIMethodDescriptionArgumentsControllerVersionControllerAPIs/wm/core/controller/switches/jsonGETListofallswitchDPIDsconnectedtothecontrollernoneall/wm/core/controller/summary/jsonGETControllersummary(#ofSwitches,#ofLinks,etc.)noneall/wm/core/module/all/jsonGETRetrieveallregistered(butnotloaded)modules.noneall/wm/core/module/loaded/jsonGETRetrieveallmodulesactivelyloadedbythemoduleloader.noneall/wm/core/memory/jsonGETCurrentcontrollermemoryusagenoneall/wm/core/health/jsonGETStatus/HealthofRESTAPInoneall/wm/core/version/jsonGETControllerversionandnamenoneall/wm/core/system/uptime/jsonGETControlleruptimenoneall/wm/core/storage/tables/jsonGETTablespresentinStorage.noneall6.2.3開源控制器的RESTAPI用法示例
URIMethodDescriptionArgumentsControllerVersionStatisticsAPIs/wm/statistics/config/enable/jsonPOSTPUTEnablestatisticscollectionSendemptystringv1.2andup/wm/statistics/config/disable/jsonPOSTPUTDisablestatisticscollectionSendemptystringv1.2andup/wm/statistics/bandwidth/<switchId>/<portId>/jsonGETFetchRX/TXbandwidthconsumptionswitchId:ValidSwitchDPIDascolon-delimitedhexstringorinteger.Use"all"forallswitches.portId:Validswitchportnumberv1.2andup/networkService/v1.1/tenants/<tenant>/networksGETShowsallnetworksandtheirgateway,ID,andhostsmacinjsonformat.
URIargument:
tenant:Currentlyignored.
v0.91andup6.2.3開源控制器的RESTAPI用法示例
URIMethodDescriptionArgumentsControllerVersionFirewallAPIs/wm/firewall/module/status/jsonGETQuerythestatusofthefirewall.
all/wm/firewall/module/enable/jsonPUTEnablethefirewall.Sendemptystringall/wm/firewall/module/disable/jsonPUTDisablethefirewall.Sendemptystringall/wm/firewall/module/subnet-mask/jsonGETGetthefirewall'sconfiguredsubnetmask.Noneall
POSTSetthesubnetmaskofthefirewall."subnet-mask":"X.X.X.X",whereX.X.X.XisavalidIPv4subnetmask.all6.2.3開源控制器的RESTAPI用法示例
URIMethodDescriptionArgumentsControllerVersionControllerPerformanceAPIs/wm/performance/jsonGETGetcontrollerperformancemonitoringstatus
nonev0.9andup/wm/performance/enable/jsonPOSTEnablecontrollerperformancemonitoringnonev0.9andup/wm/performance/disable/jsonPOSTDisablecontrollerperformancemonitoringnonev0.9andup/wm/performance/reset/jsonPOSTResetcontrollerperformancemonitoringnonev0.9andup/wm/performance/data/jsonGETRetrievetheaveragepacket-inprocessingtimeofthecontrollernonev0.9andup6.2.3開源控制器的RESTAPI檢索交換機統(tǒng)計信息
b)獲取統(tǒng)計數(shù)據(jù)
獲取在URI中使用數(shù)據(jù)路徑ID指定的交換機的desc統(tǒng)計信息。
用法:MethodGETURI/stats/desc/<dpid>6.2.3開源控制器的RESTAPI檢索交換機統(tǒng)計信息
b)獲取統(tǒng)計數(shù)據(jù)
獲取在URI中使用數(shù)據(jù)路徑ID指定的交換機的desc統(tǒng)計信息。
用法:MethodGETURI/stats/desc/<dpid>6.3.1 RESTCONF概述6.3.2 資源模型6.3RESTCONF協(xié)議6.3.3
消息6.3.4
操作6.3.1RESTCONF概述REST概念介紹:REST是RepresentationalStateTransfer的縮寫,即表現(xiàn)層狀態(tài)轉(zhuǎn)化REST是一種基于HTTP的架構(gòu)風(fēng)格,不是標(biāo)準(zhǔn)網(wǎng)絡(luò)中的實體被視為資源,資源有多種表現(xiàn)形式,如XML、JSON等狀態(tài)轉(zhuǎn)移指的是資源狀態(tài)的改變,由于HTTP是無狀態(tài)的,狀態(tài)保存在服務(wù)端。當(dāng)對服務(wù)端的資源進行操作時,必然存在數(shù)據(jù)狀態(tài)的改變由于狀態(tài)的改變基于表現(xiàn)層,所以稱為表現(xiàn)層狀態(tài)轉(zhuǎn)移6.3.1RESTCONF概述REST實現(xiàn)細節(jié):資源通過URI定位HTTP的Header中的Content-Type和Accept定義了資源的表現(xiàn)層形式使用HTTP中CURD動作(Create,Put,Get,Delete,patch..)去改變服務(wù)端的資源狀態(tài)。REST應(yīng)用示例通過GET請求訪問書店圖書資源:GET/products6.3.1RESTCONF概述RESTCONF概念引入:RESTCONF是RESTCONF(RESTfulConfiguration)的縮寫,是一種通過REST來實現(xiàn)對網(wǎng)絡(luò)設(shè)備管理的協(xié)議其本質(zhì)和NETCONF很像,使用YANG進行數(shù)據(jù)的定義和約束,使用HTTP進行交互。使用NETCONF中datastore的概念,進行信息的儲存RESTCONF是一種基于HTTP的協(xié)議,提供RESTful風(fēng)格的編程接口,支持對網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)進行增、刪、改、查操作6.3.1RESTCONF概述RESTCONF的必要性和優(yōu)勢:隨著網(wǎng)絡(luò)規(guī)模和復(fù)雜性的增加,自動化運維需求上升NETCONF雖然提供了基于RPC的應(yīng)用編程接口,但已不能滿足新的需求RESTCONF結(jié)合了NETCONF和HTTP的優(yōu)點,提供了符合REST風(fēng)格的標(biāo)準(zhǔn)化接口為用戶提供了高效開發(fā)WEB化運維工具的能力RESTCONF與NETCONF比較6.3.2資源模型RESTCONF協(xié)議操作的對象是有層次結(jié)構(gòu)的資源,首先處理它的頂級API資源。每個資源代表設(shè)備中的一個可管理組件??梢哉J為資源是由概念數(shù)據(jù)集合和允許操作該數(shù)據(jù)的方法集組成的。它可以包含子節(jié)點,即嵌套資源或域。子資源的類型和允許操作它們的方法是數(shù)據(jù)模型相關(guān)的。資源有它自己的媒體類型標(biāo)識符,用HTTP響應(yīng)頭中的“Content-Type”字段表示。一個資源可以包含0個或多個嵌套資源。一個資源的創(chuàng)建和刪除操作可以獨立于它的父資源,如果它的父資源存在的話。6.3.2資源模型客戶端應(yīng)該首先獲取頂級API資源,使用入口點URI“/.wellknown/restconf”RESTCONF協(xié)議沒有包含資源發(fā)現(xiàn)機制。相反,服務(wù)器端發(fā)布的YANG組件定義了這些機制,用于構(gòu)建可預(yù)測操作和數(shù)據(jù)資源標(biāo)識符。當(dāng)獲取子資源時,使用請求參數(shù)“depth”可以控制返回子資源的層級深度。這個參數(shù)可以和GET方法一起使用,用于發(fā)現(xiàn)指定資源中的子資源。RESTCONF媒體類型6.3.3消息RESTCONF協(xié)議中使用的消息有個請求消息頭和響應(yīng)消息頭,它們通常應(yīng)用于數(shù)據(jù)來源。RESTCONF請求消息頭RESTCONF響應(yīng)消息頭6.3.3消息RESTCONF報文編碼:依據(jù)RFC2616進行HTTP編碼。使用UTF-8字符集。報文文本位置:報文文本位于HTTP消息體中。編碼格式內(nèi)容編碼為JSON或XML。XML編碼規(guī)則遵循RFC6020。相同的編碼規(guī)則適用于所有的XML內(nèi)容。JSON編碼規(guī)則遵循I-D.lhotka-netmod-json。普通的JSON不能被使用,因為有特殊的編碼規(guī)則被用來處理多種模塊的命名空間,還要提供一致的數(shù)據(jù)類型處理。6.3.3消息編碼格式請求輸入文本編碼格式通過Content-Type頭定義。如果存在一個報文體要發(fā)送,這個字段就必須出現(xiàn)。響應(yīng)輸出內(nèi)容編碼通過Accept頭或查詢參數(shù)“格式”標(biāo)識。查詢參數(shù)的“格式”,如果沒有指定,就使用請求輸入的編碼格式默認輸出編碼格式為XML。文件擴展編碼在請求中不被用來識別格式編碼。
YANG到JSON映射映射遵循I-D.lhotka-netmod-json編碼規(guī)則。該方式不不支持屬性,因為YANG不支持數(shù)據(jù)節(jié)點中的元數(shù)據(jù)定義。RESTCONF元數(shù)據(jù)按JSON方式編碼在一個特定的數(shù)據(jù)節(jié)點中一個元數(shù)據(jù)實例只能出現(xiàn)0次或1次根據(jù)[I-D.lhotka-netmod-json]編碼規(guī)則,一個元數(shù)據(jù)實例與一個資源相關(guān)的編碼就好像一個YANG葉子類型的字符串,除了以"@"(%40)字符開頭的標(biāo)示符。一個元數(shù)據(jù)實例關(guān)聯(lián)到一個資源內(nèi)的域的編碼,就好像它是一個容器的元數(shù)據(jù)的值和容器內(nèi)域的值的原生編碼。這種編譯方式根據(jù)[I-D.lhotka-netmod-json]原則,除了以"@"(%40)開頭的元數(shù)據(jù)外。由容器的名稱與容器的值組成的鍵值對將會在這個容器中重復(fù)出現(xiàn),這個容器也包含域的名稱與實際值的鍵值對。RESTCONF元數(shù)據(jù)按JSON方式編碼緩存問題由于數(shù)據(jù)存儲的內(nèi)容存在不可預(yù)測的時間變化,RESTCONF服務(wù)器的響應(yīng)通常不會被緩存。對每個回應(yīng)來說,服務(wù)器應(yīng)該包括一個“緩存-控制”頭,它指定是否應(yīng)該緩存響應(yīng)?!癙ragma”頭可以指定“不-緩存”也可以指定不支持“緩存-控制”頭。緩存控制替代使用HTTP緩存的,是客戶端應(yīng)該要追蹤“ETag”和/或“最后-修改”頭返回的服務(wù)器數(shù)據(jù)存儲資源(或數(shù)據(jù)資源-如果服務(wù)器支持的話)。檢索請求一個資源可以包括標(biāo)題,如“如果沒有匹配(IfNoneMatch)”或“如果修改是因為(IfModifiedSince)“這會讓服務(wù)器返回一個“304”錯誤,即如果資源沒有改變就不可修改狀態(tài)欄。如果這個目標(biāo)資源的元數(shù)據(jù)被維護著,客戶端可以使用的方法來檢索消息頭,這應(yīng)該包括“ETag”和“最后-修改”頭。6.3.3消息RESTCONF元數(shù)據(jù)按JSON方式編碼RESTCONF協(xié)議使用HTTP方法來為針對特別資源的請求定義CRUD操作。6.3.4操作OPTIONSOPTIONS方法是由客戶端發(fā)送的,用來確定服務(wù)器針對特定資源支持哪種方法。它支持所有的多媒體類型。請求必須包含一個至少包含了輸入點組件的URI請求。服務(wù)器會返回包含“204NoConten”的“Status-Line”頭,并且在響應(yīng)中包含一個“Allow”頭。這個頭將會根據(jù)目標(biāo)多媒體資源類型來填值。響應(yīng)中可能也會其他頭。RESTCONF元數(shù)據(jù)按JSON方式編碼6.3.4操作OPTIONS示例:客戶端可能請
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小區(qū)物資交易合同范例
- 勞務(wù)出口合同范例
- 批量采購衛(wèi)浴合同范例
- 賣方期貨合同范例
- 和花卉公司合同范例
- 個人建房合同范例
- 乳品批發(fā)銷售合同范例
- 是股權(quán)轉(zhuǎn)讓合同范例
- 制定合同范例
- 毛坯車庫出售合同范例
- 幼兒園教師職稱五套試題及答案
- 廣東2024年廣東省通信管理局局屬單位招聘筆試歷年典型考題及考點附答案解析
- 報告文學(xué)研究
- 棄土綜合利用協(xié)議
- 幼兒園中班語言課件:《小花貓交朋友》
- SH/T 3065-2024 石油化工管式爐急彎彎管工程技術(shù)規(guī)范(正式版)
- 2024年《藝術(shù)概論》知識考試題庫(附答案)
- GB/T 43878-2024旋挖鉆機截齒
- 攤位安全責(zé)任書
- 《紙質(zhì)文物修復(fù)與保護》課件-03紙質(zhì)文物病害類型
- 美育的知與行智慧樹知到期末考試答案2024年
評論
0/150
提交評論