联系我们 |
 |
合作经济与科技杂志社
地址:石家庄市建设南大街21号
邮编:050011
电话:0311-86049879 |
|
|
经济/产业 |
[提要] 如何快速地发现LAN共享资源是很重要的。本文针对当前嵌入式多媒体系统在网络文件共享设备发现环节还存在着较低的效率,无法达到最佳用户体验的问题,提出了一个基于嵌入式多媒体系统的LAN快速扫描算法,并通过实验对扫描算法进行验证,结果表明该扫描算法是高效的。
关键词:嵌入式;网络文件共享;局域网;快速扫描
基金项目:保定市科技计划资助项目(项目编号:10ZC007)
中图分类号:TP393.1 文献标识码:A
收录日期:2013年4月14日
一、引言
嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
近年来,得益于芯片技术的发展和应用的需要,以及人们对产品可靠性、成本和更新换代要求的提高,使得嵌入式系统,尤其是嵌入式多媒体系统逐渐从纯硬件实现和使用通用计算机实现的应用中脱颖而出,成为消费类电子产品领域令人关注的焦点。
嵌入式多媒体系统发展至今,已经成为功能丰富、性能强大的多媒体终端,其产品也丰富多样,如智能手机、高清网络播放机、网络电视机等。作为多媒体终端设备,这些产品的一个重要应用就是通过LAN共享播放本地网络中的多媒体音视频资源,要想实现这个目标,首要的任务是对LAN内的网络共享设备进行发现。目前的嵌入式多媒体系统在网络共享设备发现环节,还存在着较低的效率,无法达到最佳用户体验。以高清网络播放器为例,目前国内外有两大主流方案,分别是美国的Sigma方案和中国台湾的Realtek方案,这两种方案都基于mips架构的处理器,采用linux操作系统,支持使用Samba或NFS等方式共享播放本地网络中的多媒体音视频资源。但是目前两者都存在网络共享设备扫描效率低的问题,当用户想列出LAN共享资源时,播放器需要花费10秒以上甚至更长的时间去扫描整个网络,长时间的等待导致用户体验差。我们需要一个更高效的LAN快速扫描算法,能够在1~2秒内枚举LAN内的共享资源,尽可能地做到实时响应,以提高产品的用户体验。
二、算法原理
传统的LAN扫描算法,通常利用建立完整TCP连接的方式进行,TCP协议通过三个报文段完成连接的建立,这个过程称为三次握手。第一次握手:建立连接时,主机A发送SYN(SEQ=x)包到主机B,并进入SYN_SEND状态,等待主机B确认;第二次握手:主机B收到SYN包,必须确认主机A的SYN(ACK=x+1),同时自己也送一个SYN(SEQ=y)包,即SYN+ACK包,此时主机B进入SYN_RECV状态;第三次握手:主机A收到主机B的SYN+ACK包,向主机B发送确认包ACK(ACK=y+1),之后主机A和主机B进入连接状态,完成三次握手。建立TCP连接的过程是低效的,在这个过程中,大量的时间被浪费在等待应答上。LAN扫描实际上并不需要建立真正的TCP连接,扫描的意图在于得知网内哪些主机开放了指定的服务,并不是立即请求这些服务。因此,结合TCP协议的特点,本文使用半开TCP (SYN扫描)的方式实现LAN快速扫描。SYN扫描利用TCP协议连接的第一步,并没有建立一个完整的TCP连接,因此这种扫描方式是轻量并且高效的。SYN扫描算法的实现方式是向远端主机指定端口发送一个只有SYN标志位的TCP数据包,如果远端主机反馈一个SYN+ACK数据包,那么这个主机正在监听该端口;如果反馈的是RST数据包,说明主机没有监听该端口。
为了尽可能地做到实时响应,需要分析实际网络环境以便制定合理的SYN+ACK超时阈值。嵌入式多媒体系统所处的局域网环境被设计为必须满足高速数据传输的需求,因此其响应比和数据传输速率都很高。在这个前提下,可以将SYN+ACK超时阈值设定为一个相对较小的数值,例如0.8s,当主机A发送SYN包到主机B后,如果在阈值时间之内没有收到主机B的SYN+ACK数据包,则认为主机B没有监听指定端口。
另外,局域网内的待扫描主机数量庞大,串行扫描的低效率特征显然不能满足快速扫描的需要,因此必须采用并发扫描的方式,并且为每一个并发任务单独计算应答时间。通过将每一个并发任务的执行时间限定在阈值时间之内,就可以计算出整体扫描耗时,也即:
SMAX=T1+T2+T3 (1)
其中,T1是创建并发任务消耗的时间,T2是SYN+ACK超时阈值,T3是销毁并发任务消耗的时间。T1和T3取决于嵌入式多媒体系统的CPU速度和内存效率。
三、算法实现
SYN扫描属于OSI/RM模型中的传输层扫描方式,为此需要构造一个只有SYN标志位的TCP数据包。并发扫描策略采用多线程方式实现,每个线程负责LAN内一台主机的扫描,线程空间内部尽可能少的携带变量并且进行指令优化以实现线程的轻量化。为了实现线程间无关,每个线程采用自发自收的方式对特定主机进行扫描,当SYN包发出后,线程记录一个时间戳,如果在阈值时间之内没有收到对方主机的SYN+ACK数据包,则认为该主机没有监听指定端口,线程立即退出;如果在阈值时间之内收到了对方主机的SYN+ACK数据包,则该线程负责建立基于特定服务的共享连接,例如samba或NFS等。
主进程负责快速创建扫描线程,并等待线程执行结束,考虑到嵌入式多媒体系统在小概率的极端情况下可能会出现的系统资源不足情况会影响线程的创建效率,可以在主进程中设置全局超时阈值,当主进程的工作时间达到此阈值时,强制释放所有线程资源,放弃当次扫描,以提高极端情况下用户的操作体验和系统的健壮性。
四、个案研究
为了测试快速扫描算法的效率,我们以高清网络播放机为实验对象,基于LAN建立了一个实验环境,主要包括:百兆交换机、无线路由器、Realtek芯片方案的高清网络播放机、Sigma芯片方案的高清网络播放机、个人计算机、NAS网络存储器等。其中,高清网络播放机、个人计算机和NAS网络存储器通过双绞线或WIFI方式接入百兆交换机或无线路由器,构成LAN;个人计算机和NAS网络存储器提供NFS服务,并在111端口实施监听;高清网络播放机作为NFS和samba客户端,将测试快速扫描程序。
Realtek和Sigma两个方案的高清网络播放机都采用基于mips架构处理器的GNU/Linux操作系统,因此,快速扫描算法将用GNU C实现,并在Debian5下交叉编译为目标机程序。首先将SYN+ACK超时阈值设定为0.8s,然后进行100次LAN扫描测试,记录下每次扫描的耗时,并随机选取其中10次测试,结果如表1所示。(表1)
可以看到,所有的扫描任务都在1秒内完成了。也就是说,在超时阈值为0.8s时,该扫描算法能够在1秒内枚举LAN内的共享资源,并将结果返回给用户,用户无需长时间的等待,因而大大提高了用户操作体验。
五、结论
本文提出了一个基于嵌入式多媒体系统的LAN快速扫描算法。该扫描算法利用了TCP协议连接的第一步,并没有建立完整的TCP连接,因此这种扫描方式是轻量并且高效的。为了尽可能地做到实时响应,根据实际网络环境制定合理的SYN+ACK超时阈值,并采用并发扫描的方式提高扫描效率。实验结果表明,本文提出的基于嵌入式多媒体系统的LAN快速扫描算法是高效的。(作者单位:河北大学计算中心)
主要参考文献:
[1]KLAUSW F,RITTER H,The linux network architecture:Design and implementation of network protocols in the linux kernel.Beijing:Tsinghua University Press,2006.
[2]JIN H W,YOO C,Impact of protocol overheads on network throughput over high-speed interconnects:measurement,analysis,and improvement.Journal of Supercomputer,2007.
[3]OPPERMANN A,Optimizing the free BSD IP and TCP stack.http://people.freebsd.org/~andre/Optimizing the FreeBSD IP and TCP Stack.pdf. |
|
|
|