二層交換機原型設計(jì)與實現(xiàn)(一)
發布時(shí)間:2021-04-30
交換機是我們網絡領域應用(yòng)最爲廣泛的網絡互聯設備,其主要功能(néng)是完成各端口之間分組的交換功能(néng)。交換機僅做分組交換,不對(duì)分組進行任何數據修改。交換機的端口沒有IP與MAC的屬性。端口數據IO一般爲全雙工(gōng)模式,即可同時(shí)進行分組收發工(gōng)作(zuò)。端口速率通常爲10/100/1000M自(zì)适應模式,更高(gāo)速率可支持到(dào)10G、25G、40G、100G和(hé)400G。交換機的端口數量一般大(dà)于2,小(xiǎo)于64。
1)二層交換原理(lǐ)
二層交換的原理(lǐ)是必須熟知(zhī)的,網絡基礎課程教材或網絡上(shàng)都能(néng)找到(dào)。
2)Linux系統操作(zuò)
我們的開(kāi)發環境都是基于Linux系統,故想要在此學習二層交換機的設計(jì)與實現(xiàn),一些(xiē)必備的Linux操作(zuò)方法與常用(yòng)命令要會(huì)。推薦《鳥哥(gē)私房菜》一書,可網上(shàng)搜索。
3)C語言編程
平台開(kāi)發的編程語言全部是C語言,這(zhè)也(yě)是接觸計(jì)算(suàn)機學生通常會(huì)學習到(dào)的語言,更是計(jì)算(suàn)機專業的必學專業課。不求精通,但(dàn)求普通,一般的C程序編寫、庫函數調用(yòng)和(hé)基本打印調試等操作(zuò)要會(huì)。
4)一套OpenBox-S4開(kāi)發平台
如題所述,從(cóng)一開(kāi)始,便是從(cóng)一個OpenBox-S4開(kāi)發平台開(kāi)始,二層交換的實驗和(hé)我們後續所有相關的實驗基本上(shàng)是構建在這(zhè)個開(kāi)發平台之上(shàng)。如果沒有這(zhè)個平台也(yě)可以學習這(zhè)些(xiē)實驗的設計(jì)與實現(xiàn)過程,隻是驗證和(hé)測試起來(lái)會(huì)麻煩一些(xiē)。
OpenBox-S4是我們用(yòng)來(lái)做實驗開(kāi)發的平台,平台完成了(le)軟硬件數據IO的基本功能(néng),提供規範的軟件UA編程開(kāi)發模式,讓用(yòng)戶不需要關心平台如何完成軟硬件數據IO和(hé)系統之間的分組調度與轉發功能(néng),可以将全部精力集中在本身業務系統的設計(jì)上(shàng)。所以平台并不是本次網絡原理(lǐ)性功能(néng)實現(xiàn)的重點,隻是一個使用(yòng)工(gōng)具。使用(yòng)該平台需要對(duì)其有個基本的了(le)解,會(huì)簡單的開(kāi)發編程工(gōng)作(zuò)。
1)整體架構
OpenBox是湖南新實的主打品牌,該品牌擁有多種不同型号具體産品。OpenBox-S4是一款專爲計(jì)算(suàn)機網絡實驗課程打造的軟硬件全功能(néng)可編程平台,平台基于FAST架構實現(xiàn),是一種靈活的軟硬件協同方式數據處理(lǐ)模型。整體架構如圖1所示,具體的FAST架構介紹與OpenBox-S4設備平台介紹見
《FAST簡介》和(hé)
《OpenBox網絡全功能(néng)可編程平台:工(gōng)欲善其事(shì),必先利其器!》。
圖1 整體框架圖
2)數據格式
在FAST框架下(xià),硬件模塊之間、軟件模塊之間和(hé)軟硬件之間的交互數據采用(yòng)統一标準定義格式。格式規定在完整的以太網數據幀前增加了(le)32字節的分組metadata内容,用(yòng)來(lái)标識分組的輸入端口、長度、輸出端口、接收時(shí)刻和(hé)流标識等等,具體如表1所示:
3)UA數據處理(lǐ)流程
UA是用(yòng)戶應用(yòng)(User Application),運行在用(yòng)戶态的可執行程序。應用(yòng)程序通過向系統注冊和(hé)硬件規則配置,将符合業務功能(néng)要求的分組從(cóng)硬件提取到(dào)軟件,并由FAST架構開(kāi)發環境的數據路由模塊将該特征數據分發給相應的注冊用(yòng)戶。程序注冊時(shí)需要提交一個分組處理(lǐ)的回調函數,當系統接收到(dào)本程序的業務分組時(shí),會(huì)主動調用(yòng)程序的回調函數将分組交付給用(yòng)戶的業務邏輯處理(lǐ)。用(yòng)戶處理(lǐ)完分組後可通過系統發送函數将分組轉發給其他(tā)應用(yòng)模塊(用(yòng)戶應用(yòng)UA、普通Socket應用(yòng)CA、内核應用(yòng)KA和(hé)硬件應用(yòng)HA)進行處理(lǐ)。如果是直接從(cóng)硬件發送,則分組的發送字段中的dstmid直接填寫HA的編号(硬件發送HA的ID爲5)。
4)編程API
i.注冊UA
fast_ua_init(mid,callback):向系統注冊一個UA,是UA編程的核心函數。聲明(míng)自(zì)己的模塊ID号和(hé)接收到(dào)分組後的回調處理(lǐ)函數。
ii.接收分組
callback(pkt,len):開(kāi)源版本的接收分組不是用(yòng)戶主動請(qǐng)求式方法,爲系統回調方式,即系統接收到(dào)了(le)一個符合UA的模塊ID号的分組後,會(huì)在系統環境調用(yòng)UA注冊的callback函數,将分組傳遞給該函數進行處理(lǐ)。
iii.發送分組
fast_ua_send(pkt,len):将一個處理(lǐ)完成的分組發送到(dào)其他(tā)模塊,包括其他(tā)UA、HA、CA或HA。隻需要将分組metadata字段中的目的模塊ID号設置爲對(duì)應模塊的編号即可。
iv.規則配置
FAST的硬件HA中包含查表匹配功能(néng)模塊,可以支持硬件規則的配置。規則匹配模塊既可支持細粒度的具體流屬性配置,也(yě)可支持全表默認規則配置。
在開(kāi)發自(zì)己的二層交換機功能(néng)之前,可以先搭建測試環境,驗證一下(xià)系統自(zì)帶的二層交換機功能(néng),從(cóng)其運行輸出中進一步了(le)解交換原理(lǐ)與數據處理(lǐ)流程。
1)構建環境
測試環境至少需要一台OpenBox-S4設備、兩台網絡通信測試主機和(hé)一台控制主機,控制主機主要用(yòng)來(lái)連接S4設備,運行系統命令、編寫代碼和(hé)編譯程序等功能(néng)。拓撲連接圖如下(xià)所示:
二層交換驗證拓撲圖
2)開(kāi)發平台操作(zuò)
S4設備支持串口與網口兩種登錄管理(lǐ)方式,均可使用(yòng)putty工(gōng)具連接,工(gōng)具使用(yòng)請(qǐng)網上(shàng)搜索。
平台是一個小(xiǎo)型Linux主機系統,與普通Linux服務差異不大(dà),故在上(shàng)面的命令操作(zuò)、代碼修改與編譯,與學生在虛拟機環境或Linux服務器上(shàng)的操作(zuò)使用(yòng)完全一緻。
3)交換驗證
通過串口或網口登錄平台後,直接在命令行終端輸入命令,即可啓動二層交換機功能(néng)。
#l2switch
fastU->REG Version:20180827,OpenBox HW Version:2030200722
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 OK!
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
建議(yì)在平台運行命令時(shí)使用(yòng)串口方式登錄,斷開(kāi)連線後,系統命令仍可正常工(gōng)作(zuò),而且控制主機也(yě)可充當一台網絡測試主機。如果是網絡連接,必須确保連接網絡的通路持續保持,否則管理(lǐ)網絡斷開(kāi)後,系統命令也(yě)會(huì)随着鏈路斷開(kāi)而被停止,導緻系統命令功能(néng)無法運行。
4)觀察與分析交換流程
a)端口接收到(dào)一個分組,在回調函數中打印輸出
inport:0,dstmid:129,len:130,dmac:B8:27:EB:C1:D1:39,smac:B8:27:EB:D8:83:20
b)在端口0上(shàng)學習到(dào)一個新MAC地址,存儲在表項索引爲0的位置
learn_smac->add new MAC,port:0,index:0
c)根據目的MAC查表,得到(dào)返回結果(-1表示沒有查到(dào)匹配的MAC地址)
find_dmac->ret = -1
d)泛洪發出分組,分組輸入端口爲0,4端口設備泛洪到(dào)1,2,3端口輸出
------pkt_send_flood------
pkt_send_normal->0xb4c00468,outport:1,len:130
pkt_send_normal->0xb4c00468,outport:2,len:130
pkt_send_normal->0xb4c00468,outport:3,len:130
e)正常發送一個分組,輸出端口爲0
pkt_send_normal->0xb4c00468,outport:0,len:130
1)二層交換的數據處理(lǐ)流程
二層交換的核心是将一個端口輸入的分組搬到(dào)另一個端口輸出,至于如何選擇輸出端口,則需要根據分組中的目的MAC地址來(lái)确定。如何知(zhī)道(dào)一個目的MAC在哪個端口上(shàng)呢(ne)?則需要在接收分組的時(shí)候對(duì)分組的源MAC進行學習。故二層交換的整體數據處理(lǐ)流程如下(xià):
1)從(cóng)端口接收到(dào)一個分組,攜帶了(le)輸入端口号、長度和(hé)完整以太網幀内容;
2)提取以太網幀的源MAC地址和(hé)輸入端口,保存到(dào)MAC轉發表中;
3)提取以太網幀的目的MAC地址,到(dào)MAC轉發表中查找,輸出查表結果;
4)根據查表結果進行轉發;單播或泛洪發出。
2)開(kāi)發平台編程入門(mén)
所有實驗内容均在OpenBox-S4平台進行,其FAST架構的核心優先不多說了(le),主要是該架構下(xià)軟件分組與硬件分組格式一緻,軟件邏輯功能(néng)實現(xiàn)後可以很(hěn)方便的卸載到(dào)硬件實現(xiàn),分組可攜帶metadata數據在軟硬件模塊之間傳遞,保留分組解析狀态與處理(lǐ)狀态。
OpenBox-S4隻是一個我們設計(jì)系統的工(gōng)具,與具體實現(xiàn)網絡原理(lǐ)性功能(néng)無關,沒有設備的用(yòng)戶也(yě)可以在普通電腦(nǎo)上(shàng)參考本系列分享文(wén)章完成二層交換機的設計(jì)與實現(xiàn)(僅分組收發有點差異)。下(xià)面一篇文(wén)章将帶領大(dà)家熟悉一下(xià)UA的編程規範與開(kāi)發流程(C語言的main函數加一個callbak函數)。
歡迎您和(hé)學生們加入FAST開(kāi)源項目群溝通與探讨,一起體驗不一樣的系統設計(jì)過程。請(qǐng)先加微信号15116127200後邀請(qǐng)入群。
關注FAST開(kāi)源社區(qū)
FAST一一開(kāi)源、開(kāi)放(fàng)、高(gāo)速、高(gāo)效、可編程、可定義!軟硬件協同并行處理(lǐ)。