APP下载

某型干扰系统网络故障的分析与解决方法

2016-05-1791715部队杨成理湛江705厂欧献辉91715部队杨水清

电子世界 2016年8期
关键词:网络故障

91715部队 杨成理湛江705厂 欧献辉91715部队 杨水清



某型干扰系统网络故障的分析与解决方法

91715部队 杨成理
湛江705厂 欧献辉
91715部队 杨水清

【摘要】本文介绍了VxWorks系统下TCP/IP协议的实现方式,通过对Socket属性的分析,解决了网络连接判断的不准确性和由此导致的网络任务阻塞。

【关键词】网络故障;VxWorks;TCP/IP协议;Socket

某型干扰系统体系庞大、配套复杂,各组件之间的协同主要依赖通信控制器进行集中组织。在实际使用过程中,偶尔出现通信控制器显示与其他组件之间的通信连接状态正常但却无法进行数据传输的故障,甚至在某组件关机后的很长一段时间内在通信控制器上显示其通信连接状态正常。该通信控制器的网络控制软件基于VxWorks操作系统开发,使用TCP/IP协议进行网络数据交换。本文通过剖析TCP/IP协议重要接口Socket套接字在VxWorks操作系统中的具体配置方法,来解决该干扰系统无法及时更新TCP连接状态以及因网络非正常中断等原因导致网络任务阻塞而引起的故障。

1 几个相关概念

1.1TCP/IP协议简介

TCP/IP协议最早由麻省理工大学和一些商业组织为美国国防部开发,并在Internet的前身即ARPANET上得到初次实现。TCP/IP协议是由一组在不同层次上实现的多个协议形成的组合,通常分为链路层、网络层、传输层和应用层等层次,在TCP/IP网络协议得以具体实现的各个环节上发挥着不同的作用。虽然牺牲了网络传输的速度和效率,但因TCP/IP协议同时满足可扩展性强、可靠性高及分布式实现等突出特点,已成为实际上的“全球互联”基础性协议。作为顶层协议,TCP/IP协议并没有具体规定应用程序和协议软件的接口细节[1],而采用与操作系统无关的Socket套接字来具体实现,后者在VxWorks操作系统中被广泛使用。

1.2VxWorks操作系统

VxWorks 操作系统是美国风河公司(WindRiver)在1983年开发的一种嵌入式实时操作系统,因其可靠性高和实时性强等突出特点被广泛地应用在通信、军事、航空、航天等高精尖技术及对实时性要求极高的领域中,如卫星通讯、弹道制导、飞机导航等。VxWorks操作系统提供了完善的配套机制来实现对TCP/IP协议的”透明”访问,包括Socket套接字、远程过程调用(RPC)、简单网络管理协议(SNMP)、网络文件系统(NFS)、远程Shell执行(RSH)、文件传输协议(FTP或TFTP)、引导程序协议(BOOTP) 和动态主机配置协议(DHCP)等。无论是松耦合的串行线路、紧耦合的利用共享内存的背板总线或标准的广域网连接,VxWorks操作系统的网络机制都遵循标准的Internet 协议。

1.3Socket套接字

随着网络技术的发展,TCP/IP协议被集成到操作系统内核中,并用Socket套接字来提供一个标准的通信端口。通过这个端口,一台计算机能与任何一台具有Socket端口的计算机进行通信。Socket套接字记录了通信双方进行交互必需的所有信息,其建立在TCP和UDP协议之上,一旦创建了Socket实例,该套接字就会一直存在,直到该TCP连接被关闭。

作为常用的通信方式,在客户端和服务器端通信时,应用程序均会使用一个预先规定的事件序列来完成整个通信过程。首先,客户端和服务器端均要创建一个Socket套接字。接着,服务器端调用bind()函数给Socket套接字分配一个预先约定的端口,客户端和服务器端均能使用sendto()和recvfrom()函数来发送和接收数据包直至完成传递。最后,客户端和服务器端均调用closesocket()函数来关闭套接字,从而完成整个通信流程。

上述函数的原型描述如下:

(1)创建套接字

SOCKET PASCAL FAR socket(int af, int type, int protocol);

参数:af指定通信发生的区域;type描述套接字类型;protocol说明套接字使用的协议。

(2)绑定本地地址

INT PASCAL FAR bind(SOCKET s, const struct sockaddr FAR * name, int len);

参数:s是由socket()函数创建且未进行连接的套接字句柄;name指套接字s的本地名称;len为name的长度。

(3)建立连接

建立套接字连接需要使用connect()和accept()函数,前者用于建立连接,但此时并无实际的数据包交换;后者用于等待某客户进程的实际连接。上述四个函数可以完成一个完全五元通信(协议、本机地址和端口号、目的地址和端口号)相关的设置。

(4)数据传输

