本學期除了承擔《專用集成電路設計》課程之外,還承擔了《交換原理與技術》的課程,兩門課程結合了一下,主推實用化和工程化,課堂上強調實際應用。但感覺大家還是比較關注“這個知識點考不考”,而從不問“學這個有什麼用,為什麼要學這個?”。抽空了解了一下情況,倍感同學們基本動手能力的嚴重缺乏及主動想動手意識的淡漠,于是狠心抽時間普及一些常識性的内容。但願能起到抛磚引玉的作用。
一、教材及部分曆史
本教材是我校通信工程學院老院長、ISN國家重點實驗室創始人之一的劉增基教授牽頭編著。作者裡面還有著名的網絡交換專家邱智亮教授。團隊從事相關研究工作幾十年如一日,踏踏實實,兢兢業業的從事工程應用的開發工作。詳細内容可以查看公衆号分類項目“聯系我”部分。
裡面重點介紹了電路交換和分組交換的内容。其中分組交換部分還涉及了面向連接的ATM分組交換技術。(課堂上也啰嗦了很多ATM與IP糾結的曆史以及我校做出來了國内第一台帶有信令功能的ATM交換機的曆史,在此不再贅述)
《交換原理與技術》教材
二、互聯網與分組交換
真的很感激CCTV,拍出來了《互聯網時代》這麼精彩的紀錄片。第一集就非常煽情的介紹了互聯網的誕生曆程。而其中,我比較關注的就是分組交換之父“Kleinrock”。強烈推薦通信工程專業的同學一定要看一下這部紀錄片。我每年反正都偷偷的在課堂上給大家播放其中比較精彩的片段,集成課上也播放,哈哈。
分組交換之父“Kleinrock”
三、抓包
言歸正傳,本文的目的就是通過用FPGA抓取網絡上的數據包的簡單曆程,來給大家介紹幾種入門級的工具,教會給大家開啟互聯網大門的鑰匙。
1、實驗場景
借助實驗室簡陋的場地,搭建了一個簡單的實驗平台,該平台由兩台筆記本和一塊Zedboard FPGA開發闆及兩根網線組成,兩台筆記本各通過一根網線連接到了Zedboard FPGA開發闆的兩個網口上。FPGA上簡單的例化了兩個直連的千兆GMII接口的以太網控制器(可以在opencores網站上下載),用來抓取物理層的以太網數據幀。FPGA開發闆的作用僅僅就是來抓取物理層的以太網數據幀,因為這件事情,隻能由FPGA來完成,在兩台筆記本上是無法看到物理層的以太網幀的!原因見下文。
實驗場景
2、原理
課本上第五章介紹了五層經典的模型,應用程序産生的數據層層疊加打包到物理層,在物理層變成可以用來在物理信道上傳輸的比特流,經物理信道傳輸到對端。如下圖。
物理層比特流數據來源
所以,在物理層,已經包含了上述各層的所有信息。我們可以用X-CAP發包軟件來産生一個數據報文,然後用抓包工具(Wireshark、科萊等)抓取後進行分析。發數據包過程如下面幾張圖所示。
X-CAP軟件配置數據鍊路層如MAC地址等信息
X-CAP軟件配置網絡層如IP地址等信息
X-CAP軟件配置其它信息
X-CAP軟件已經産生一個自定義的數據包
在接收端,通過包分析工具分析的結果
注意:大家是否發現了一種可以分析具體網絡數據包的方法呢?上課講的ARP攻擊或者PPPOE攻擊其實都可以這樣子去實現。而基于FPGA的快速包分類算法(各種改進BV算法)則可以提供各種非常實用的攻擊檢測、病毒檢測等處理,也可以在數據中心或者網絡中心實現一些預處理操作等。
通過上圖可以看出,接收端收到的數據包是完整的包括各個層數據信息的數據包,有二層的MAC地址,三層的IPV4數據包頭,以及高層的ICMP數據包的頭部,以及還有一些攜帶的數據信息如0-9十個阿拉伯數字及二十六個英文小寫字母,還有FCS校驗數據等等。
但上圖分析結果不包括物理層信息,如下圖802.3以太網幀格式,物理層封裝的以太網數據幀還有前導碼和幀定界符。
802.3以太網幀格式
在網絡數據傳輸的過程中,終端設備産生可以物理層傳輸的比特流會涉及到所有的層,但對于交換機而言,僅涉及最下面兩層(數據鍊路層和物理層)或者三層(網絡層、鍊路層及物理層)。如下圖是二層以太網交換機模型示意圖。
二層以太網交換機七層模型示例
3、實現
為實現最終在線實時獲取物理層以太網幀結構的目的,順便介紹一下硬件上通過RJ45接口傳輸以太網數據包的流程。如下圖,通過RJ45接口進來的物理層比特流數據進入到PHY芯片内部,進行編解碼等操作後,在FPGA與PHY芯片一側轉變為标準的GMII接口信号并行傳輸給FPGA芯片的管腳。進入到FPGA内部後便可以用opencores網站上下載的IP核(ethernet_tri_mode)進行接收處理。
RJ45接口、PHY芯片、FPGA連接圖
在實驗過程中,我們可以用X-CAP軟件産生下面的以太網數據幀(網絡層看是IPV6數據報文),從一台筆記本電腦經過FPGA開發闆傳輸到另外一台筆記本電腦上,在接收端筆記本電腦上用包分析軟件捕獲到數據幀并進行分析,如下圖。
接收端筆記本包分析軟件對該IPV6數據包的分析結果
同時,用Chipscope軟件在FPGA内部以GMII接口中的dv信号上升沿為觸發條件來捕獲該IPV6報文,得到的結果如下圖中的波形。
FPGA上捕獲到的以太網數據幀(IPV6報文)
讓我們放大後再仔細看一下!
在上圖中可以明顯的看到了七個字節的前導碼0x55和一個字節的幀定界符0xd5,這就是本文最終要獲取到的物理層數據幀頭!物理層的以太網幀就是長的這個樣子!也就是說,物理層的以太網幀隻是固定的在每個抓包軟件分析出來的二層幀頭即目的MAC地址的前面加上了固定的八個字節而已!
這八個字節是固定的七個字節的0x55和一個字節的0xd5!
這就是你想看到的物理層數據幀的樣子!
不信?可以繼續往後看波形,後面的數據就是二層的目的MAC地址,跟前面接收端筆記本包分析軟件對數據包的分析結果中的二層目的MAC地址完全一樣!如下圖所示。
知道了物理層的前導碼和幀定界符又能咋?
(1)、 你可以類比其它通信接口的物理層啊。如ROCKET IO、RAPID IO、10G MAC接口等,是否用于同步,是否傳遞時鐘,是否用于判别一個幀的起始等等,都大同小異。但凡通信接口類的物理層,都是類似的這些功能。是不是舉一反三了?
(2)、最起碼,有了這個平台,可以讓兩台筆記本電腦聯網傳遞信息了。也可以Ping通了,還可以傳各種文件了。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!