基於UDP協議的乙太網資料收發控制器

言知木發表於2024-06-27

  本文是自己學習的思路梳理,參考的是野火的升騰Pro教程,需要的可以去看看。


一、理論學習

TCP/IP 五層模型

  兩個裝置間要完成正確的通訊,相互相容的硬體和軟體是必不可少的,這就是我們要說的網路通訊協議。為了實現網路通訊的標準化,普及網路應用,國際標準化組織(ISO)將整個乙太網通訊結構制定了OSI(Open System Interconnection)模型,譯為開放式系統互聯。OSI定義了網路互連的七層框架(物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層),即OSI開放互連繫統參考模型。每個層功能不同,網路通訊中各司其職,整個模型包括硬體和軟體定義。OSI模型只是是理想分層,一般的網路系統只是涉及其中幾層。

  在一定程度上參考了OSI模型後,產生了TCP/IP 協議。TCP/IP(Transmission ControlProtocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網路間實現資訊傳輸的協議簇。TCP/IP協議不僅僅指的是TCP和IP兩個協議,而是指一個由FTP、SMTP、TCP、UDP、IP等協議構成的協議簇,只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議。TCP/IP五層模型,具體見下圖。

  在TCP/IP五層參考模型中,資料鏈路層又被分為LLC層(邏輯鏈路層)和MAC層(媒體介質訪問層)。目前,對於普通的接入網路終端的裝置,LLC層和MAC層是軟、硬體的分界線。如PC的網路卡主要負責實現參考模型中的MAC子層和物理層,在PC的軟體系統中則有一套龐大程式實現了LLC層及以上的所有網路層次的協議。

乙太網

  本文的主角乙太網是指遵守IEEE 802.3標準組成的區域網,由IEEE 802.3標準規定的主要是位於參考模型的物理層(PHY)和資料鏈路層中的介質訪問控制子層(MAC)。

  • 物理層:在物理層,由IEEE 802.3標準規定了乙太網使用的傳輸介質、傳輸速度、資料編碼方式和衝突檢測機制,物理層一般是透過一個PHY晶片實現其功能的。物理層中,介紹一下MII/RGMII介面。MII(Media Independent Interface(介質無關介面)或稱為媒體獨立介面,它是IEEE-802.3定義的乙太網行業標準,用以連線乙太網MAC層和PHY晶片,後逐步擴充套件為:MII、RMII、SMII、GMII、RGMII等。
    MII:百兆乙太網介面,單邊沿取樣;
    RMII:百兆乙太網介面,MII的線路簡化版,雙邊沿取樣;
    GMII:千兆乙太網介面,單邊沿取樣;
    RGMII:千兆乙太網介面,GMII的線路簡化版,雙邊沿取樣。
  • MAC子層:MAC子層是屬於資料鏈路層的下半部分,它主要負責與物理層進行資料交接,如是否可以傳送資料,傳送的資料是否正確,對資料流進行控制等。它自動對來自上層的資料包加上一些控制訊號,交給物理層。接收方得到正常資料時,自動去除MAC控制訊號,把該資料包交給上層(注意:這裡描述的資料流方向是MAC子層——>物理層)。MAC資料包格式如下。

    (1)前導欄位(7Byte),也稱報頭,內容為連續7個位元組的0x55。
    (2)幀起始定界符(SFD,1Byte):用於區分前導段與資料段的,內容為0xD5。
    (3)MAC地址(6Byte):MAC地址由48位數字組成,它是網路卡的實體地址。
    (4)資料包型別(2Byte):本區域可以用來描述本MAC資料包是屬於TCP/IP協議層的IP包、ARP包還是SNMP包,也可以用來描述本MAC資料包資料段的長度。如果該值被設定大於0x0600,不用於長度描述,而是用於型別描述功能,表示與乙太網幀相關的MAC客戶端協議的種類。
    (5)資料段(46-1500Byte):資料段是MAC包的核心內容,其長度可以從0~1500位元組間變化。由於協議要求MAC資料包長度至少為64位元組,當資料段的位元組少於46位元組時,會自動填上無效資料。
    (6)校驗和域(4Byte): MAC 資料包的尾部是校驗和域,它儲存了 CRC 校驗序列,用於檢錯。
  • IP協議:MAC資料包位於TCP/IP協議的資料鏈路層,當MAC資料包經過資料鏈路層到達網路層時,前導碼、幀起始界定符、目的MAC地址、源MAC地址、型別/長度以及校驗位元組均被去除,只有有效資料傳入了網路層(注意:這裡描述的資料流方向是物理層——>MAC子層)。網路層互聯主要負責主機間或與路由器、交換機間對分組資料的路由選擇和傳遞。要實現這一功能,就需要相關協議。常用的網路層協議就是IP協議。所以傳入網路層的資料包並不完全是需要傳輸的有效資料,他的前面還包含著 20位元組的IP協議首部。IP資料包格式如下圖。

    (1)版本(4bit):該欄位定義IP協議版本。
    (2)首部長度(4bit):該欄位定義資料包協議頭長度,表示協議頭部具有32位字長的數量。協議頭最小值為5,最大值為15。
    (3)服務型別(8bit):該欄位定義上層協議對處理當前資料包所期望的服務質量。
    (4)總長度(16bit):該欄位定義整個IP資料包的位元組長度,包括協議頭部和資料。其最大值為 65535 位元組。乙太網協議對能夠封裝在一個幀中的資料有最小值和最大值的限制(46~1500個位元組)。
    (5)標識(16bit):該欄位包含一個整數,用於識別當前資料包。
    (6)標記(3bit):該欄位由3位欄位構成,其中最低位(MF)控制分段,存在下一個分段置為1,否則置0代表該分段是最後一個分段。中間位(DF)指出資料包是否可進行分段,如果為1則機器不能將該資料包進行分段。第三位即最高位保留不使
    (7)分段偏移(13bit);生存時間(8bit);
    (8)協議(8bit):該欄位指出在IP處理過程完成之後,有哪種上層協議接收匯入資料包。UDP為'd17。
    (9)首部校驗和(16bit):該欄位幫助確保 IP 協議頭的完整性。對IP首部中每個16bit進行二進位制反碼求和,將計算結果再取反碼,若結果為0,透過檢驗,否則,不透過檢驗。
    (10)源地址(32bit):源主機IP地址。
    (11)目的地址(32bit):目標主機IP地址。
  • UDP協議:網路層在接收到資料包後,取下資料包的IP首部,將剩餘有效資料包傳送到傳輸層。傳輸層有兩種傳輸協議:基於位元組流的TCP協議、基於報文流的UDP協議。兩種協議各有優缺點,應用於不同場景。TCP協議是面向連線的流傳輸協議,可以保證資料傳輸的完整、有序,是可靠協議,常用在對資料完整性和正確性要求較高的場合,如檔案傳輸。佔用資源較UDP多,速度較UDP慢;UDP協議則是一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,因為無需連線,傳輸速度較TCP快,佔用資源量較TCP少,適合實時資料的傳輸,如視訊通話。本文采用較為簡單的UDP協議。若傳輸層使用UDP協議,那麼傳入傳輸層的資料包為UDP資料包,前8各位元組為UDP首部。UDP資料包格式,具體見下圖。

    (1)源埠號(16Byte):源主機的應用程式使用的埠號。
    (2)目的埠號(16Byte):目的主機的應用程式使用的埠號。
    (3)UDP長度(16Byte):是指UDP頭部和UDP資料的位元組長度。因為UDP頭部長度是8位元組,所以欄位的最小值為8。
    (4)UDP 校驗和(16Byte):該欄位提供了與TCP校驗欄位同樣的功能;該欄位是可選的。

  綜上,我們可以知道,如果是接收PC端傳入板卡的乙太網資料資訊(MAC子層——>物理層),首先需要將接收到的RGMII資料轉化為GMII資料,然後對MAC資料包、IP資料包、UDP資料包的資料進行處理,並提取出有效資料。若是板卡將資料傳回PC端(物理層——>MAC子層),就要將有效資料按照乙太網資料包格式進行打包,然後將GMII資料轉化為RGMII資料傳送。


二、程式設計

  要想進行程式設計,首先要做的就是對乙太網資料包的資訊由具體的瞭解。

相關文章