自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

初學(xué)者的SDN學(xué)習(xí)之路

網(wǎng)絡(luò)
Software Defined Network顧名思義軟件定義網(wǎng)絡(luò),可以簡(jiǎn)單地分為網(wǎng)絡(luò)和軟件兩個(gè)部分:軟件和網(wǎng)絡(luò)。

Software Defined Network顧名思義軟件定義網(wǎng)絡(luò),可以簡(jiǎn)單地分為網(wǎng)絡(luò)和軟件兩個(gè)部分:軟件和網(wǎng)絡(luò)。此外,通過(guò)使用OpenFlow協(xié)議來(lái)實(shí)現(xiàn)SDN是一種較為普遍的方式,所以本篇將從軟件和網(wǎng)絡(luò)以及OpenFlow三個(gè)方面進(jìn)行介紹。在研究SDN的研究者之中,有相當(dāng)大比例的網(wǎng)絡(luò)工程師,他們了解網(wǎng)絡(luò),精通網(wǎng)絡(luò),然而卻并不了解軟件開(kāi)發(fā)。除此之外,還有很大比例的研究者是軟件工程師,他們軟件開(kāi)發(fā)能力出色,然而并不了解網(wǎng)絡(luò)運(yùn)作的機(jī)制,在接觸SDN之前,他們的范圍僅僅只是應(yīng)用層,底層的東西交給全交給主機(jī)的協(xié)議棧了。還有一部分同學(xué)是像我這樣,通信工程出身,學(xué)的是物理層的編碼解碼,誤碼率,電磁波。不像計(jì)算機(jī)專業(yè)那些學(xué)生一樣,學(xué)習(xí)各種語(yǔ)言,操弄各種編譯器,混跡于github這種全球最大的男性交友網(wǎng)站。剩下最后一種就是又懂網(wǎng)絡(luò),又懂編程。這種人,我一般稱之為老師,是用來(lái)請(qǐng)教問(wèn)題的,比如地球-某某老師。一般的,他們不屑于看到這種文章,太low。

[[141209]]

 

本篇主要的目標(biāo)用戶是對(duì)網(wǎng)絡(luò)和軟件開(kāi)發(fā)都不太了解,或者網(wǎng)絡(luò)和編程開(kāi)發(fā)只擅長(zhǎng)一種的研究者。由于我也是一個(gè)初學(xué)者,所以僅當(dāng)做經(jīng)驗(yàn)分享吧。如有表達(dá)不對(duì)的地方,敬請(qǐng)指出,萬(wàn)分感謝。

網(wǎng)絡(luò)

軟件定義網(wǎng)絡(luò),如果不了解網(wǎng)絡(luò),那如何去定義一個(gè)你不了解的東西?如果不知道網(wǎng)絡(luò)中存在的問(wèn)題,如何使用SDN來(lái)改善?所以網(wǎng)絡(luò)知識(shí)至關(guān)重要。然而作為一個(gè)初學(xué)者,并不需要網(wǎng)絡(luò)各個(gè)方面都精通,也做不到,僅需學(xué)習(xí)基礎(chǔ)知識(shí),并選擇一個(gè)研究場(chǎng)景即可。

計(jì)算機(jī)網(wǎng)絡(luò)

學(xué)習(xí)網(wǎng)絡(luò)的必修課是計(jì)算機(jī)網(wǎng)絡(luò)。計(jì)算機(jī)網(wǎng)絡(luò)講述的是計(jì)算機(jī)網(wǎng)絡(luò)的運(yùn)作機(jī)制,都是極其基礎(chǔ)重要的知識(shí)。謝希仁前輩的《計(jì)算機(jī)網(wǎng)絡(luò)》是從底層往上層介紹,從物理層的hub到數(shù)據(jù)層的網(wǎng)橋和交換機(jī),到網(wǎng)絡(luò)層的路由器,最后講到TCP/UDP的傳輸層,止于應(yīng)用層,適合有通信背景的學(xué)習(xí)者?!队?jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》則是從另一個(gè)角度出發(fā),從應(yīng)用層向下介紹,擺脫了物理層的枯燥,這樣的思路更適合學(xué)習(xí)計(jì)算機(jī)出門(mén)的學(xué)習(xí)者。《CCNA學(xué)習(xí)指南》也是推薦的書(shū)籍之一,前部分內(nèi)容講解計(jì)算機(jī)網(wǎng)絡(luò)非常簡(jiǎn)單明了,更貼近于真實(shí)網(wǎng)絡(luò)規(guī)劃,可以當(dāng)做計(jì)算機(jī)網(wǎng)絡(luò)的進(jìn)階書(shū)籍閱讀。

