佟为明,高 蕾,李中伟,刘 勇
(哈尔滨工业大学电气工程系,黑龙江哈尔滨150001)
以太网媒体接入控制帧MAC由以太网控制器进行发送和接收,帧格式如图1所示[1]。其中,前导码(包含7字节的前同步码和1字节的帧起始定界符)和帧校验序列FCS两个字段由以太网控制器在MAC帧发送前和接收MAC帧时自动进行添加和删除,用户无法干预[2]。
图1 以太网M AC帧格式
通常,学生对MAC帧的完整格式的理解较为抽象,即使通过Sniffer和Etherreal等协议分析软件直观的分析截获到的MAC帧,都只能获得缺少前导码和帧校验序列字的不完整的MAC帧[3],而无法获得物理介质上传送的完整的以太网MAC帧。
本文所设计的以太网节点为接收节点,与发送节点间的连接采用标准的10Base-T双绞线。当双绞线上有MAC帧传输时,该节点能够捕捉并检测该帧。系统结构框图如图2所示。系统微处理器选择S3C44B0X。以太网接口单元通过标准以太网RJ-45接口和双绞线相接。微处理器与RJ-45之间通过网络隔离变压器20F-01连接,以滤除MAC帧中的直流信号,提高系统的抗干扰能力。MAC帧采样单元通过模拟电压比较器,将双绞线上经过曼彻斯特编码的基带信号转换为微处理器可识别的逻辑电平。然后在网络隔离变压器接收管脚处对信号进行采样:当比较器的同相端采样电压大于反相端参考电压(3.3V)时,微处理器检测到逻辑高电平;反之,微处理器检测到逻辑低电平。其中,电压比较器的同相端与20F-01的接收管脚 TPIN-连接。液晶显示单元选择图形点阵式液晶 WG320240B,并采用SED1335 LCD控制器对其进行控制。
图2 系统结构框图
当微处理器S3C44B0X检测到双绞线上出现下降沿时,便进入中断状态,MAC帧采样单元开始对双绞线上的电平进行采样,并将采样结果存入微处理器内部RAM中。采样结束后微处理器对存储的数据进行处理,并将处理结果通过液晶显示单元进行显示,使用户能够对检测到的MAC帧进行分析。由于S3C44B0X的最高工作频率为66MHz,为了使S3C44B0X能够采样到完整的MAC帧,设定系统通信速率为1Mbps。
由图1所示的MAC帧格式可知,以太网MAC帧无结束标志,一般以太网控制器能够通过硬件设计判断MAC帧结束[4]。但以太网控制器在接收MAC帧时,利用前导码字段判断帧起始以及帧校验字段判断传输正确后,就自动将前导码字段和帧校验字段删除[5],这也是为何协议分析软件无法捕捉到完整MAC帧的原因。因此本文设计的以太网节点中没有以太网控制器,MAC帧采样单元如何判断MAC帧结束就成为一个亟需解决的难题。
为了确定MAC帧结束的标志,我们利用示波器进行MAC帧结束的检验。图3所示为10Mbps数据率下,变压器20F-01接收脚TPIN-与地之间的MAC帧结束波形。由于以太网MAC帧的最后一个字节是FCS帧检验字段,无法保证所有MAC帧的最后一位均是高电平或低电平。但由图可知,当MAC帧最后一位为高电平时,MAC帧结束后双绞线将持续三个周期的高电平再恢复至无载波状态;当MAC帧最后一位为低电平时,MAC帧结束后双绞线将持续三个周期的低电平再恢复至无载波状态。根据双绞线传输特性,通信速率为1Mbps和10Mbps下所捕捉到的MAC帧波形相同,只是频率不同而已,因此本文的结论也适用于在1Mbps通信速率下得到的MAC帧结束标志。
图3 TPIN-和地之间的帧结束波形
10Base-T双绞线采用曼彻斯特编码系统在双绞线上传输数据。根据其编码规则,每个0、1电平中间都需要经历一次跳变来进行时钟同步。因而当双绞线上有数据传输时,MAC帧采样单元最多能够采样到连续 2个 0/1。根据由图3所得出的MAC帧结束标志结论,当微处理器读取到的采样信号中有连续3个以上的0/1时就表示MAC帧传输结束。本文中规定当检测到连续 3个 0/1时MAC帧采样单元结束采样。
对于系统通信速率为1Mbps的MAC帧,采样周期应为500ns。为提高采样准确率,本文选择在每个传输数据曼彻斯特编码的波峰时刻进行采样。当微处理器检测到下降沿时,表示双绞线上有MAC帧开始传送,此时微处理器必须在半个采样周期内读取第一个采样数据,因此启动定时器定时210ns,并进入采样中断子程序。当定时器溢出时,微处理器重新启动定时器定时500ns,之后读取与电压比较器相连的I/O管脚状态,并将I/O管脚对应状态值写入内部RAM,最后将计数器加1,完成对第一个双绞线电平的采样。在跳出采样中断子程序前,每隔500ns微处理器读取一次与电压比较器相连的I/O管脚状态值,然后将该值写入内部RAM,并将计数器加1。为了提高采样准确率,抑制电压比较器零点漂流,本系统设计采样160位数据后跳出采样中断子程序清除时钟累积误差。采样数据以数组的形式保存在微处理器的内部 RAM中,每采样一个数据,就先将该数据与该数组中前面两个数据进行比较。如果比较结果相等,则微处理器结束从MAC帧采样单元读取采样数据;否则继续进行采样。系统采样程序流程图如图4所示。
图4 采样流程图
由于以太网采用曼彻斯特编码系统进行信号传输,因此在信号采样完毕后微处理器需先对采样到的数据进行解码,将其还原为发送节点以太网控制器中MAC帧中的数据格式。另外,以太网传送8位信息的数据是从最左端的8位到最右端的8位,则双绞线上的MAC帧为从最左端前导码中的第一个字节开始按照图1所示字段的顺序从左向右传输。但是每8位内部的传送顺序是先低位后高位,因此微处理器在采样完毕后需对其RAM中保存的数据进行如下处理方能通过液晶进行显示。首先,系统从采样到的第一个数据开始每8位为一组将数据取出;然后判断这8位数据中是否包含连续3个相同电平,如果包含则微处理器停止对采用数据的处理;否则将这8位中第i位信号与第i+1位信号进行比较(其中,i=1,3,5,7);如果比较结果为正,则按满堆栈递增的存储方式压入堆栈一个0;反之则压入堆栈一个1;每8位信号比较完毕,就将堆栈中的4个信号按顺序取出并存储至微处理器的临时存储区;如果系统最后取出的数据不够8位,则直接将这几个数据丢弃,并结束对采样数据的处理。
以太网MAC帧的组装由以太网控制器完成,但是帧中的前导码字段和校验码字段由以太网控制器自动添加,用户无法干预。针对目前没有任何方法能够使用户直观地观察到发送节点MAC帧的完整结构的情况,本文介绍了一种以太网MAC帧检测与显示方法。实验结果证明,该方法可以捕捉到双绞线上正在传输的完整的MAC帧,并将捕捉到的MAC帧通过液晶进行显示,从而加深用户对以太网MAC帧的理解。
[1] Huaxin Zeng,Dengyuan Xu,Jun Dou.On Physical Frame Time-slot Switching over DWDM[J].Parallel and Distributed Computing,Applications and Technologies,2003,286-291
[2] 范兴刚,孙优贤.以太网帧[J].南京:工业控制计算机,2002,15(10):29-31
[3] 冯荣年,蒋凡.基于M AC层帧捕获及协议分析的技术研究[J].沈阳:小型微型计算机系统,2001,22(2):154-156
[4] 陈传虎.以太网控制芯片RTL8019AS数据帧分析[J].北京:科技资讯,2007,(26):93-94
[5] Charles E.Spurgeon.Practical Networking with Ethernet[M].USA:International Thomson Computer Press,1998,18-20