這裏就上篇文章《Profinet協議解析-DCP》內容進行實踐,經過實驗驗證各操做的準確性,而且也介紹一些基本的通訊分析方法,沒必要使用昂貴的抓包工具(某東200左右),使之成爲人人觸手可及的實驗方式。web
搞這個東西的,基本都屬於工控行業。,目前國內的工控業屬於比較苦逼的行業,固然只限於研發相關崗位,畢竟這是那部分幹活的人,說好聽點就是爲工控業崛起而奮鬥。因此吧你們手上也沒有多少money,就提供一種簡陋的方式,公司有工具的另說。有人可能會問爲何不讓公司提供或購買?話說當採購流程這個垃圾告訴你以年爲單位時,或許你就不這麼問了。別等青春已逝,一事無成。瀏覽器
工具:管理型交換機,PLC(可選),PN設備一臺,PC一臺網絡
軟件:Wireshark工具
如圖1所示,帶有端口鏡像的交換機。這裏的端口鏡像就是其本意,將某個端口鏡像到另一個端口,這樣就能夠監聽該端口上的全部流量,由於交換機相比集線器最大的優點就是實現定向的端口轉發,而不是廣播到全部的端口,最大程度上避免了網絡風暴。這也給網絡監聽帶來了麻煩的地方,好比如圖2所示,控制器在端口2,PN設備在端口1,兩個設備間正常交換數據,在PC機上監聽不到任何數據,除了廣播幀,而端口鏡像剛好能夠無條件的將數據轉發過來。最好再支持VLAN的,後面能夠用來作VLAN相關的實驗驗證。好了,準備好上述設備,基本就能夠完成本章所涉及的實驗。首先按照圖2所示,鏈接全部的設備。.net
控制器和PN設備鏈接1號和2號端口,PC鏈接在另一個端口4,經過交換機web管理界面,將端口1或者2(數據相同)鏡像到端口4。在PC上啓動Wireshark,如圖3所示,選擇監聽網卡,開始就能夠了。根據本身的須要抓取相應的數據包後就能夠中止捕獲,爲一下步篩選數據包節約時間。抓取後的數據包如圖4所示,這裏我以抓包的示例爲主,介紹上一節的DCP相關數據幀。3d
當拿到數據包後,會發現有許多的幀,比起Ethercat,Canopen要多不少。緣由就是Profinet兼容以太網,因此裏面有ARP協議幀,LLDP鄰居信息傳遞,DHCP域名解析,TCP握手幀,IPV4和IPv6等等在以太網上出現的協議幀。爲了便於拿到咱們須要的,首先要進行數據包過濾,咱們這裏要分析dcp幀,因此直接用「pn_dcp」篩選出這類數據,如圖5所示。這是DCP-Identify識別幀,《Profinet協議解析-DCP》這篇文章中介紹的第三部分,兩幀數據,一幀由plc發送給PN設備,另外一幀由PN設備作出相應。blog
如圖6所示,爲PLC向網絡中廣播的一幀數據,咱們能夠看到源地址爲PLC,目的地址爲PN的廣播域,Ethernet類型爲0x8892(Profinet)。幀的ID爲0xFEFE, 屬於DCP-Req。再往下一部分爲DPC主要的內容區域-DCPblock,這裏有詢問的設備名稱,這個設備名稱來源於下載到PLC的組態。這就是爲何當組態中的名稱與實際不符時,PLC沒法鏈接的緣由,在網絡上只有設備名稱相同的纔會響應這幀數據。這一點類同於咱們的域名同樣,方便好記比較人性化,固然還有一個很重要的緣由域名所屬權在我的,IP所屬權爲NIC組織。若是在組態中容許輸入設備mac地址,理論上就能夠直接創建鏈接。在DCP-Block中,能夠看到上一篇文章中提到的ServiceID,ServiceType,Xid等字段。ip
關於設備名稱和設備轉換名稱,這裏單獨解釋一下。這裏的設備名稱須要特別注意,「xn--xb1aa0f-lm1lh944c」這並非組態中的設備名稱,實際名稱是「驅動xb1aa0f」。在博圖組態中咱們看到的設備名稱就是可視化,可是網絡中所看到的是轉化後的名稱,有了這層轉化關係,咱們就能夠給設備任意起名,肆意妄爲哈哈。那麼爲何要存在這種轉換關係?這仍是迴歸到Profinet一網到底的理念上,它要兼容以太網,那麼做爲這種轉換,就天然須要參考以太網相關的規範,上面提到過設備名稱和域名的類比,這裏一樣是任意字符或多語言域名規範化。以前的域名是除了「-」外不容許任何特殊字符,而如今還出現了中文域名等地方語言的域名,那麼瀏覽器是怎麼識別的,畢竟不可能同時升級全球的DNS協議,必然存在一種轉化方式,使之兼容之前的域名規則,這裏的設備名稱一樣採用了這種方式,有興趣的能夠按照協議規範轉化一下,不過規範晦澀難懂,主要參考RFC3490,3491,3492,3494規範。有興趣能夠了解一下,附標準庫:https://datatracker.ietf.org/。get
言歸正傳,PLC發出了問詢,那麼就須要響應的設備進行答覆。如圖7所示,爲設備名稱爲「驅動xb1aa0f「的伺服響應數據幀。這個數據幀通常都比較長,因此這裏以block爲單元整合展現,再也不展開了。包括有設備名稱,設備ID,IP地址,設備廠家,設備類型,設備優先級等。PLC收到這幀數據就會和組態進行覈實,若是符合就承認這臺設備;若是不符合就會報錯,或從新分配相關參數。博客
那麼有玩過總線設備的小夥伴可能知道設備的ip相關參數怎麼設置的。這裏涉及到plc的啓動方式。其實有兩種狀況,一種是已經設置了ip,且符合組態數據。另外一種是未分配ip,那麼plc會用已返回的合法ip試圖創建鏈接,若是超時則從新分配相關參數。後面可能單獨一篇文章講一講plc啓動過程當中都在幹什麼?爲何有時候啓動快?有時候啓動就慢?設備數量真的時最大影響因素嗎?
由於篇幅有限,只展現了識別幀的舉例,小夥伴們能夠本身抓幀對着上一篇文章看一看profinet設備間是怎麼交流的。這裏特別解釋一下,在DCP幀裏面我按最簡單的狀況下進行的幀字段分析,有可能在實際中發現有額外的數據,這是很正常的,一個大的協議族還要兼容以太網,斷然不是簡單的幾頁就能夠囊括其中。另外文章中有不對的地方,歡迎在《遙遠的星星》本人博客中評論指正,共同交流。
附:blog.csdn.net/zh_666888/
2020-12-20