基于ARM9的UDP協議棧的設計與實現
2. 2. 4 數據的接收
系統接收數據采用的是中斷模式.當網卡接收到數據時,就觸發一個中斷,啟動中斷服務程序.在中斷服務程序中首先清除中斷標志位,以防在接收數據的時候再次引發中斷,然后判斷寄存器MRMDX 的值,確定網卡是否接收到了數據,如果接收到了數據就要進行數據處理,也就是對數據包的解封,得到應用程序發送來的數據,如果沒有得到數據則說明網卡初始化失敗,重新初始化網卡.中斷接收程序的流程圖如圖4所示.
在接收到以太網數據幀中,首先判斷數據類型字段,如果是ARP 協議,則進入ARP 處理流程,如果是IP 協議,則進入IP 協議流程.ARP 協議處理過程:
首先判斷ARP 包目的IP 地址是否與本地IP 地址一致,如果不一致,丟棄不處理;如果一致,再判斷ARP類型,操作類型字段為1 時表示ARP 請求,調用ARP發送函數發送ARP 響應包.操作類型字段為2 時,記錄下對方的MAC 地址,以后通信就是根據這個MAC傳送數據的.
IP 協議處理過程如下所述:首先判斷IP 包目的IP地址是否與本地IP 一致,如果不一致,丟棄不處理,如果一致,則再判斷協議類型,是否為UDP 數據包,是就進入UDP 處理過程,不是就進入其他協議處理過程.
3 實驗結果和分析
3. 1 ARP 通信測試
實驗中測試了ARP 請求和UDP 通信,設置ARM開發板的IP 地址為219. 243. 50. 187,MAC 地址為0×52,0×54,0x4c,0×38,0xf7,0×42,PC 機的IP 地址為219. 243. 50. 188,MAC 地址為0×00,0×23,0x5A,0×15,0×73,0xF4.經過測試當開板向PC 發送ARP 請求時,PC 能夠正確應答響應包,并且多次請求都能夠得到正確的響應,證明ARP 協議能夠穩定運行,實驗結果如圖5 所示.
當開發板得到了PC 機的MAC 地址之后,就可以與它進行正常的UDP 通信了.在中斷程序之中判定協議類型,接收到的數據包是ARP 協議還是UDP 協議,當接收的是ARP 協議,則進行ARP 協議處理,得出圖5 的實驗結果,當得到的是UDP 協議,則進行UDP 協議處理,得出的實驗結果如圖6 所示.經過長時間的通信可以發現,傳輸的數據沒有出現誤碼,可以說明這種通信方式比較穩定可行.
3. 2 UDP 通信測試
在UDP 通信實驗中,設置兩個數據終端的IP 地址和通信端口分別為219.243.50.187:6000,219.243.50.186:10005,然后發送數據,用抓包工具sniffer 抓包的結果如圖6 所示.通過圖中結果可以看出,SrcIP 為219. 243. 50. 87,Src Port 為6000,DestIP 為219. 243.50. 186,Dst Port 為10005,這都與設置的相同.Protocol為0×800 表示為UDP 協議類型,而且能夠正確地接收到發送的數據,并且經過多次的實驗,結果都是正確的,這證明系統通信穩定可靠,通過移植的協議棧能夠正常的工作,達到了預期的目標.
4 結束語
文中實現了基于ARM9 和DM9000 芯片的UDP通信,成功地對TCP/ IP 協議棧裁剪移植實現UDP.ARP 等協議通信.詳細介紹了DM9000 網卡驅動程序過程,并且實現了網口接收發送數據的功能,通過對大量數據的傳輸實驗,證明了ARM9 和DM9000 構成的通信系統性能的穩定性.能夠較好地解決大量數據通過UDP 協議通信的問題.
評論