[摘 要] 智能仪器网络中的ip分配机制会影响到系统的灵活性和稳定性。该文在智能仪器中嵌入了单片机对于dhcp动态地址分配协议的处理,实现了智能仪器网络中的基于服务器/客户端的动态地址分配机制,实现了智能仪器ip的自动分配和获取。
[关键词] 智能仪器;dhcp;动态分配;ip地址;tcp/ip;以太网
1 引 言
随着互联网技术的发展,以以太网作为通讯方式的智能仪器得到越来越广泛的应用。这种类型的智能仪器把tcp/ip协议嵌入现场智能仪器的rom中,使信号的收、发都以tcp/ip方式进行,在数据采集、信息发布、系统集成等方面都以企业内部网络(intranet)为依托。由于仪器作为网络中的独立节点存在,因而能够很自由的组成数据采集系统,并且在互联网上实现网络化的虚拟仪器和数据分析、管理系统。由于采用了以太网作为传输媒介,测试系统的拓扑结构灵活自由、易于改变,系统稳定性好。
但是,事实上,对于以太网中的节点来说,ip地址是节点的标识,节点的ip地址受到网络划分的制约。一般的网络由一些子网组成,在多数情况下,每个子网拥有不超过255个节点。节点的ip地址与所在子网的网号是对应的。
目前智能仪器在网络中的地址分配方式有静态分配ip和动态分配ip两种。静态分配是智能仪器 最常用的ip分配方式,仪器的ip地址在接入网络之前就被人为确定,它和仪器所在子网的子网号对应,以后不再改变。但是,一旦仪器网络被重新组合,某个仪器节点从一个子网内移到另一个子网时,将会发生仪器的ip地址与该子网号冲突的情况;另外,一旦这个网络中出现ip地址相同的计算机或者仪器时,就会发生ip地址冲突,这些情况不仅导致仪器网络的拓扑结构灵活程度受到制约,并进而影响到系统稳定程度。所以,更好的方案是在仪器网络里引入动态地址分配机制,根据系统的具体组合情况来自动确定智能仪器的ip地址。
2 仪器网络的动态ip分配
在文中所述的智能仪器网络中,采用了dhcp动态地址分配机制。dhcp是bootp的扩展,是基于客户端/服务器模式的一种动态指定ip地址和配置参数的机制。如图2—1所示,在每个子网内设置dhcp服务器。服务器端使用了win2000服务器自带的dhcp服务器。dhcp控制台是管理dhcp服务器的主要工具,在安装dpch服务时加入到管理行管理设置。
智能仪器执行dhcp机制的客户端协议。它首先必须进行与网络中的计算机之间的ip层通讯。仪器上电之后,先要做dhcp请求dhcp服务器进行ip配置,从dhcp服务器端中取得自身的配置信息,包括ip、仪器所在子网掩码、网关和完成数据采集功能的服务器地址。
在dhcp完成之后,仪器还须向数据采集服务器提供自己的各种信息,包括ip、id(仪器的具体标识)、当前状态等。数据采集服务器得到仪器的信息后,将建立起id-ip对应表,这样数据采集服务器就可以在网络上根据不同的仪器情况收集仪器的数据,并存入数据库。
3 智能仪器单片机实现动态地址分配流程
智能仪器采用单片机进行客户端的dhcp协议处理时,需要实现的协议有:
(1)icmp回显应答:测试仪器接入网络正常。
(2)arp请求:作dhcp服务时保证获得的ip地址没有被别人使用。
(3)arp应答:仪器被访问的时候回答自己的ip地址。
(4)udp接收发送:实现dhcp协议的基础,同时用来作对仪器的控制操作。
(5)tcp协议:仪器和计算机通信传输数据使用。保证数据传输的安全性。
(6)dhcp协议:实现获取ip的过程。
在dhcp协议中,单片机须处理dhcpdiscov-er、dhcpoffer、dhcprequest、dhcpdecline、dhcpack、dhcpnak、dhcprelease共7种dhcp消息类型,仪器处理消息的流程如图3—1所示。其中,dhcp消息格式如表3—1。
申请ip的仪器首先在本子网段内广播一个dhcpdiscove消息,源端口为68,目的端口为67。随机生成“xid”字段作为本次通话的标识。”client i-dentifier”采用网卡的以太网地址。消息内包含希望租用的时间(options中将“ipaddressleasetime”设为0xffffffff,即永久租用)。还包括希望得到的网络配置参数,自身的ip和网关的ip(options中设置“parameter request list”项)。
智能仪器将会接收到一个或多个服务器发来的dhcpoffer提供地址和配置参数。选定第一个dhcpoffer消息,比较transaction id字段是否和自己的相符,不符合则丢弃,接收另外的dhcpoffer消息。若20s内没有收到任何所需的dhcpoffer消息,重新广播dhcpdiscover。
从dhcpoffer消息中提取出服务器的“serveridentifier”以及“yiaddr”。
然后智能仪器广播dhcprequest消息,在这个消息中的“se