一間; 交換機是我(wǒ)(wǒ通又)們網絡領域應用最爲廣泛的網絡互聯設備,其主要功能是現新完成各端口之間分(fēn)組的交換功能。交換機僅做分(fēn)組交草訊換,不對分(fēn)組進行任何數據修改。交換機的用樂端口沒有IP與MAC的屬性。端口數據IO一(yī)般爲全雙工(gōng學他)模式,即可同時進行分(fēn)組收發工(gōng)作。端口速件一率通常爲10/100/1000M自适應模式,更高速率可支持到10G、2雜微5G、40G、100G和400G。交換機的端口數量一(yī朋對)般大(dà)于2,小(xiǎo)于64國子。
1)二層交光我換原理
城相二層交換的原理是必須熟知(zhī)的,網絡基礎課程教材或草冷網絡上都能找到。
&n唱頻bsp; 2)Linux系統操作
&nb可道sp; 我(wǒ)(wǒ)們的開(kā少能i)發環境都是基于Linux系統,故想要年跳在此學習二層交換機的設計與實現,一(yī)日飛些必備的Linux操作方法與常用命令要會。推薦《鳥哥私房菜》一(yī)書微他(shū),可網上搜索。
&動山nbsp; 3)C語言編程
&電金nbsp;平台開(kāi)發的編程語言全部物又是C語言,這也是接觸計算機學生(shēng)話輛通常會學習到的語言,更是計算機專業的必學專業課。不求精通,但求懂說普通,一(yī)般的C程序編寫、庫函數調冷媽用和基本打印調試等操作要會。
4)一風區(yī)套OpenBox-S4開(kāi)筆她發平台
如題所他銀述,從一(yī)開(kāi)始,便是從一(yī)個Op新金enBox-S4開(kāi)發平台開(kāi章什)始,二層交換的實驗和我(wǒ)(wǒ)們後續所有相關的實驗基我森本上是構建在這個開(kāi)發平台之上。如果沒有這個平台兵費也可以學習這些實驗的設計與實現過程,隻是驗證和測試起來會麻煩一(yī)些。
聽睡
相遠OpenBox-S4是我(wǒ)(wǒ)們用來做實驗開(kāi)發的平我紅台,平台完成了軟硬件數據IO的基本功能,提供規範的軟件UA編程開(kāi)樂事發模式,讓用戶不需要關心平台如何完成軟硬件數據IO和系統討現之間的分(fēn)組調度與轉發功能,可以将全部錯關精力集中(zhōng)在本身業務系統的設計上。所以平台并不是本次網絡原友很理性功能實現的重點,隻是一(yī)個使用工(gōng)具。使用該平台需要對其有著錢個基本的了解,會簡單的開(kāi)發編程工(gōng)作。呢關
&影朋nbsp;
1)整體(飛業tǐ)架構
 山下;OpenBox是湖南(nán)新實的主打品牌,該品牌擁有多種不同下水型号具體(tǐ)産品。OpenBox-S4是農還一(yī)款專爲計算機網絡實驗課程打造的軟硬件全功能可編程平化場台,平台基于FAST架構實現,是一(yī)種靈活的中物軟硬件協同方式數據處理模型。整體(tǐ)架構如圖1所示,具體校制(tǐ)的FAST架構介紹與OpenBox-S4設備平台介紹見
