网关软件运行后,用户通过菜单命令启动网络监听线程。网络监听线程负责接收和发送数据报。网络监听线程首先从外部读入初始化信息,包括本机IP地址、NDIS序号、网络ARP表、路由表。然后装载VxD程序,并进行初始化,完成监听的准备工作。接下来线程开始循环访问网络接收缓冲区和串口缓冲区,对其中的IP数据报进行分析、转发。
对于从网络接收缓冲区得到的数据报,网络监听线程首先对其目的IP地址进行分析,判断该数据分组是否需要转发。对于需要转发的,网关计算机给它加上相应的数据链路的头信息,并进行码字透明处理后存入串口发送缓冲区;对于不需要转发的数据报不予处理。这样的处理主要是为局域网中可能存在多个网关而设计的。
对于从串口接收缓冲区得到的数据报,网络监听线程首先提取该数据报的目的IP地址,通过该IP地址查询ARP表得到目的主机的MAC地址。线程在该数据报前加上MAC帧头,通过调用VxD接口函数发送该数据报。
3.2.3 串口通信模块设计
串口通信部分为上层网关功能模块提供透明传输。实验规定的串口通信速率很低(4800bps),当局域网的数据流量增大时,将成为整个通信的瓶颈。因此,对这部分软件的主要要求是在保证通信误码率低的基础上达到高效。串口通信包括发送和接收两部分,以全双工的方式工作。这样可以保证串口的工作效率。采用线程的工作方式也便于和整个软件其他模块的协调运行(如与上层网关功能模块之间)。
(1)数据发送模块
IP数据报的发送通过一个独立的线程来进行。由于串口通过无线链路连接,采用短波通信,误码率较高,因此要求一定的传输协议来保证数据的可靠传输。实际实施时,采用奇校验和停止等待协议来保证串口数据的可靠传输。每一个字节的传输都采用奇校验方式。在发送一个IP数据包采用停止等待协议。每次发送数据时,先查询是否有确认或出错帧要发送,如果有,则发送确认或出错帧。如果没有,则查询数据缓冲区是否有IP包要发送。如果有,则从数据缓冲区中取出一个包,附上帧头和数据起始标志进行发送。发送完数据后,等待对方返回确认。如果对方在规定时间内没有返回确认则重新发送刚才的数据。在等待期间不发送新的数据,但是如果本地接收数据后需要发送确认消息给对方,则尽快发送。
在本软件中,两个半网关用于连接两个局域网。对串口通信的要求是双向高速。两个半网关可能同时有大量数据要传送。当使用停止等待协议时,停止等待协议的等待时间应为对方发送最大一个数据包所需要的时间。根据实验得知,在以太网上,最大数据包长度为1500字节,因此,等待时间应为:1500×2×8/4800=5s。这个时间是最大等待时间。在实验中,得到平均等待时间为853ms。因此,在软件中设置等待时间为1s。
(2)数据接收模块
接收模块由消息响应函数完成。先搜索报文头,对报文头进行处理。再判断接收帧的类型,作出相应处理。接收完后,查询数据接收错误标志,如果有错误发生,则丢弃该数据包;反之,将该数据包存入缓冲区。
4 系统测试与应用前景
WWW是目前Internet网上的主要服务,它是基于TCP/IP的典型应用。以这项服务对所开发的网关软件进
行了测试。实验表明,网关软件原理正确。
由于采用了串口通信技术,该成果可经简单改装,用在基于modem的网络互连等多方面,如在监控系统的
各级之间、公司总部与分公司、办事处之间实现廉价的LAN互联。