今天我們用以太網連接兩臺電腦,然后用示波器解碼。一邊做實驗一邊講解百兆以太網波形和幀結構,最終還會講解以太網如何從波形得到數據的整個解碼過程。
準備工作
我們需要準備一臺電腦運行簡單的UDP發送程序:
并且將這臺電腦通過百兆以太網口接上另一臺電腦,同時我們用差分探頭和夾具在網線中間探測波形,觀察波形是否能與程序中發的數據對應。
(連線圖)
黃色網線接DUT(運行udp_send.py的電腦),灰色網線接Link Partner(另一臺電腦,可接收到udp數據)。
(udp_send.py代碼截圖)
DUT信息:
MAC地址:004C5F:18
IP地址:192.168.2.123
Link Partner信息:
MAC地址:0033D3:B9
IP地址:192.168.2.100
我們提前了解過,網線中一共有4對差分線,100Base-TX只在其中2對差分線上單向發送信號的。DUT發往Link Partner的1對差分線線是夾具上的A,反方向的1對差分線是夾具上的B。當我們探頭按連線圖這樣接線時,測的波形只是從DUT電腦發出的。
(以太網解碼設置)
我們可以開啟百兆以太網解碼,并按上圖選擇100BASE-TX,還可以點擊自動設置。
(以太網顯示設置)
在顯示設置中,右側的數據格式指的是對于解出數據結果如何顯示,如果要觀察MAC地址建議選十六進制,如果要觀察IP地址建議選無正負(整數),最終要對比4B5B結果時建議選二進制。解碼層也很重要,尤其是后面對比波形和解碼結果時,打開后會在彩色解碼結果下出現額外的藍色結果,我們會在文章的后半部分對其詳細講解。
以太網幀結構
我們可以先來大致看一下以太網解碼結果。
電腦發送UDP數據后,建議示波器使用Normal觸發,并點擊Single,這樣示波器在抓到以太網數據后就會暫停,方便觀察。
(1 MAC結構)
你可以看到縮放窗口中是完整的以太網數據,開頭是前導碼,后面淡藍色是SFD,然后是目標MAC和源MAC,綠色是LenType,橙色是數據,數據后面是FCS也就是CRC,再然后深灰色是EOS,淺灰色是IDLE。
可以觀察到目標MAC和源MAC確實與Link Partner和DUT的MAC地址是對應的。
大家習慣的MAC地址都是用16進制顯示,所以顯示頁面中數據格式要選擇“十六進制”。
(2 IP結構)
我們再看一下橙色數據,Data13~16對應的是192.168.2.123也就是DUT的IP。
Data17~20對應的是192.168.2.100,也就是Link Partner的IP。
由于IP地址普遍習慣用十進制數表示,因此顯示頁面中數據格式要選擇“無正負(整形)”。
(3載荷內容)
再往后看到Data29~Data31,它們是0x31,0x32,0x33,也就是字符串“123”對應的ASCII碼,這個字符串正好就是我們電腦上python程序中發送的數據。到此為止,我們就成功地用示波器解碼出了電腦發出的數據。
解碼過程
我們以Data30這個數據的解碼流程為例,講述百兆以太網解碼流程
通過上面的實驗,你大致了解了以太網幀的結構,但你有可能會問,示波器是如何解出0x31,0x32,0x33這樣的結果的?它們與模擬波形的關系是怎樣的呢?我們能否用肉眼從模擬波形中解出這個結果?
答案顯然是肯定的,下面我們以Data30這個數據的解碼流程為例,講述百兆以太網解碼流程。
我們放大Data30,它對應的載荷數據內容是0x32。但為了盡量接近原始數據,建議顯示中數據格式選擇為二進制,這樣橙色結果中就會顯示為0011 0010,它與我們電腦發的十六進制數0x32是對應的。接下來我們一步步演示怎樣從模擬波形解出這個橙色結果。
? 先把解碼層選擇為邊沿。
(4解碼層邊沿)
從上圖可以看到,現在藍色的解碼層結果是與模擬波形電平對應的,高電平對應1,0V附近對應0,低電平對應-1,這就是通常我們理解的三電平波形。
然后,我們把解碼層改為二進制。
(5解碼層二進制)
這時候雖然原始波形和最終數據沒變,但藍色解碼層結果有變化,現在變成了模擬波形無跳變時對應0,按類似正弦波的規律跳變時對應1,這符合MLT-3。
最后,我們把解碼層改為解擾。
(6解碼層解擾)
這時候,藍色解碼層結果又變了,它是把之前的二進制數據做了解擾運算后的結果(與解擾碼10010 00100求異或),我們觀察到橙色波形Data30下的藍色部分,一共對應了10個數據,10100 10101。如果我們查詢4B5B對應關系,這兩個5B結果對應的應該是0010和0011,然后再把這兩組4B數據交換,就能得0011和0010,也就是Data30的橙色部分。
(4B5B對應表)
你可能會問,我們是怎么知道這時候要用10010 00100作為解擾碼的?
(用來生成解擾碼的移位寄存器)
答:解擾碼是使用11位的線性反饋移位寄存器(LFSR)來生成2047位長的偽隨機數[2],這串數據是固定的,因此事先已知。但我們事先無法知道的是從解擾碼的哪個位置起作為開頭與波形的二進制數據開頭來做異或運算。我們只能前后滑動解擾碼,直到能解出符合我們預期的結果后才知道正確的偏移位置。這個前后滑動的嘗試,可能會高達8000次。
(幀結構和起始結束符號示意圖)
上圖上半部分與我們在示波器界面上看到的MAC幀結構一致,下半部分是經過正確解擾后的結果,在Preamble剛出現時對應的2個符號應該是J(11000)和K(10001)。上圖中未畫出的IDLE部分應該在Preamble之前和FCS之后,對應的符號是11111。
也就是說如果你前后滑動解擾碼,并做異或運算,直到得到了11111 11000 10001,那么你就找出了正確的解擾碼起始位置[1],同時也找出了MAC幀從哪里開始(從J開始)。
你可能還會問為什么做了4B5B對應后,還要按下圖的方式把連續兩個4B交換?
(Nibble交換)
這是因為MII接口傳輸的半字節(Nibble)流和PHY芯片內的串行比特流的順序對應關系導致的。
羅德與施瓦茨業務涵蓋測試測量、技術系統、網絡與網絡安全,致力于打造一個更加安全、互聯的世界。成立90 年來,羅德與施瓦茨作為全球科技集團,通過發展尖端技術,不斷突破技術界限。公司領先的產品和解決方案賦能眾多行業客戶,助其獲得數字技術領導力。羅德與施瓦茨總部位于德國慕尼黑,作為一家私有企業,公司在全球范圍內獨立、長期、可持續地開展業務。
-
示波器
+關注
關注
113文章
6269瀏覽量
185429 -
以太網
+關注
關注
40文章
5445瀏覽量
172105 -
羅德與施瓦茨
+關注
關注
9文章
493瀏覽量
45174
原文標題:【技術科普】| 基于R&S RTO示波器的100BASE-TX協議解碼分析
文章出處:【微信號:羅德與施瓦茨中國,微信公眾號:羅德與施瓦茨中國】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論