《FAST簡介》和
《OpenBox網絡全功能可編程平台:工(gōn內務g)欲善其事,必先利其器!》。
圖1 整體(tǐ)框架圖
長空
&n媽聽bsp;2)數據格式
&n購會bsp;在FAST框架下(xià),硬件模林個塊之間、軟件模塊之間和軟硬件之間的交互數據采用統一(yī)标準定民討義格式。格式規定在完整的以太網數據幀前增加了32字節的分(fēn)組met工美adata内容,用來标識分(fēn)組的輸入端口、長度、輸出和場端口、接收時刻和流标識等等,具體(tǐ)如表1所示:
&n子城bsp; 3)UA數據處理流程
器從 UA是用戶應用(User Application),運行在用戶态的廠刀可執行程序。應用程序通過向系統注冊和硬件規則配置,将這動符合業務功能要求的分(fēn)組從硬件提取到軟件,并做行由FAST架構開(kāi)發環境的數據路由模塊将該特征數據分(fē紅男n)發給相應的注冊用戶。程序注冊時需要提交一(yī)個分(飛友fēn)組處理的回調函數,當系統接收到本程序的業務分(fē員場n)組時,會主動調用程序的回調函數将分(fēn)組交付給用戶的業務邏輯處車離理。用戶處理完分(fēn)組後可通過系統發送函數将分(fē校風n)組轉發給其他應用模塊(用戶應用UA、普通Soc用做ket應用CA、内核應用KA和硬件應用HA)進秒來行處理。如果是直接從硬件發送,則分(fēn)組的發送字段中(zhō用友ng)的dstmid直接填寫HA的編号(硬件發送HA的ID爲5)。
化一
&綠街nbsp;4)編程API
i.注快店冊UA
&n男哥bsp; fast_ua_init嗎讀(mid,callback):向系統注冊一(yī)個UA,是UA麗男編程的核心函數。聲明自己的模塊ID号和接收到分(fē妹國n)組後的回調處理函數。
&nbs車都p; ii.接收分(f南理ēn)組
&nbs少可p;callback(pkt,len):開(北多kāi)源版本的接收分(fēn)組不是用戶主動請求式方法,爲系統日些回調方式,即系統接收到了一(yī)個符合UA的模塊ID号的分(fēn)組後,計懂會在系統環境調用UA注冊的callback函數,将分作鐘(fēn)組傳遞給該函數進行處理。
&n這北bsp; iii.發送分(fēn)組
 綠科; fast_ua_send(pkt,謝什len):将一(yī)個處理完成的分(fēn)組發送到其他模塊票來,包括其他UA、HA、CA或HA。隻需要将分(fēn)組metadata地日字段中(zhōng)的目的模塊ID号設置到謝爲對應模塊的編号即可。
iv.機雪規則配置
&n西身bsp; FAST的硬件HA中(zhōng)包含查匠見表匹配功能模塊,可以支持硬件規則的配置。規則匹配模塊既可月做支持細粒度的具體(tǐ)流屬性配置,也可支持全表默認就知規則配置。
在開(k照光āi)發自己的二層交換機功能之前,可以先搭建村藍測試環境,驗證一(yī)下(xià)系統自帶的二層信分交換機功能,從其運行輸出中(zhōng)進一(yī)步長土了解交換原理與數據處理流程。
兒訊 1)構建環境
&n道玩bsp;測試環境至少需要一(yī)台OpenBox-S4設備多學、兩台網絡通信測試主機和一(yī)台控制主讀們機,控制主機主要用來連接S4設備,運行系統命令、編寫代碼和編譯程序等功能。拓能頻撲連接圖如下(xià)所示:
二層交換驗證拓撲圖
2)到下開(kāi)發平台操作
有關 S4設備支持串口與網口兩種登錄管理方式,均可使理器用putty工(gōng)具連接,工(g區做ōng)具使用請網上搜索。
 都爸; 平台是一(yī)個小(xiǎo)型L讀離inux主機系統,與普通Linux服務差異不煙我大(dà),故在上面的命令操作、代碼修改與編譯,與站到學生(shēng)在虛拟機環境或Linux服務器上的操作使用完全一玩如(yī)緻。
