1 问题描述

  在西安地铁1号线工作现场,当维护人员在网络中接入自己的PC机设备,对现场DTI设备进行操作时,DTI设备偶尔会出现不停地发送广播数据包的情况,最终导致与该DTI系统在同一个局域网段的所有其他设备,全部无法正常运行。

2 问题分析

  为了分析上述问题,需要从以太网的工作原理和DTI设备的实现原理两方面着手。

  2.1 DTI系统简介

  DTI系统通过以太网从ATS系统接收相关的发车显示命令,通过处理后,在显示屏上进行显示,用于提示列车司机列车在此站的状态。其系统结构如图1所示。

  整个DTI嵌入式软件运行于CPU LPC2378内,采用μCOS-II操作系统,与ATS之间的通信使用TCP/IP协议栈中的TCP方式。

  从通信角度看,ATS系统是客户端,DTI系统是服务器,在进行正常数据处理之前,ATS系统与DTI系统之间先进行连接(TCP协议的3次握手),该连接由ATS系统发起;正常连接后,ATS系统与DTI系统之间采用一问一答的通信方式,即ATS系统按周期向DTI系统发送控制命令,DTI系统处理完该命令后将处理结果上报给ATS系统,在整个通信过程中,不存在DTI系统主动向网络上发送数据的情况,如图2所示。

  2.2 以太网工作原理

  2.2.1 通信流程

  下面通过举例的方式,来说明网络中的两个节点是如何通信的。

  如图3所示,比如A要给B发送数据,已知B的IP地址,那么A就用子网掩码取得网络地址,判断目的IP与自己在同一网段。

  虽然目的IP在同一网段,但不知道转发数据所需的MAC地址,A就发送一个ARP请求(广播方式),B返回其MAC地址,A用此MAC封装数据包并发送给交换机,交换机启用二层交换模块,查找MAC地址表,将数据包转发到相应的端口。

  又比如A要给C发送数据,已知C的IP地址,那么A就用子网掩码取得网络地址,判断目的IP与自己不在同一网段。

  目的IP地址显示不是同一网段,那么A要实现和C的通信,在流缓存条目中没有对应MAC地址条目,就将第一个正常数据包发送向一个缺省网关,这个缺省网关一般在操作系统中已经设好,对应第三层路由模块,所以可见对于不是同一子网的数据,最先在MAC表中放缺省网关的MAC地址;然后就由三层模块接收此数据包,查询路由表以确定到达C的路由,将构造一个新的帧头,其中以缺省网关的MAC地址为源MAC地址,以主机C的MAC地址为目的MAC地址。通过一定的识别触发机制(ARP请求机制),确立主机A与C的MAC地址及转发端口的对应关系,并记录进流缓存条目表,以后的A到C的数据,就直接交由二层交换模块完成。这就是通常所说的一次路由多次转发。

  由此可见,网络中通信的双方,无论IP地址是否处于同一网段,在第一次通信时都会涉及到ARP请求的操作。那么ARP是如何工作的呢?

  2.2.2 ARP处理流程

  Address Resolution Protocol为地址解析协议,即ARP(ARP)是根据IP地址获取物理地址(MAC地址)的一个TCP/IP协议。

  以太网的两台主机需要通信时,双方必须知道对方的MAC 地址。每台主机都要维护IP 地址到MAC 地址的转换表,称为ARP 映射表。ARP 映射表中存放着最近用到的一系列与本主机通信的其他主机的IP 地址和MAC 地址的映射。在主机启动时,ARP 映射表为空;当一条动态ARP 映射表项规定时间没有使用时,主机将其从ARP 映射表中删除掉,以便节省内存空间和ARP 映射表的查找时间。

  如图3所示,A 和B 在同一个网段,主机A 的IP 地址为1.1.1.2,B 的IP 地址为1.1.1.3,主机A 要向主机B 发送信息。主机A 首先查看自己的ARP 映射表,确定其中是否包含有1.1.1.3 对应的ARP 映射表项。如果找到对应的MAC 地址,则主机A 直接利用ARP 映射表中的MAC 地址,对IP 数据包进行帧封装,并将数据发送给主机B。

  如果在ARP 映射表中找不到对应的MAC 地址,则主机A 将该数据包放入ARP 发送等待队列,然后创建一个ARP request,并以广播方式在以太网上发送。ARP request 数据包中包含有主机B 的IP 地址,以及主机A 的IP 地址和MAC 地址。由于ARP request 数据包以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。

  主机B 首先把ARP request数据包中的请求发起者(即主机A)的IP 地址和MAC 地址存入自己的ARP 映射表中。然后主机B 组织ARP 响应数据包,在数据包中填入主机B 的MAC 地址,发送给主机A。这个响应不再以广播形式发送,而是直接发送给主机A(点对点方式)。主机A 收到响应数据包后,提取出主机B 的IP 地址及其对应的MAC 地址,加入到自己的ARP映射表中,并把放在发送等待队列中的发往主机B 的所有数据包都发送出去。一般情况下,ARP 动态执行并自动寻求IP 地址到以太网MAC 地址的解析,无需管理员的介入。

  如果主机A一直收不到来自主机B的ARP响应数据包,仍会一直发送此ARP request广播数据包。

  2.3 现场网络简介

  为了方便描述,将西安地铁1号线与DTI系统相关的通信从网络结构图中的分离出来,如图4所示。

  西安地铁1号线正线包括车站:后卫寨站、三桥站、皂河站、枣园站、汉城路站、开远门站、劳动路站、玉祥门站、洒金桥站、北大街站、五路口站、朝阳门站、康复路站、通化门站、万寿路站、长乐坡站、浐河站、半坡站、纺织城站。

  整个正线分为3个联锁区段,分别以后卫寨站、洒金桥站以及纺织城站为联锁站。

  每个联锁区段内的设备分属于同一个子网,同一个VLAN内,3个联锁区段共分为3个VLAN。

  2.4 问题分析

  首先,分析现场维护人员反馈的原始数据,发现造成广播风暴的原因是:某个DTI系统在不断地向外发送ARP广播数据,发送间隔为20 ms。

  梳理DTI系统嵌入式软件,其处理流程如图5所示。

  与“发送ARP数据包”相关的处理过程是图5所示的“处理结果上报”,进一步梳理“处理结果上报”过程,如图6所示。

  根据本文2.1和2.2的描述可知,ATS系统在向DTI系统发送第一个数据包(连接请求)之前,已通过ARP协议向DTI系统询问其MAC地址;同理DTI系统在收到ATS系统的第一包数据(连接请求)之前,已根据接收到的ARP数据将ATS系统的IP-MAC数据保存到自身的ARP映射表内。

  从上面的分析可知,DTI系统上报处理结果时,不应出现ARP映射表内无法找到对应IP-MAC表项的情况,那么为什么会发生不停发送ARP广播数据包的情况呢?

  继续梳理发送相关过程,发现DTI嵌入式软件选择的发送对象为:所有给自身发送过数据的主机。由于交换机的存在,若现场管理混乱的话,很容易出现接入交换价的设备(如PC机)向DTI系统发送数据的情况。

  与现场维护人员进行沟通后得知,发生DTI系统在不断地向外发送ARP广播数据之前,均有维护人员使用PC机通过交换机对现场DTI系统进行操作(如系统升级、更新DTI系统时间等)的情况。

  综上所述,总结如下:

  1)DTI系统发送数据过程有缺陷,发送对象为所有给自身发送过数据的主机,而非只有ATS子系统;

  2)上述DTI系统的缺陷,导致如果系统外的伪装者给本DTI系统一包数据后,DTI在向该主机进行回复时,由于ARP映射表内没有该主机的IP-MAC表项,就会每20 ms向外广播一包ARP请求数据;

  3)现场使用二层交换机来构建PIC网络,二层交换机对广播包的处理方式是直接向本局域网内的所有设备转发,导致同一个局域网内的所有设备均会每隔20 ms收到该ARP请求包;

  4)TCP/IP协议规定,对于广播包而言主机要无条件的进行接收和解析,这就造成PIC网络内,与问题DTI系统处于同一个局域网的所有设备在不停的解析该ARP请求包,从而影响自身业务的处理。

3 解决措施

  通过前述章节的分析,提出如下处理策略,如表1所示。

4 总结

  以TCP/IP协议栈为基础,详细分析了现场广播风暴发生的原因,并按照应用的需要给出了解决策略;同时本文对问题的分析和解决过程,也为读者分析和解决问题提供了思路。

参考文献

  [1]华为技术有限公司.HCNA网络技术学习指南[M].北京:人民邮电出版社,2012.

  [2]沈海娟.网络互联技术—路由与交换[M].北京:浙江大学出版社,2006.

  [3]刘晓辉.交换机路由器防火墙[M].北京:电子工业出版社,2015.

  [4] KeivinR,RichardStevens.TCP/IP协议[M].范建华,胥光辉,张涛,等译.北京:机械工业出版社,2015.

  [5]竹下隆史,村山公保,荒井透,等.图解TCP/IP[M].北京:人民邮电出版社,2013.

  [6]怯謦乾.嵌入式网络通信开发应用[M].北京:北京航空航天大学出版社,2010.

  [7]刘健康,焦海波.嵌入式网络系统设计[M].北京:北京航空航天大学出版社,2008.

  [8]王晓薇.嵌入式操作系统μc/OS-II[M].北京:清华大学出版社,2012.