这里就上篇文章《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