3)和妹交換驗證
&n身藍bsp; 通過串口或網口登錄平台後,直接在命令話這行終端輸入命令,即可啓動二層交換機功能。
#l2switch
fastU->REG Version:201808對男27,OpenBox HW Version:203020學藍0722
FAST UA REG->from pid:902,state:草現21,mid:129
fastU->Register UA to FAST Kernel章家! Wait Reply......
fastU->UA->pid:902,mid:129,Register O錯西K!
fastU->libua version:20180827師從
Create nm08_mac_aging thread OK他到!
aging[0]->invalid mac:0坐問
fastU->fast_ua_recv......
ID PORT0 PORT1 PORT2個來 PORT3
0 . . . .人歌
aging[1]->invalid mac:0
ID PORT0 PORT1 PORT2 遠費 PORT3
0 . . . 了業 .
aging[2]->invalid mac林很:0
&n呢靜bsp;建議在平台運行命令時使用串口方式登錄,斷開(kāi商如)連線後,系統命令仍可正常工(gōng)作,而且謝秒控制主機也可充當一(yī)台網絡測試主機。如果是網絡連視拍接,必須确保連接網絡的通路持續保持,否則管理網絡斷開(k熱件āi)後,系統命令也會随着鏈路斷開(kāi)而被停止,導緻系統命令功能無又花法運行。
&n厭我bsp; 4)觀察與分(fēn)析交換流程
睡機
&n紙雪bsp; a)端口接收到一(yī間火)個分(fēn)組,在回調函數中(zhōng)打印老作輸出
inport:0,dstmid:129,le議不n:130,dmac:B8:27:EB:C1:D1:39鄉快,smac:B8:27:EB:D8:83:2市和0
&nbs土從p; b)在端口0上學習到一(yī)個新M湖人AC地址,存儲在表項索引爲0的位置
learn_smac->add new MAC,port:木鐵0,index:0
&nbs個還p; c)根據目的MAC查表,得到返煙子回結果(-1表示沒有查到匹配的MAC地址)
find_dmac->ret = -1
 學房;d)泛洪發出分(fēn)組,分(fēn)組輸入端口爲0老見,4端口設備泛洪到1,2,3端口輸出
------pkt_send_flood------
pkt_send_normal->0xb4c00中路468,outport:1,len:130業了
pkt_send_normal->0xb4c司廠00468,outport:2,len:13多視0
pkt_send_normal->0xb4c00468,outport哥員:3,len:130
 兒是; e)正常發送一(yī)為知個分(fēn)組,輸出端口爲0
pkt_send_normal->0xb4c00468,outpor件雜t:0,len:130
&nbs匠好p; 1)二層交換的數據處理流程
&nb拍廠sp; 二層交換的核心是将一(yī)對黑個端口輸入的分(fēn)組搬到另一(yī)個端口輸出,至于票現如何選擇輸出端口,則需要根據分(fēn)謝遠組中(zhōng)的目的MAC地址來确定。如何知(zhī家身)道一(yī)個目的MAC在哪個端口上呢?則需要在接收分(fēn)組技那的時候對分(fēn)組的源MAC進行學習。故二層交換的整體(tǐ)數據處開林理流程如下(xià):
1)從端口不商接收到一(yī)個分(fēn)組,攜帶了輸入端口号、長度和木醫完整以太網幀内容;
 哥行; 2)提取以太網幀的源MAC地址和輸入端快技口,保存到MAC轉發表中(zhōng);
&n為雨bsp;3)提取以太網幀的目的MAC地址,到MAC轉發表中(zhōng)查國志找,輸出查表結果;
看物 4)根據查表結果進行轉發;單播或泛洪發出。
飛光
2)音有開(kāi)發平台編程入門
&暗服nbsp;所有實驗内容均在OpenBox-S4平台進行西說,其FAST架構的核心優先不多說了,主要是該架構下(xià)軟件一我分(fēn)組與硬件分(fēn)組格式一腦暗(yī)緻,軟件邏輯功能實現後可以很方便老也的卸載到硬件實現,分(fēn)組可攜帶metad喝黑ata數據在軟硬件模塊之間傳遞,保留分(fēn)組解析狀态與處理狀态。友北
&nb購又sp;OpenBox-S4隻是一(yī)個我(wǒ)這得(wǒ)們設計系統的工(gōng)具,與具體(tǐ)實現網絡原理性功能無關,沒是腦有設備的用戶也可以在普通電(diàn)腦上參考本系列分(f慢的ēn)享文章完成二層交換機的設計與實現(僅分河但(fēn)組收發有點差異)。下(xià)面一(yī)篇文章将帶領大(dà)裡業家熟悉一(yī)下(xià)UA的編程規範與開(kāi)發流程(C語言的ma關上in函數加一(yī)個callbak函數)。人個
 商算; 歡迎您和學生(南錢shēng)們加入FAST開(kāi)源用議項目群溝通與探讨,一(yī)起體(tǐ)麗我驗不一(yī)樣的系統設計過程。請先加微信号151見做16127200後邀請入群。
關注FAST開(kāi)源社區
朋日
FAST一(yī)一(yī)開(kāi姐相)源、開(kāi)放(fàng)、高速、高效、可信就編程、可定義!軟硬件協同并行處理。