SDN
直接理解
SDN是在2009年左右出現(xiàn)的一種新型網(wǎng)絡(luò)結(jié)構(gòu),它將數(shù)據(jù)層面與控制層面分離,使用中央控制器完成網(wǎng)絡(luò)的操作和管理,并通常采用OpenFlow協(xié)議作為其核心通信協(xié)議,擁有著集中式控制、可編程、部署靈活性和數(shù)據(jù)層面與控制層面相互分離等多種優(yōu)勢(shì)。并且作為一種新型的網(wǎng)絡(luò)結(jié)構(gòu),其通信協(xié)議、三層體系結(jié)構(gòu)和仿真實(shí)驗(yàn)都非常有意思。
SDN體系結(jié)構(gòu)
典型的SDN架構(gòu)定義如下圖所示。
SDN體系結(jié)構(gòu)由下到上分別為轉(zhuǎn)發(fā)層(又稱(chēng)為基礎(chǔ)設(shè)施層)、控制層和業(yè)務(wù)層(又稱(chēng)為應(yīng)用層)。其中轉(zhuǎn)發(fā)層表示網(wǎng)絡(luò)底層的物理轉(zhuǎn)發(fā)設(shè)備,維護(hù)著流表結(jié)構(gòu),數(shù)據(jù)流中的分組則按照流表中的規(guī)則進(jìn)行轉(zhuǎn)發(fā);中間的控制層集中維護(hù)和控制網(wǎng)絡(luò)的各種狀態(tài),并負(fù)責(zé)流表的生成、配置和維護(hù),同時(shí)需要為業(yè)務(wù)層提供易用的北向接口;最上面的業(yè)務(wù)層根據(jù)不同的應(yīng)用需求來(lái)實(shí)現(xiàn)不同功能的應(yīng)用程序。控制層通過(guò)南向接口(例如OpenFlow協(xié)議)與轉(zhuǎn)發(fā)層進(jìn)行通信,并獲取轉(zhuǎn)發(fā)層的網(wǎng)絡(luò)設(shè)備的信息;控制層與業(yè)務(wù)層之間由可擴(kuò)展的北向接口完成交互,北向接口由各個(gè)控制器的Rest API提供,并允許開(kāi)發(fā)者根據(jù)實(shí)際網(wǎng)絡(luò)需求開(kāi)發(fā)。
在SDN體系結(jié)構(gòu)中,開(kāi)發(fā)者能夠獲取轉(zhuǎn)發(fā)層中網(wǎng)路設(shè)備的實(shí)時(shí)狀態(tài)信息,通過(guò)調(diào)用控制層的北向Rest API接口,編程實(shí)現(xiàn)不同功能的應(yīng)用程序;最后通過(guò)控制器和南向接口(OpenFlow)以流表的形式下發(fā)到網(wǎng)絡(luò)設(shè)備中,從而完成網(wǎng)絡(luò)的配置。
OpenFlow協(xié)議介紹
OpenFlow協(xié)議是SDN架構(gòu)中第一個(gè)定義在控制層和轉(zhuǎn)發(fā)層之間的標(biāo)準(zhǔn)通信接口,基于OpenFlow的SDN技術(shù)可以使開(kāi)發(fā)者動(dòng)態(tài)管理網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
最常見(jiàn)的OpenFlow流表主要由三個(gè)部分組成:匹配域(Match Fields)、計(jì)數(shù)器域(Counters)和指令域(Instructions),如下圖所示。
(1)匹配域,如下圖所示:一共包含12個(gè)域,每個(gè)域內(nèi)包含一個(gè)值,分別對(duì)應(yīng)TCP/IP體系結(jié)構(gòu)中:
- 一層物理層中入端口(Ingress Port);
- 二層數(shù)據(jù)鏈路層中源MAC地址(Ether source)、目的MAC地址(Ether dst)、以太網(wǎng)類(lèi)型(EtherType)、VLAN標(biāo)簽(VLAN id)、VLAN優(yōu)先級(jí)(VLAN priority);
- 三層網(wǎng)絡(luò)層中源IP(IP src)、目的IP(IP dst)、IP協(xié)議字段(IP proto)、IP服務(wù)類(lèi)型IP ToS bits);
- 四層傳輸層中TCP/UDP源端口號(hào)(TCP/UDP src port)、 TCP/UDP目的端口號(hào)(TCP/UDP dst port)。
(2)計(jì)數(shù)器域,可以用來(lái)統(tǒng)計(jì)每個(gè)端口、每條流、每張表和每個(gè)隊(duì)列上的流量信息。
(3)指令域,為每條流表項(xiàng)對(duì)應(yīng)的行動(dòng),表示對(duì)匹配該流表項(xiàng)處理方法,其中可以有0或者多個(gè)行動(dòng)。若一條流表項(xiàng)的指令域?yàn)榭?#xff0c;則默認(rèn)操作是丟棄數(shù)據(jù)包。若一個(gè)流表項(xiàng)的指令域內(nèi)有多個(gè)行動(dòng),則按照行動(dòng)的優(yōu)先級(jí)順序執(zhí)行。行動(dòng)分為必選行動(dòng)和可選行動(dòng),必選行動(dòng)中包括轉(zhuǎn)發(fā)或者丟棄,可選行動(dòng)中則包括按照傳統(tǒng)交換機(jī)處理、泛洪(除去入端口)、入隊(duì)和修改匹配域等。
如上圖所示數(shù)據(jù)包匹配流程:當(dāng)數(shù)據(jù)包到達(dá)后,從流表中的第一個(gè)流表項(xiàng)開(kāi)始匹配,若有匹配域相符合的流表項(xiàng),接著更新該條流表項(xiàng)對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù),然后根據(jù)流表項(xiàng)對(duì)應(yīng)指令域內(nèi)的指令進(jìn)行相應(yīng)操作;若沒(méi)有流表項(xiàng)被成功匹配,則轉(zhuǎn)發(fā)給控制器請(qǐng)求進(jìn)一步處理。
基于OpenFlow的SDN工作流程
上圖為基于OpenFlow的SDN工作流程:
1 終端PC機(jī)向網(wǎng)絡(luò)中發(fā)送一系列數(shù)據(jù)包;
2 數(shù)據(jù)包到達(dá)OpenFlow交換機(jī),若交換機(jī)中無(wú)匹配的流表,則通過(guò)第2步向控制器發(fā)送Packet-In消息,請(qǐng)求控制器下發(fā)處理流表,若交換機(jī)中有匹配的流表,則直接執(zhí)行第4步;
3 控制器下發(fā)流表(或Packet-Out消息)到交換機(jī)中;
4 交換機(jī)根據(jù)流表的信息將數(shù)據(jù)包轉(zhuǎn)發(fā)到下一個(gè)交換機(jī)中;
5 交換機(jī)若有匹配流表,執(zhí)行第7步,若無(wú)匹配流表,執(zhí)行類(lèi)似第2步;
6 類(lèi)似第3步;
7 交換機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)包到另一個(gè)終端PC機(jī)。
對(duì)比理解
https://www.zhihu.com/question/20279620
參考鏈接:
http://archive.openflow.org/documents/openflow-spec-v1.1.0.pdf
http://www.opendaylight.org/
https://www.opennetworking.org/sdn-resources/sdn-definition/
本文部分轉(zhuǎn)自http://blog.nsfocus.net/software-defined-network-sdn/
如果您需要了解更多內(nèi)容,可以加入QQ群:570982169;直接詢(xún)問(wèn):010-68438880
總結(jié)
- 上一篇: 路由和交换
- 下一篇: 应用层组播、IP组播