当一个基于TCP/IP协议的连接建立之后,可以使用send()和recv()函数发送与接收数据。

INT PASCAL FAR send(SOCKET s, const char FAR *buf1, int len, int flags1);

INT PASCAL FAR recv(SOCKET s, const char FAR *buf2, int len, int flags2);

参数:s表示Socket套接字实例;buf1表示发送缓冲区,buf2表示接收缓冲区;len表示缓冲区长度;flags1指定传输控制方式如是否发送带外数据,flags2用于指定传输控制方式如是否接收带外数据。

1.4设置Socket套接字选项

通过上述程序设置的Socket套接字无法定义用于控制Socket套接字及TCP协议的具体细节。VxWorks操作系统提供setsockopt()函数来进行设置,其定义如下[2]:

STATUS setsockopt( int s, int protocol, int optionname, char * optionval, int optionlen );

参数:s表示Socket套接字实例;protocol表示协议标准,可选IPPROTO_TCP,IPPROTO_IP或SOL_SOCKET;optionval表示需设置选项值的地址;optionlen表示需设置选项值的长度;

optionname表示需设置的选项,常用的选项如下表所示:

TCP连接建立后,若连接的任何一方因某种原因导致连接中断,TCP必须能够自动检测到网络中断并释放该连接。如果连接已建立,该定时器在无数据传输时间达到TCPTV_KEEP_IDLE时启动,TCP将发送一个数据长度为0的连接状态询问报文,若连接正常,则系统能收到应答信号,否则TCP将每隔TCPTV_KEEPINTVL时间间隔且最多发送TCPTV_KEEPCNT次连接状态询问报文,若仍没接收到应答信号,TCP将自动释放该连接,与该连接相关的所有资源都将被释放,所有阻塞在该连接上的读写任务都将立即被解除[3]。

2 故障原因分析

通过对VxWorks操作系统下TCP协议的分析,引发该干扰系统网络故障的主要原因可能是当TCP连接的某一方离线时,其连接状态无法及时得到更新并广播给网络内与其相连的其他终端设备,后续的TCP数据包不断堆积造成在TCP连接建立时所申请的缓冲区溢出,导致控制软件无法响应其他周边设备的TCP连接请求而形成网络任务阻塞。

分析某型干扰系统控制软件的源代码,在/target/h/ net/tcp_timer.h下TCP连接的默认值如下:

tcp_keepidle = 120*60;

tcp_keepintvl = 75;

tcp_maxidle = 8;

由上述代码可见,TCP连接建立后,控制软件在无数据传输时间达到120*60秒即2小时后TCP将发送一个数据长度为0的连接状态询问报文,若连接正常,则系统能收到应答信号,否则TCP将每隔75秒且最多发送8次连接状态询问报文,若仍没接收到应答信号,TCP将自动释放该连接,在释放之前均默认为TCP连接正常,控制软件不断发送数据至发送缓冲区,导致缓冲区数据不断增加直到缓冲区溢出,其他网络任务被阻塞而导致该干扰系统出现网络故障。

3 解决方法与步骤

通过上述分析,建立TCP连接时所需tcp_keepidle、tcp_keepintvl、tcp_maxidle等参数与后续连接过程中连接状态的及时更新息息相关,能有效预防缓冲区溢出、网络任务阻塞等故障的出现,可通过setsockopt()函数或者在Socket套接字的其他初始化函数中对上述参数进行更改。

针对某型干扰系统网络故障出现的部位,在VxWorks操作系统下修改控制软件的源代码,在初始化Socket套接字时增加对如下代码:

重新编译后通电测试,在网络非正常中断大约100s后,系统检测到该网络中断并实时更新网络状态为连接断开,系统与其余网络的通信在网络阻塞了大约60s左右后恢复正常,该干扰系统的网络故障排除。

4 结束语

该文通过在VxWorks操作系统中修改Socket套接字的相关选项,解决了某型干扰系统在实际应用中无法及时更新TCP连接状态以及因网络非正常中断等导致网络任务阻塞的故障,极大地提高了系统的可靠性。

参考文献

[1]Ed Taylor编著,王虎,邓宏涛,刘志刚等译.TCP/IP使用详解[M].机械工业出版社,1999.

[2]李方敏编著.VxWorks高级程序设计[M].清华大学出版社,2004.

[3]高飞,高平编著.计算机网络和网络安全基础[M].北京理工大学出版社,2002.

猜你喜欢

网络故障
VxWorks网络存储池分析在网络故障排查中的应用
基于信息流的RBC系统外部通信网络故障分析
网络故障预测与健康管理的关键技术
浅论企业机房的安全管理
加强局域网维护减少计算机网络故障分析
基于人工智能的网络故障诊断相关问题研究
Wireshark协议解析在网络故障排查中的应用
通讯网络故障类型研究