學(xué)習(xí)完計(jì)算機(jī)網(wǎng)絡(luò)之后,學(xué)習(xí)者應(yīng)該懂得二層交換、三層路由,了解到OSI七層協(xié)議棧,也了解了TCP/IP,ARP,ICMP,DNS, DHCP。作為檢驗(yàn)標(biāo)準(zhǔn),讀者可以嘗試介紹一個(gè)客戶端主機(jī)和跨網(wǎng)段的服務(wù)器進(jìn)行通信的流程。

關(guān)于網(wǎng)絡(luò)協(xié)議,只需了解主要的一兩種,其他了解其作用即可,因?yàn)閰f(xié)議實(shí)在太多了,沒(méi)有必要學(xué)完。RIP、BGP、OSPF和IS-IS需要了解。如果研究的課題與路由協(xié)議相關(guān),則可詳細(xì)學(xué)習(xí),初期不建議深入學(xué)習(xí)。學(xué)習(xí)成果檢驗(yàn)是對(duì)比路由協(xié)議的差異,如RIP的廣播路由信息和OSPF的告知鄰居。

ARP,ICMP,DNS,DHCP這幾種功能型報(bào)文非常重要,均需了解其工作流程,具體的報(bào)文格式,可適當(dāng)了解關(guān)鍵字段。項(xiàng)目需要時(shí)再深入研究。

TCP/UDP的差別需要牢記,適合的應(yīng)用場(chǎng)景也許了解。關(guān)于TCP的狀態(tài)機(jī),建議嘗試記憶,TCP的三次握手建立連接,四次握手釋放連接是面試高頻題。

應(yīng)用層的僅需了解若干常用協(xié)議如SMTP,POP3,HTTP及其對(duì)應(yīng)的傳輸層的端口號(hào)即可。

網(wǎng)絡(luò)場(chǎng)景

當(dāng)學(xué)習(xí)了基礎(chǔ)的網(wǎng)絡(luò)知識(shí),學(xué)習(xí)者已經(jīng)具備了一定知識(shí)儲(chǔ)備,對(duì)網(wǎng)絡(luò)也有了基礎(chǔ)的了解。然而現(xiàn)網(wǎng)之復(fù)雜,并不是看了一本《計(jì)算機(jī)網(wǎng)絡(luò)》就可以了解的。網(wǎng)路可以按照規(guī)模分為局域網(wǎng),城域網(wǎng),廣域網(wǎng),也可以按照功能劃分成接入網(wǎng),傳輸網(wǎng)和核心網(wǎng)。當(dāng)然按照?qǐng)鼍皠澐志透嗔?。云?jì)算網(wǎng)絡(luò)的典型場(chǎng)景數(shù)據(jù)中心網(wǎng)絡(luò)是目前研究的熱門(mén)領(lǐng)域。以校園網(wǎng)為代表的園區(qū)網(wǎng)也是較為常見(jiàn)的SDN應(yīng)用部署場(chǎng)景??鐢?shù)據(jù)中心的互連互通、WAN的研究則是研究的另一個(gè)大方向。

