本章為系列指南的第六章,這一章我們暫時離開Keil,離開STM32,離開C語言,這一章我們要去了解一些以太網(wǎng)相關的知識,特別是學習使用大名鼎鼎的調(diào)試以太網(wǎng)通信程序的利器:WireShark。
幀結構
我們從小就聽說過計算機中全都是二進制的0和1,這個道理幾乎連考不上三本的文科生都懂,但是很難有直觀的感受,甚至連由16個bit,也就是16個二進制的0/1構成的十六進制0/F,再由兩個十六進制的0/F形成的0x00/0xFF這種Byte(字節(jié)),都很難直觀感受到,畢竟計算機世界太豐富了,各類色彩,圖片,網(wǎng)站,視頻,游戲充斥著我們的日常,所謂「亂花漸欲迷人眼,淺草才能沒馬蹄」,形形色色的計算機資源就是「亂花」,其背后單調(diào)的Byte才是「淺草」,我們在網(wǎng)絡通信時只需要Byte的顆粒度,至于細化到bit的精度,只有在研究純電子電路時才會涉及到。如果說如何傳輸bit是PHY層負責的問題,那么如何構造和解析Byte就是MAC層要肩負的責任了。
由Byte組成的一個個網(wǎng)絡幀,勢必要按照一定的格式進行排列,就像如果要你自己自己編排一個串口通信的協(xié)議,你也一定會考慮包頭、包尾、校驗位這些。
Ethernet V2協(xié)議在鏈路層規(guī)定了一個基本的幀結構,如下:
目標MAC | 源MAC | 類型 | 數(shù)據(jù) | 循環(huán)冗余校驗FCS |
---|---|---|---|---|
6字節(jié) | 6字節(jié) | 2字節(jié) | 46-1500字節(jié) | 4字節(jié) |
因此,最小的幀長度是6 + 6 + 2 + 46 + 4 = 64個Byte,最大長度是6 + 6 + 2 + 1500 + 4 = 1518個Byte。
上表最后4個Byte形成了一組循環(huán)冗余的CRC校驗數(shù)據(jù),很遺憾的是我們能通過軟件手段監(jiān)聽出來的幀結構都不會含有這段數(shù)據(jù),因為網(wǎng)卡在接受到報文后就會立即對數(shù)據(jù)進行校驗,凡是不滿足校驗規(guī)則的數(shù)據(jù)包會直接丟棄,不會觸發(fā)操作系統(tǒng)的以太網(wǎng)事件。因此你能監(jiān)聽到的報文都是符合規(guī)則的,網(wǎng)卡交給上層軟件應用時也會自動將校驗數(shù)據(jù)剝離。此外,具體的循環(huán)冗余CRC校驗的算法是什么大家也不用管了,在使用STM32調(diào)用發(fā)包指令時,MAC層會幫我們計算好的。
一個典型的ARP幀報文如下:
ff ff ff ff ff ff 00 11 0e 0b 03 8a 08 06 00 01
08 00 06 04 00 01 00 11 0e 0b 03 8a c0 a8 01 c7
00 00 00 00 00 00 c0 a8 01 fe 00 00 00 00 00 00
00 00 00 00 00 00 00 00 20 20 20 20
這是一個最簡單的60Byte的ARP報文(另有4個FCS校驗數(shù)據(jù)被網(wǎng)卡吞了,總長度64Byte),看上去是不是像是亂碼,完全無法理解,別著急,下面介紹網(wǎng)絡編程的神器WireShark。
WireShark·線路鯊魚
這款名字里帶有「鯊魚」的軟件,真的是名副其實,大鱷級的網(wǎng)絡編程神器:精確到微妙級別的底層網(wǎng)絡包監(jiān)聽,內(nèi)置上千種網(wǎng)絡協(xié)議,上下文分析得絲絲入扣,你通過它即可完全理解整個網(wǎng)絡上正在發(fā)生了什么。無論是初學網(wǎng)絡的思科學員想一窺網(wǎng)絡的究竟,還是努力工作的程序員需要進行協(xié)議的分析,亦或是躲在陰暗處的黑客試圖在交換機上刮起一場網(wǎng)絡風暴,WireShark都能助你一臂之力。
軟件下載地址:https://www.wireshark.org/#download
WireShark為了能夠監(jiān)聽到網(wǎng)絡底層的數(shù)據(jù)包,在Windows上使用了叫做winpcap的技術,而winpcap又是使用了libpcap這個庫,這樣的調(diào)用關系其實是為了解決一件事:能在操作系統(tǒng)上層操作底層網(wǎng)絡數(shù)據(jù)包。
我們平時在C++,JAVA中談論到的網(wǎng)絡編程,其實所處的層級都是高層,回想一下那些Socket編程所講到的知識,一般上來就會講TCP/UDP,也就是處在高層應用開發(fā)的高度來講,網(wǎng)絡編程非TCP即UDP,別無其他。在《STM32F4+DP83848以太網(wǎng)通信指南第一章:知識儲備》里我講到以太網(wǎng)分為很多層(按照OSI模型有七層,按照TCP/IP協(xié)議有五層),除了應用層以外,我們還有很多底層的數(shù)據(jù)包跑在網(wǎng)絡上(比如ARP數(shù)據(jù)包、ICMP數(shù)據(jù)包等),這些數(shù)據(jù)包大部分不是由一般編程人員通過各種網(wǎng)絡應用程序發(fā)起的,那么它們是由誰發(fā)起的,又是由誰來負責接受和解析呢?這個答案是網(wǎng)卡、交換機,以及操作系統(tǒng),這些數(shù)據(jù)包關系到網(wǎng)絡的通路、拓撲、路由,用戶層面一般不需要了解和控制,對操作系統(tǒng)來說,一般也是不會讓用戶隨意觸碰甚至自行構建網(wǎng)絡幀的。
WireShark利用winpcap做到了監(jiān)聽底層網(wǎng)絡包,它嚴格地限制了自己無法對網(wǎng)絡數(shù)據(jù)進行修改、編輯、轉發(fā)。一旦普通用戶對以太網(wǎng)的了解更多一些,并且能夠利用WireShark處理和轉發(fā)網(wǎng)絡包,那對于網(wǎng)絡安全真是一件非??植赖氖虑?。
說了這么多,其實都是在講一些周邊知識。WireShark的安裝步驟我就不贅述了,下載和安裝都是很簡單的,現(xiàn)在我們來看看上面提到的那份看上去像亂碼的ARP數(shù)據(jù)包,其實它就是我用WireShark捕獲到的,上面的「亂碼」只不過是我用十六進制的方式直接復制出來,接下來我們看看這份數(shù)據(jù)包在WireShark的幫助下會不會更清晰一點:
如上圖所示,在WireShark的幫助下,數(shù)據(jù)包中每一個結構都清晰可見,WireShark幫助我們將一堆十六進制的Byte理解得就如同json數(shù)據(jù)一樣清晰,其內(nèi)置的數(shù)千種網(wǎng)絡協(xié)議,使得WireShark對各種各樣的網(wǎng)絡包每一位的作用都了如指掌。在軟件的下方區(qū)域點擊任意一位Byte,它都會在中部區(qū)域將這一位的含義和作用清晰地顯示出來。
我們再來看一個稍微復雜點的IPV4數(shù)據(jù)包,是我們常用的一個ping指令發(fā)出去的ICMP幀,在WireShark上顯示74個Byte:
同樣,WireShark幫助我們理解起來要非常清晰,截圖其實并不能很好地體現(xiàn),我們在使用WireShark的時候隨時可以用鼠標點擊任意字節(jié),顯示其含義。
廣播和點對點
最后我們再介紹一些交換機的附帶知識,我們知道網(wǎng)絡幀一般會在開頭的6個字節(jié)標明這個網(wǎng)絡幀的接受設備的MAC地址,如果這個包要向局域網(wǎng)內(nèi)所有設備進行廣播,比如上面那個ARP包,這六個字節(jié)一般為FF FF FF FF FF FF,如果這個包要向一個特定的設備進行通信,這六個字節(jié)則為一個確定的MAC地址,比如上面那個ICMP包,其指向了交換機,交換機收到了以后需要向上行網(wǎng)絡請求。
如果局域網(wǎng)內(nèi)的主機A需要向主機B發(fā)送一個點對點的數(shù)據(jù),那么封裝后的以太網(wǎng)幀的前六個字節(jié)就為主機B的MAC地址,交換機收到后會查詢自己的維護的映射表,比如找到自己的端口2上的設備的MAC地址就是B的地址,那么交換機就向端口2上的網(wǎng)線投送這個數(shù)據(jù)包,交換機其他端口上的設備就收不到這則數(shù)據(jù)包了。
那么我們在做以太網(wǎng)協(xié)議分析時,一般是處于主機C的位置來監(jiān)聽和分析A和B的通信,大多數(shù)情況下他們之間是點對點通信,主機C在局域網(wǎng)中是觀察不到這些數(shù)據(jù)包的,因為交換機壓根就不將A和B的通信數(shù)據(jù)轉發(fā)給主機C。
這時候就要祭出又一款硬件神器了:帶有端口鏡像功能的網(wǎng)管型交換機
利用這種交換機,可以進入管理控制界面,配置端口映射,將設備A和設備B之間通信的雙向數(shù)據(jù)全都轉發(fā)給設備C,方便WireShark進行協(xié)議分析,最終我們可以根據(jù)分析出來的協(xié)議,在嵌入式STM32中編寫自己的協(xié)議棧,實現(xiàn)DIY的設備D,與設備A進行通信,取代設備B。
上圖就是我購買的一款網(wǎng)管型交換機中配置端口映射的界面。
小結
這一章我們對以太網(wǎng)的幀結構有了一個基本的認識,了解了網(wǎng)絡上跑的各種數(shù)據(jù)包在MAC層的表現(xiàn)形式,能夠運用WireShark觀察一些簡單的由各種十六進制數(shù)據(jù)組成的數(shù)據(jù)包,最后我們還了解了如何運用網(wǎng)管型交換機配置端口映射,在局域網(wǎng)中的C端監(jiān)聽A和B的通信。
以上,為下一步在STM32嵌入式設備中編寫網(wǎng)絡協(xié)議打下了基礎。
上一篇:STM32開發(fā)筆記53:STM32F4+DP83848以太網(wǎng)通信指南系列(七)
下一篇:STM32開發(fā)筆記51:STM32F4+DP83848以太網(wǎng)通信指南系列(五)
推薦閱讀
史海拾趣
在電子行業(yè)的激烈競爭中,Bomar Interconnect公司憑借持續(xù)的技術創(chuàng)新,逐漸嶄露頭角。公司研發(fā)團隊不斷深入研究新型連接技術,成功推出了一系列高性能、高可靠性的連接器產(chǎn)品。這些產(chǎn)品在市場上獲得了廣泛認可,為公司帶來了穩(wěn)定的收入來源。同時,公司還積極投入資源,加強與其他企業(yè)的技術合作,不斷拓寬產(chǎn)品應用領域,進一步提升了公司的市場競爭力。
隨著技術的不斷發(fā)展,Cynergy 3不斷將新技術應用于產(chǎn)品研發(fā)中。在液位傳感器和流量傳感器領域,公司推出了多款具有創(chuàng)新功能的產(chǎn)品,滿足了市場對于高精度、高可靠性的需求。此外,Cynergy 3還在RF中繼技術方面取得了重大突破,開發(fā)出了一系列適用于特定通信應用的繼電器產(chǎn)品。這些技術創(chuàng)新不僅提升了公司的市場競爭力,也為公司贏得了眾多行業(yè)獎項和榮譽。
Cynergy 3一直將客戶需求放在首位,致力于為客戶提供定制化的產(chǎn)品解決方案。公司擁有一支經(jīng)驗豐富的工程師團隊,他們與客戶緊密合作,深入了解客戶的實際需求。在此基礎上,Cynergy 3不斷推出符合客戶需求的新產(chǎn)品和新技術。這種以客戶需求為導向的產(chǎn)品創(chuàng)新策略使得Cynergy 3能夠不斷滿足市場的變化需求,保持其在行業(yè)中的領先地位。
在20世紀90年代末,Cygnal Integrated Products Inc由幾位熱衷于微控制器技術的工程師創(chuàng)立。他們看到了嵌入式系統(tǒng)在電子產(chǎn)品中的巨大潛力,并決定專注于開發(fā)高性能、低功耗的微控制器。通過不斷的技術創(chuàng)新和市場調(diào)研,Cygnal成功推出了其首款產(chǎn)品——一款集成了多種外設接口的8位微控制器,受到了市場的熱烈歡迎。
本信息來自合作QQ群:AVR單片機學習與交流群(17727270) 群管理員在壇子里的ID:銅河 要有COM口,有并口。有網(wǎng)口… 查看全部問答∨ |
EP3C120F780是CYCLONE III 中比較大的FPGA,其相關介紹資料如下圖: 780個管腳,F(xiàn)BGA封裝,工業(yè)溫度(-40 到100度),商業(yè)溫度(0~85度) ES: 工程樣品, LEAD-FREE 表示啥意思? 此外上面也沒有介紹,其等效的邏輯門數(shù)量? 這而也 ...… 查看全部問答∨ |
這是一個大喜又大悲的結果,前天搞定了6410下USB攝像頭驅動,可以捕獲320X240 YUV420格式圖像,昨天修改成了實時視頻流的程序,結果大失所望,S3C6410的USB HOST是USB1.1協(xié)議的,全速12Mbps,所以我想獲取30FPS的圖像很難呀,實際測試結果是160MS一 ...… 查看全部問答∨ |
|
淘寶購物特點是,一次性的,退不了的,所以\"兵者國之大事,不可不察也\" 一句話,挑最近成交多的,而且貨比三家,再有同賣家談好,別發(fā)生不愉快. 我上淘寶買東西主要有以下幾種方式: 一,急 我對急用的東東,不賣不行非買不可的,我貨比三家后,找 ...… 查看全部問答∨ |
據(jù)我的總結如下: begin-end語句的各句話是順序執(zhí)行的; fork-join語句各句話是并行執(zhí)行的; 阻塞賦值“=”計算表達式和賦值一起進行; 非阻塞賦值“<=”先計算表達式,再在語句塊中統(tǒng)一賦值; 但是,唉,說實話還是搞得不明不白的??!比如begin- ...… 查看全部問答∨ |
開貼說說sqlite移植 1)下載sqlite的源碼,解壓后進入文件夾,新建build文件夾 2)可使用../configure -help查看配置的參數(shù)說明項 3)進入build文件夾使用命令生成makefile文件:../configure --host=arm-arago-linux-gnueabi --prefix=/hom ...… 查看全部問答∨ |