0731-84728105
15116127200
二層交換機(jī)原型設計與實現(一(yī))
發布時間:2021-04-30
     交換機(jī)是我們網絡領域應用最為(wèi)廣泛的網絡互聯設備,其主要功能(néng)是完成各端口之間分組的交換功能(néng)。交換機(jī)僅做分組交換,不對分組進行任何數據修改。交換機(jī)的端口沒有IP與MAC的屬性。端口數據IO一(yī)般為(wèi)全雙工(gōng)模式,即可同時進行分組收發工(gōng)作。端口速率通(tōng)常為(wèi)10/100/1000M自(zì)适應模式,更高(gāo)速率可支持到(dào)10G、25G、40G、100G和400G。交換機(jī)的端口數量一(yī)般大于2,小(xiǎo)于64。
     1)二層交換原理
     二層交換的原理是必須熟知的,網絡基礎課程教材或網絡上(shàng)都能(néng)找到(dào)。
     2)Linux系統操作
     我們的開(kāi)發環境都是基于Linux系統,故想要在此學習二層交換機(jī)的設計與實現,一(yī)些必備的Linux操作方法與常用命令要會(huì)。推薦《鳥哥私房菜》一(yī)書,可網上(shàng)搜索。
     3)C語言編程
     平台開(kāi)發的編程語言全部是C語言,這也是接觸計算(suàn)機(jī)學生(shēng)通(tōng)常會(huì)學習到(dào)的語言,更是計算(suàn)機(jī)專業(yè)的必學專業(yè)課。不求精通(tōng),但求普通(tōng),一(yī)般的C程序編寫、庫函數調用和基本打印調試等操作要會(huì)。
     4)一(yī)套OpenBox-S4開(kāi)發平台
     如題所述,從(cóng)一(yī)開(kāi)始,便是從(cóng)一(yī)個(gè)OpenBox-S4開(kāi)發平台開(kāi)始,二層交換的實驗和我們後續所有相(xiàng)關的實驗基本上(shàng)是構建在這個(gè)開(kāi)發平台之上(shàng)。如果沒有這個(gè)平台也可以學習這些實驗的設計與實現過程,隻是驗證和測試起來會(huì)麻煩一(yī)些。
     OpenBox-S4是我們用來做實驗開(kāi)發的平台,平台完成了軟硬件(jiàn)數據IO的基本功能(néng),提供規範的軟件(jiàn)UA編程開(kāi)發模式,讓用戶不需要關心平台如何完成軟硬件(jiàn)數據IO和系統之間的分組調度與轉發功能(néng),可以将全部精力集中在本身業(yè)務系統的設計上(shàng)。所以平台并不是本次網絡原理性功能(néng)實現的重點,隻是一(yī)個(gè)使用工(gōng)具。使用該平台需要對其有個(gè)基本的了解,會(huì)簡單的開(kāi)發編程工(gōng)作。
      1)整體架構
     OpenBox是湖(hú)南(nán)新實的主打品牌,該品牌擁有多(duō)種不同型号具體産品。OpenBox-S4是一(yī)款專為(wèi)計算(suàn)機(jī)網絡實驗課程打造的軟硬件(jiàn)全功能(néng)可編程平台,平台基于FAST架構實現,是一(yī)種靈活的軟硬件(jiàn)協同方式數據處理模型。整體架構如圖1所示,具體的FAST架構介紹與OpenBox-S4設備平台介紹見(jiàn)《FAST簡介》《OpenBox網絡全功能(néng)可編程平台:工(gōng)欲善其事(shì),必先利其器(qì)!》

圖1 整體框架圖
     2)數據格式
     在FAST框架下(xià),硬件(jiàn)模塊之間、軟件(jiàn)模塊之間和軟硬件(jiàn)之間的交互數據采用統一(yī)标準定義格式。格式規定在完整的以太網數據幀前增加了32字節的分組metadata内容,用來标識分組的輸入端口、長(cháng)度、輸出端口、接收時刻和流标識等等,具體如表1所示:

      3)UA數據處理流程
     UA是用戶應用(User Application),運行在用戶态的可執行程序。應用程序通(tōng)過向系統注冊和硬件(jiàn)規則配置,将符合業(yè)務功能(néng)要求的分組從(cóng)硬件(jiàn)提取到(dào)軟件(jiàn),并由FAST架構開(kāi)發環境的數據路(lù)由模塊将該特征數據分發給相(xiàng)應的注冊用戶。程序注冊時需要提交一(yī)個(gè)分組處理的回調函數,當系統接收到(dào)本程序的業(yè)務分組時,會(huì)主動調用程序的回調函數将分組交付給用戶的業(yè)務邏輯處理。用戶處理完分組後可通(tōng)過系統發送函數将分組轉發給其他應用模塊(用戶應用UA、普通(tōng)Socket應用CA、内核應用KA和硬件(jiàn)應用HA)進行處理。如果是直接從(cóng)硬件(jiàn)發送,則分組的發送字段中的dstmid直接填寫HA的編号(硬件(jiàn)發送HA的ID為(wèi)5)。
     4)編程API
     i.注冊UA
     fast_ua_init(mid,callback):向系統注冊一(yī)個(gè)UA,是UA編程的核心函數。聲明自(zì)己的模塊ID号和接收到(dào)分組後的回調處理函數。
     ii.接收分組
     callback(pkt,len):開(kāi)源版本的接收分組不是用戶主動請求式方法,為(wèi)系統回調方式,即系統接收到(dào)了一(yī)個(gè)符合UA的模塊ID号的分組後,會(huì)在系統環境調用UA注冊的callback函數,将分組傳遞給該函數進行處理。
     iii.發送分組
     fast_ua_send(pkt,len):将一(yī)個(gè)處理完成的分組發送到(dào)其他模塊,包括其他UA、HA、CA或HA。隻需要将分組metadata字段中的目的模塊ID号設置為(wèi)對應模塊的編号即可。
     iv.規則配置
     FAST的硬件(jiàn)HA中包含查表匹配功能(néng)模塊,可以支持硬件(jiàn)規則的配置。規則匹配模塊既可支持細粒度的具體流屬性配置,也可支持全表默認規則配置。
     在開(kāi)發自(zì)己的二層交換機(jī)功能(néng)之前,可以先搭建測試環境,驗證一(yī)下(xià)系統自(zì)帶的二層交換機(jī)功能(néng),從(cóng)其運行輸出中進一(yī)步了解交換原理與數據處理流程。
      1)構建環境
     測試環境至少需要一(yī)台OpenBox-S4設備、兩台網絡通(tōng)信測試主機(jī)和一(yī)台控制主機(jī),控制主機(jī)主要用來連接S4設備,運行系統命令、編寫代碼和編譯程序等功能(néng)。拓撲連接圖如下(xià)所示:

二層交換驗證拓撲圖
     2)開(kāi)發平台操作
     S4設備支持串口與網口兩種登錄管理方式,均可使用putty工(gōng)具連接,工(gōng)具使用請網上(shàng)搜索。
     平台是一(yī)個(gè)小(xiǎo)型Linux主機(jī)系統,與普通(tōng)Linux服務差異不大,故在上(shàng)面的命令操作、代碼修改與編譯,與學生(shēng)在虛拟機(jī)環境或Linux服務器(qì)上(shàng)的操作使用完全一(yī)緻。
     3)交換驗證
     通(tōng)過串口或網口登錄平台後,直接在命令行終端輸入命令,即可啓動二層交換機(jī)功能(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

     建議在平台運行命令時使用串口方式登錄,斷開(kāi)連線後,系統命令仍可正常工(gōng)作,而且控制主機(jī)也可充當一(yī)台網絡測試主機(jī)。如果是網絡連接,必須确保連接網絡的通(tōng)路(lù)持續保持,否則管理網絡斷開(kāi)後,系統命令也會(huì)随著(zhe)鏈路(lù)斷開(kāi)而被停止,導緻系統命令功能(néng)無法運行。
     4)觀察與分析交換流程
     a)端口接收到(dào)一(yī)個(gè)分組,在回調函數中打印輸出

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)一(yī)個(gè)新MAC地址,存儲在表項索引為(wèi)0的位置

learn_smac->add new MAC,port:0,index:0

     c)根據目的MAC查表,得到(dào)返回結果(-1表示沒有查到(dào)匹配的MAC地址)

find_dmac->ret = -1

     d)泛洪發出分組,分組輸入端口為(wèi)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)正常發送一(yī)個(gè)分組,輸出端口為(wèi)0

pkt_send_normal->0xb4c00468,outport:0,len:130

     1)二層交換的數據處理流程
     二層交換的核心是将一(yī)個(gè)端口輸入的分組搬到(dào)另一(yī)個(gè)端口輸出,至于如何選擇輸出端口,則需要根據分組中的目的MAC地址來确定。如何知道一(yī)個(gè)目的MAC在哪個(gè)端口上(shàng)呢(ne)?則需要在接收分組的時候對分組的源MAC進行學習。故二層交換的整體數據處理流程如下(xià):
     1)從(cóng)端口接收到(dào)一(yī)個(gè)分組,攜帶了輸入端口号、長(cháng)度和完整以太網幀内容;
     2)提取以太網幀的源MAC地址和輸入端口,保存到(dào)MAC轉發表中;
     3)提取以太網幀的目的MAC地址,到(dào)MAC轉發表中查找,輸出查表結果;
     4)根據查表結果進行轉發;單播或泛洪發出。
     2)開(kāi)發平台編程入門(mén)
     所有實驗内容均在OpenBox-S4平台進行,其FAST架構的核心優先不多(duō)說了,主要是該架構下(xià)軟件(jiàn)分組與硬件(jiàn)分組格式一(yī)緻,軟件(jiàn)邏輯功能(néng)實現後可以很方便的卸載到(dào)硬件(jiàn)實現,分組可攜帶metadata數據在軟硬件(jiàn)模塊之間傳遞,保留分組解析狀态與處理狀态。
     OpenBox-S4隻是一(yī)個(gè)我們設計系統的工(gōng)具,與具體實現網絡原理性功能(néng)無關,沒有設備的用戶也可以在普通(tōng)電(diàn)腦(nǎo)上(shàng)參考本系列分享文章完成二層交換機(jī)的設計與實現(僅分組收發有點差異)。下(xià)面一(yī)篇文章将帶領大家熟悉一(yī)下(xià)UA的編程規範與開(kāi)發流程(C語言的main函數加一(yī)個(gè)callbak函數)。
     歡迎您和學生(shēng)們加入FAST開(kāi)源項目群溝通(tōng)與探讨,一(yī)起體驗不一(yī)樣的系統設計過程。請先加微信号15116127200後邀請入群。

關注FAST開(kāi)源社區
FAST一(yī)一(yī)開(kāi)源、開(kāi)放(fàng)、高(gāo)速、高(gāo)效、可編程、可定義!軟硬件(jiàn)協同并行處理。