0731-84728105
15116127200
二層交換機原型設計與實現(一)
發布時(shí)間:2021-04-30
    &n雨身bsp;交換機是我們(men)網絡領域應用最為(w土畫èi)廣泛的網絡互聯設備,其主要功能是完成各端口之間分組的交換功能。交換機僅做對著分組交換,不(bù)對分組進行任何數據修改。交換機的端口沒有IP與M著坐AC的屬性。端口數據IO一般為(wèi)草黃全雙工(gōng)模式,即可同時(shí)進行分吃會組收發工(gōng)作。端口速率通(tōng)常為(wèi)1她放0/100/1000M自适應模式,更高速率可支持到10G、25G、40G、1化術00G和400G。交換機的端口數量一般大(dà)于2,小于小在64。
     微科1)二層交換原理
     身村二層交換的原理是必須熟知的,網絡基礎課程教材或網絡上都能找到月司。
     2)L多麗inux系統操作
  &nbs答的p;  我們(men)的開(kāi)發環境都是基于Lin答冷ux系統,故想要在此學習二層交換機的設計與實現,一些必備的Linu吧見x操作方法與常用命令要會(huì)。推薦《鳥哥私房菜》一書,可網上搜索。
   快上  3)C語言編程
     平在劇台開(kāi)發的編程語言全部是C語言,這也是接觸計算機學生通(tōng亮算)常會(huì)學習到的語言,更是計算機專業的必學專業課。器明不(bù)求精通(tōng),但求普通(tōng)離工,一般的C程序編寫、庫函數調用和基本打印調試等操作要會(huì)。
     4)身線一套OpenBox-S4開(kāi)發平台
     如(rú)生老題所述,從一開(kāi)始,便是從一個OpenBox麗說-S4開(kāi)發平台開(kāi)始,二層交玩火換的實驗和我們(men)後續所有相關的實驗通場基本上是構建在這個開(kāi)發平台之上。如(rú)果沒有這個藍公平台也可以學習這些實驗的設計與實現過程,隻是驗證和測試起來會內她(huì)麻煩一些。
   外文;  OpenBox-S4是我們(men)用來麗日做實驗開(kāi)發的平台,平台完成了軟硬件數據IO的基本功能樹議,提供規範的軟件UA編程開(kāi)發模式,讓用戶不(bù)需要關心平台如對空(rú)何完成軟硬件數據IO和系統之間的分組調度與轉發功能拿一,可以将全部精力集中在本身業務系統的設計上。所以哥黃平台并不(bù)是本次網絡原理性功能實現的重點,還年隻是一個使用工(gōng)具。使用該平台需要對其有個基本的了電問解,會(huì)簡單的開(kāi)發編程工(g南答ōng)作。
      問物 1)整體架構
   拍司  OpenBox是湖(hú)南新實的主打品牌,用吃該品牌擁有多種不(bù)同型号具體産品。OpenBox-S4是一款專為訊很(wèi)計算機網絡實驗課程打造的軟硬件全功能可編程平台,平台基于FAS業飛T架構實現,是一種靈活的軟硬件協同方式數據處理模見那型。整體架構如(rú)圖1所示,具體的FA農媽ST架構介紹與OpenBox-S4設備平台介紹見《FAST簡介》《OpenBox網絡全功能可編程平台:工(gōng)欲善其體林事,必先利其器(qì)!》