選擇一個(gè)自己喜歡的應(yīng)用場(chǎng)景,進(jìn)行深入研究,并根據(jù)需求學(xué)習(xí)相關(guān)知識(shí),會(huì)大大提高學(xué)習(xí)的效率。比如我選擇學(xué)習(xí)數(shù)據(jù)中心網(wǎng)絡(luò),所以我需要學(xué)習(xí)一些云計(jì)算的知識(shí),需要了解數(shù)據(jù)中心中的網(wǎng)絡(luò)架構(gòu)。我推薦《騰云:云計(jì)算和大數(shù)據(jù)時(shí)代的網(wǎng)絡(luò)技術(shù)揭秘》作為云計(jì)算網(wǎng)絡(luò)知識(shí)的科普書(shū)籍。書(shū)中介紹了很多有用的知識(shí),包括云計(jì)算的起源,云計(jì)算和網(wǎng)絡(luò)的關(guān)系,網(wǎng)絡(luò)安全,以及數(shù)據(jù)中心網(wǎng)絡(luò)中的一些關(guān)鍵網(wǎng)絡(luò)技術(shù)。讀完你應(yīng)該了解到什么是TOR和EOR,知道了刀片服務(wù)器,了解到VN-TAG是用來(lái)標(biāo)識(shí)虛擬機(jī)到TOR的流量的,了解到VXLAN和NVGRE的作用,了解到交換機(jī)還可以組裝的,除了OVS之外還有NEXUS 1000v等產(chǎn)品。讀完這本書(shū),能對(duì)現(xiàn)網(wǎng)的一些技術(shù),以及產(chǎn)品有一些科普性質(zhì)的了解,對(duì)后續(xù)深入學(xué)習(xí)研究有很大幫助。

相信有了前面計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)作為鋪墊,再選定一個(gè)特定的研究場(chǎng)景,網(wǎng)絡(luò)方面的學(xué)習(xí)已經(jīng)不成問(wèn)題。

軟件開(kāi)發(fā)

軟件開(kāi)發(fā)是SDN學(xué)習(xí)中另一個(gè)重要方面,這方面我同樣不是行家,我也是新手,所以以下言論僅當(dāng)做自己的經(jīng)驗(yàn)介紹。

選擇一門(mén)語(yǔ)言,選擇一個(gè)控制器

根據(jù)自己的喜好,選擇一門(mén)語(yǔ)言,然后根據(jù)語(yǔ)言,選擇一個(gè)對(duì)應(yīng)的控制器,這是開(kāi)發(fā)的第一步。如我自己,在折騰了C/C++,Java,Python之后,最終還是皈依到了Python大法的旗下。根據(jù)Python語(yǔ)言,我選擇了由Python語(yǔ)言寫(xiě)的POX。POX無(wú)需安裝,直接可以運(yùn)行。同時(shí),POX代碼簡(jiǎn)單,初學(xué)者只需閱讀pox/forwarding文件夾下的代碼即可。

根據(jù)我們已有的網(wǎng)絡(luò)知識(shí),我們基本可以看懂pox/forwarding文件夾下的程序邏輯。以l2_learning.py為例,該文件完成了一個(gè)簡(jiǎn)單的二層交換的應(yīng)用,其邏輯為:記錄MAC地址和Port的對(duì)應(yīng)關(guān)系,轉(zhuǎn)發(fā)時(shí),查詢MactoPort表,若查詢成功,則轉(zhuǎn)發(fā),若失敗則泛洪。后來(lái)RYU出現(xiàn)了,封裝更好的,性能更好的RYU成為了我的首選。

在編程的過(guò)程中,需要進(jìn)行程序設(shè)計(jì),其中設(shè)計(jì)的算法以及數(shù)據(jù)結(jié)構(gòu)的知識(shí)在這里不多介紹,有興趣的讀者可以自行學(xué)習(xí)。

以項(xiàng)目為導(dǎo)向,先寫(xiě)起來(lái)

閱讀源碼需要有明確的目的性。最開(kāi)始可以先嘗試讀一些簡(jiǎn)單的如Simple switch之類的代碼,掌握一些簡(jiǎn)單的API的使用,理解基礎(chǔ)的內(nèi)容,然后再進(jìn)行深入的源碼閱讀。

在進(jìn)一步學(xué)習(xí)SDN開(kāi)發(fā)時(shí),建議以項(xiàng)目為導(dǎo)向,先寫(xiě)起來(lái),在嘗試中去解決問(wèn)題。在寫(xiě)的過(guò)程中遇到問(wèn)題再去查看源碼找關(guān)鍵點(diǎn),如此一來(lái)學(xué)習(xí)非常有效率,且學(xué)到的東西很快就可以用上,學(xué)習(xí)效果好。特別是在OpenFlow協(xié)議已經(jīng)經(jīng)過(guò)多個(gè)版本的擴(kuò)張,目前內(nèi)容已經(jīng)非常多的情況下,選擇性學(xué)習(xí)能幫助你降低學(xué)習(xí)的壓力,提高學(xué)習(xí)的效率。