圖1 整體框架圖
   拿刀;  2)數據格式
     在FA近跳ST框架下,硬件模塊之間、軟件模塊之間和軟硬件之間的交互數坐謝據采用統一标準定義格式。格式規定在完整的以太網數據幀前增銀懂加了32字節的分組metadata内容,用來标識分組的輸入端口、長(chán著鐘g)度、輸出端口、接收時(shí)刻和流标識等等,具體如(rú)山知表1所示:

    &n爸費bsp; 3)UA數據處理流程
   &nb秒農sp; UA是用戶應用(User Applica姐煙tion),運行在用戶态的可執行程序。應用程序通(tōng)過向系統注他用冊和硬件規則配置,将符合業務功能要求的分組從硬件提取到軟件火件,并由FAST架構開(kāi)發環境的數據路由模塊将該特征數據分發給相應跳微的注冊用戶。程序注冊時(shí)需要提交一個分船校組處理的回調函數,當系統接收到本程序的業務分組時(shí)錯制,會(huì)主動調用程序的回調函數将分組交付給用戶的業地都務邏輯處理。用戶處理完分組後可通(tōn女匠g)過系統發送函數将分組轉發給其他(tā)應用事筆模塊(用戶應用UA、普通(tōng)Socket應用CA、内核應用KA和硬件應遠計用HA)進行處理。如(rú)果是直接從硬件發送,則分組的發送字段中通時的dstmid直接填寫HA的編号(硬件發送HA短放的ID為(wèi)5)。
    影坐 4)編程API
   &n上小bsp; i.注冊UA
   地雨  fast_ua_init(m木刀id,callback):向系統注冊一個UA,多劇是UA編程的核心函數。聲明自己的模塊ID号和接收到分組後的回調處人小理函數。
    &nb廠業sp;ii.接收分組
    &nbs報雪p;callback(pkt,len):刀白開(kāi)源版本的接收分組不(bù)是用身靜戶主動請求式方法,為(wèi)系統回調方式,即系統接收到了從去一個符合UA的模塊ID号的分組後,會(huì)在系統環境調空姐用UA注冊的callback函數,将分組傳遞給該函說資數進行處理。
     iii街了.發送分組
    &朋河nbsp;fast_ua_send(pkt,len):将一個處錢看理完成的分組發送到其他(tā)模塊,包括其他(tā)U兒雪A、HA、CA或HA。隻需要将分組metadata字段中的目的模塊ID号設答就置為(wèi)對應模塊的編号即可。
  &nbs數物p;  iv.規則配置
  &nbs船店p;  FAST的硬件HA中包含查表土熱匹配功能模塊,可以支持硬件規則的配置。規則匹做國配模塊既可支持細粒度的具體流屬性配置,也可支持全表默認規則配置。
    &nb呢玩sp;在開(kāi)發自己的二層交換機功能之前,可以先搭建測試環境,驗證子笑一下系統自帶的二層交換機功能,從其運行輸出中進一步了解交換原理與數麗雪據處理流程。
     國鐵; 1)構建環境
     測林裡試環境至少需要一台OpenBox-S4設備、兩台網絡通(tōng)信測試主機和舞習一台控制主機,控制主機主要用來連接S4設備,運行系統命令、編寫代碼和編譯程序等高裡功能。拓撲連接圖如(rú)下所示:

二層交換驗證拓撲圖
     身些2)開(kāi)發平台操作
    &nb裡見sp;S4設備支持串口與網口兩種登錄管理方式,均可使用putty工信問(gōng)具連接,工(gōng)具使用請網上搜索。
    &nb雜科sp;平台是一個小型Linux主機系統,與普通(數光tōng)Linux服務差異不(bù)大(那是dà),故在上面的命令操作、代碼修改與編譯,與裡好學生在虛拟機環境或Linux服務器(qì)上的操作使用完全一店理緻。
    &n紅些bsp;3)交換驗證
     通(tō如有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! W習很ait Reply......
fastU->UA->pid:902,mid:129,Reg林要ister OK!
fastU->libua version:20180827
Create nm08_mac_aging 子路thread OK!
aging[0]->invalid mac:0
fastU->fast_ua_recv......
ID PORT0 PORT1 POR公校T2 PORT3
0 . . 日房. .
aging[1]->invalid mac:0
ID PORT0 PORT1 PORT2 事月 PORT3
0 . . 票大. .
aging[2]->invalid mac:0

    &多不nbsp;建議在平台運行命令時(shí)使兒地用串口方式登錄,斷開(kāi)連線後,系統命令仍可正常工(gō也謝ng)作,而且控制主機也可充當一台網絡測試主機。如(rú)果是網絡連接,時林必須确保連接網絡的通(tōng)路持續保持,否則管讀醫理網絡斷開(kāi)後,系統命令也會(huì船討)随着鍊路斷開(kāi)而被停止,導緻系統命令功能無法運行。 門志
    &nbs長暗p;4)觀察與分析交換流程
    雪你 a)端口接收到一個分組,在回調函數中打印輸出 跳西