時(shí)間充裕的情況下,你可以選擇好好閱讀那些你認(rèn)為重要的代碼。比我在經(jīng)歷了多個(gè)APP開(kāi)發(fā)之后,我覺(jué)得我需要好好了解一下RYU的內(nèi)部機(jī)制了。所以我花了三天,把從底層socket到協(xié)議解析,到事件分發(fā)到handler注冊(cè)的代碼認(rèn)真看了一遍,收益頗多。

學(xué)會(huì)Debug

寫(xiě)程序容易,調(diào)程序難。掌握正確的調(diào)試方法能大大提高開(kāi)發(fā)的效率。

為提高調(diào)試的效率,在程序設(shè)計(jì)的時(shí)候就需要非常注意。寫(xiě)程序時(shí)需要注意程序的設(shè)計(jì),比如成端的邏輯盡可能寫(xiě)成函數(shù);一個(gè)函數(shù)不得過(guò)長(zhǎng),最好別超過(guò)一個(gè)屏幕的行數(shù);盡可能模塊化地編程,可以提高代碼的重用率,將錯(cuò)誤域縮小到某模塊,某函數(shù),容易定位錯(cuò)誤。在調(diào)試的過(guò)程中,控制變量的思維方式可以大大提升效率。其他編碼風(fēng)格方面的要求,建議按照google的PEP8風(fēng)格進(jìn)行代碼編寫(xiě)。

對(duì)操作系統(tǒng)的熟悉和理解也將大大提高開(kāi)發(fā)效率。熟悉Linux的基本操作是必須的,如果不清楚,你可能需要自學(xué)一下linux和shell。在調(diào)試的過(guò)程中,錯(cuò)誤顯示一般是英文,所以能讀懂錯(cuò)誤信息,并學(xué)會(huì)谷歌是一項(xiàng)必備的技能。一般的問(wèn)題谷歌都可以解決。另外,加幾個(gè)SDN的技術(shù)群也是提高DEBUG效率的一個(gè)重要手段。

關(guān)于開(kāi)發(fā)的建議還有,構(gòu)建一套適合自己的、高效的開(kāi)發(fā)環(huán)境,以及做好版本控制。比如我自己,我只用sublime編譯器,編譯運(yùn)行和調(diào)試都直接在終端中進(jìn)行。版本控制使用git。版本控制的重要性不許贅述,詳情谷歌。

OpenFlow

目前應(yīng)用最廣泛的SDN實(shí)現(xiàn)協(xié)議:OpenFlow,是學(xué)習(xí)SDN中必須要學(xué)的核心內(nèi)容。在設(shè)計(jì)一個(gè)SDN的應(yīng)用時(shí),需要以下的步驟:

明確網(wǎng)絡(luò)應(yīng)用的邏輯

明確對(duì)應(yīng)的操作所采用的OpenFlow報(bào)文

根據(jù)應(yīng)用邏輯以及OpenFlow協(xié)議進(jìn)行編程開(kāi)發(fā)

比如一個(gè)簡(jiǎn)單的二層交換機(jī),首先我們明確了他的運(yùn)作機(jī)理是MAC學(xué)習(xí)和轉(zhuǎn)發(fā),然后明確轉(zhuǎn)發(fā)所需要使用的OpenFlow報(bào)文是:packet\_out和Flow\_mod,最后根據(jù)應(yīng)用邏輯以及OpenFlow協(xié)議對(duì)應(yīng)的報(bào)文,進(jìn)行編程開(kāi)發(fā)。

所以我們可以知道OpenFlow在SDN應(yīng)用中的重要性。

OpenFlow經(jīng)過(guò)這幾年的發(fā)展已經(jīng)從1.0版本發(fā)展到了1.5版本,初學(xué)者在學(xué)習(xí)的時(shí)候需要注意順序。建議先學(xué)習(xí)OF1.0版本,再學(xué)習(xí)OF1.3版本,更高版本根據(jù)需要進(jìn)行學(xué)習(xí)。

OpenFlow1.0版本是OpenFlow火起來(lái)時(shí)的第一個(gè)版本,其內(nèi)容并不多,Match域僅有12個(gè)字段,動(dòng)作種類也不多,同時(shí)也是單流表。對(duì)于初學(xué)者而言,學(xué)習(xí)1.0版本可以大大降低學(xué)習(xí)壓力,掌握OpenFlow核心內(nèi)容。在正確理解SDN,以及可以使用OpenFlow1.0協(xié)議開(kāi)發(fā)SDN應(yīng)用之后,可嘗試學(xué)習(xí)1.3版本協(xié)議。1.3版本較1.0版本內(nèi)容大幅增加。經(jīng)過(guò)幾個(gè)版本的迭代,OpenFlow1.3版本協(xié)議已經(jīng)有了三種表:

flow table

group table

meter table

動(dòng)作種類也得到了拓展,多流表的概念也變得成熟,Match匹配域已經(jīng)多達(dá)幾十個(gè),所以這時(shí)OpenFlow已經(jīng)將Match域分成幾類,并以O(shè)XM的形式呈現(xiàn)出來(lái)。多控制器寫(xiě)作的概念在1.3版本中也已經(jīng)相當(dāng)成熟。

OpenFlow1.3版本為SDN應(yīng)用開(kāi)發(fā)提供了很多便捷,開(kāi)發(fā)人員可以利用多流表,設(shè)計(jì)更多復(fù)雜的應(yīng)用邏輯。作為一個(gè)比較穩(wěn)定的版本,1.3版本成為繼1.0版本之后控制器支持最多的版本,所以此版本是SDN學(xué)習(xí)者應(yīng)該要學(xué)習(xí)的。

總結(jié)

SDN學(xué)習(xí)與其他研究方向相比,要求較高,需要了解軟件開(kāi)發(fā)以及網(wǎng)絡(luò),學(xué)習(xí)起來(lái),并不太容易。同樣作為初學(xué)者,我從大三開(kāi)始接觸,有幸有學(xué)長(zhǎng)帶著入門(mén),再后來(lái)由于網(wǎng)絡(luò)知識(shí)的缺陷,一度陷入不知道做什么的狀態(tài)。惡補(bǔ)了網(wǎng)絡(luò)知識(shí)之后,才慢慢走上正軌。然后最近我又遇到了編程上的難題,急需惡補(bǔ),急需努力提升自己的開(kāi)發(fā)能力。本篇學(xué)習(xí)筆記,是幾年來(lái)學(xué)習(xí)的粗略總結(jié),希望對(duì)SDN初學(xué)者有幫助。最

后,興趣是最好的老師,如果你喜歡SDN這個(gè)方向,就會(huì)學(xué)得很快。如果在學(xué)習(xí)的過(guò)程中沒(méi)有成就感,沒(méi)有樂(lè)趣,也可以試試別的方向,做自己喜歡的事最重要。

責(zé)任編輯:何妍 來(lái)源: SDNLAB
相關(guān)推薦

2015-07-14 09:25:19

SDN

2011-08-10 16:44:56

iPhone代理設(shè)計(jì)模式

2009-09-28 09:45:00

CCNA學(xué)習(xí)經(jīng)驗(yàn)CCNA

2020-09-08 19:03:41

Java代碼初學(xué)者

2009-06-12 15:16:53

Hibernate學(xué)習(xí)

2024-12-25 08:00:00

機(jī)器學(xué)習(xí)ML管道人工智能

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2009-09-28 10:34:43

NET初學(xué)者學(xué)習(xí)建議

2011-08-24 17:05:01

Lua

2011-04-12 10:13:24

2009-07-08 09:32:40

ScalaScala與Java

2014-08-06 10:19:38

編程語(yǔ)言程序員

2022-01-21 09:05:34

機(jī)器學(xué)習(xí)工具安全

2021-12-09 05:58:51

編程語(yǔ)言開(kāi)發(fā)代碼

2017-05-25 11:14:21

機(jī)器學(xué)習(xí)算法神經(jīng)網(wǎng)絡(luò)

2017-05-25 13:37:46

機(jī)器學(xué)習(xí)算法神經(jīng)網(wǎng)絡(luò)

2011-07-04 14:14:54

java

2022-10-10 15:28:45

負(fù)載均衡

2009-12-08 09:45:50

調(diào)用WCF
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)