inport:0,dstmid:129,len:1唱得30,dmac:B8:27:EB:C1:D1:39,smac:B8銀資:27:EB:D8:83:20

     b)在端算請口0上學習到一個新MAC地址,存儲在表項索引為下吧(wèi)0的位置

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

     c)根據目術日的MAC查表,得(de)到返回結果(-1表示也林沒有查到匹配的MAC地址)

find_dmac->ret = -1

     d筆費)泛洪發出分組,分組輸入端口為(wèi)0,4端口設備泛湖雜洪到1,2,3端口輸出

------pkt_send_flood------
pkt_send_normal->0xb4c00468,又空outport:1,len:130
pkt_send_normal->0x自雨b4c00468,outport:2,len:130
pkt_send_normal->0xb4c拍雨00468,outport:3,len:130

    雜音; e)正常發送一個分組,輸出端口為(wè紙姐i)0

pkt_send_normal->0xb4c0046地月8,outport:0,len:130

   &nb購事sp; 1)二層交換的數據處理流可媽程
   &nbs湖數p; 二層交換的核心是将一個端口輸入的分組搬光水到另一個端口輸出,至于如(rú)何選擇輸出端口,則需要根據分組中的目的MAC地司城址來确定。如(rú)何知道一個目的MAC在哪個端刀高口上呢?則需要在接收分組的時(shí)候對分組的源MAC進行學習。農國故二層交換的整體數據處理流程如(rú)下:
     讀秒;1)從端口接收到一個分組,攜帶了輸入端口号、長(ch長麗áng)度和完整以太網幀内容;
  &nbs門吧p;  2)提取以太網幀的源醫區MAC地址和輸入端口,保存到MAC轉發表中;
  &nbs到分p;  3)提取以太網幀的目的MAC地址,到MAC轉發海業表中查找,輸出查表結果;
     時北4)根據查表結果進行轉發;單播或泛洪發出。術離
     2)開(k跳去āi)發平台編程入門
    &n聽見bsp;所有實驗内容均在OpenBox-S4平台又新進行,其FAST架構的核心優先不(bù)多說(shuō)了,公空主要是該架構下軟件分組與硬件分組格式一緻,軟件邏輯功懂公能實現後可以很方便的卸載到硬件實現,分組可攜短道帶metadata數據在軟硬件模塊之間傳遞,保留分相坐組解析狀态與處理狀态。
     Op話看enBox-S4隻是一個我們(men)設計系統的工(gō白腦ng)具,與具體實現網絡原理性功能無關,沒有設備的用戶也可以跳紅在普通(tōng)電腦上參考本系列分享文章完成二層交換機的設計與實現(僅分組收自資發有點差異)。下面一篇文章将帶領大(dà)家(j理通iā)熟悉一下UA的編程規範與開(kāi)發流程(C語言的mai一暗n函數加一個callbak函數)。
    &nbs數報p;歡迎您和學生們(men)加入FAST開(kāi)源項目群喝動溝通(tōng)與探讨,一起體驗不(bù)一樣的系統設計過程。店西請先加微信号15116127200後邀請入群。 討刀

關注FAST開(kāi)源社區
FAST一一開(kāi)源、開(kāi)放、離西高速、高效、可編程、可定義!軟硬件協同并行處理。