□文/齊耀龍
(河北大學(xué)計(jì)算中心 河北·保定)
嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
近年來(lái),得益于芯片技術(shù)的發(fā)展和應(yīng)用的需要,以及人們對(duì)產(chǎn)品可靠性、成本和更新?lián)Q代要求的提高,使得嵌入式系統(tǒng),尤其是嵌入式多媒體系統(tǒng)逐漸從純硬件實(shí)現(xiàn)和使用通用計(jì)算機(jī)實(shí)現(xiàn)的應(yīng)用中脫穎而出,成為消費(fèi)類電子產(chǎn)品領(lǐng)域令人關(guān)注的焦點(diǎn)。
嵌入式多媒體系統(tǒng)發(fā)展至今,已經(jīng)成為功能豐富、性能強(qiáng)大的多媒體終端,其產(chǎn)品也豐富多樣,如智能手機(jī)、高清網(wǎng)絡(luò)播放機(jī)、網(wǎng)絡(luò)電視機(jī)等。作為多媒體終端設(shè)備,這些產(chǎn)品的一個(gè)重要應(yīng)用就是通過(guò)LAN共享播放本地網(wǎng)絡(luò)中的多媒體音視頻資源,要想實(shí)現(xiàn)這個(gè)目標(biāo),首要的任務(wù)是對(duì)LAN內(nèi)的網(wǎng)絡(luò)共享設(shè)備進(jìn)行發(fā)現(xiàn)。目前的嵌入式多媒體系統(tǒng)在網(wǎng)絡(luò)共享設(shè)備發(fā)現(xiàn)環(huán)節(jié),還存在著較低的效率,無(wú)法達(dá)到最佳用戶體驗(yàn)。以高清網(wǎng)絡(luò)播放器為例,目前國(guó)內(nèi)外有兩大主流方案,分別是美國(guó)的Sigma方案和中國(guó)臺(tái)灣的Realtek方案,這兩種方案都基于mips架構(gòu)的處理器,采用linux操作系統(tǒng),支持使用Samba或NFS等方式共享播放本地網(wǎng)絡(luò)中的多媒體音視頻資源。但是目前兩者都存在網(wǎng)絡(luò)共享設(shè)備掃描效率低的問(wèn)題,當(dāng)用戶想列出LAN共享資源時(shí),播放器需要花費(fèi)10秒以上甚至更長(zhǎng)的時(shí)間去掃描整個(gè)網(wǎng)絡(luò),長(zhǎng)時(shí)間的等待導(dǎo)致用戶體驗(yàn)差。我們需要一個(gè)更高效的LAN快速掃描算法,能夠在1~2秒內(nèi)枚舉LAN內(nèi)的共享資源,盡可能地做到實(shí)時(shí)響應(yīng),以提高產(chǎn)品的用戶體驗(yàn)。
傳統(tǒng)的LAN掃描算法,通常利用建立完整TCP連接的方式進(jìn)行,TCP協(xié)議通過(guò)三個(gè)報(bào)文段完成連接的建立,這個(gè)過(guò)程稱為三次握手。第一次握手:建立連接時(shí),主機(jī)A發(fā)送SYN(SEQ=x)包到主機(jī)B,并進(jìn)入SYN_SEND狀態(tài),等待主機(jī)B確認(rèn);第二次握手:主機(jī)B收到SYN包,必須確認(rèn)主機(jī)A的SYN(ACK=x+1),同時(shí)自己也送一個(gè)SYN(SEQ=y)包,即SYN+ACK包,此時(shí)主機(jī)B進(jìn)入SYN_RECV狀態(tài);第三次握手:主機(jī)A收到主機(jī)B的SYN+ACK包,向主機(jī)B發(fā)送確認(rèn)包ACK(ACK=y+1),之后主機(jī)A和主機(jī)B進(jìn)入連接狀態(tài),完成三次握手。建立TCP連接的過(guò)程是低效的,在這個(gè)過(guò)程中,大量的時(shí)間被浪費(fèi)在等待應(yīng)答上。LAN掃描實(shí)際上并不需要建立真正的TCP連接,掃描的意圖在于得知網(wǎng)內(nèi)哪些主機(jī)開(kāi)放了指定的服務(wù),并不是立即請(qǐng)求這些服務(wù)。因此,結(jié)合TCP協(xié)議的特點(diǎn),本文使用半開(kāi)TCP(SYN掃描)的方式實(shí)現(xiàn)LAN快速掃描。SYN掃描利用TCP協(xié)議連接的第一步,并沒(méi)有建立一個(gè)完整的TCP連接,因此這種掃描方式是輕量并且高效的。SYN掃描算法的實(shí)現(xiàn)方式是向遠(yuǎn)端主機(jī)指定端口發(fā)送一個(gè)只有SYN標(biāo)志位的TCP數(shù)據(jù)包,如果遠(yuǎn)端主機(jī)反饋一個(gè)SYN+ACK數(shù)據(jù)包,那么這個(gè)主機(jī)正在監(jiān)聽(tīng)該端口;如果反饋的是RST數(shù)據(jù)包,說(shuō)明主機(jī)沒(méi)有監(jiān)聽(tīng)該端口。
為了盡可能地做到實(shí)時(shí)響應(yīng),需要分析實(shí)際網(wǎng)絡(luò)環(huán)境以便制定合理的SYN+ACK超時(shí)閾值。嵌入式多媒體系統(tǒng)所處的局域網(wǎng)環(huán)境被設(shè)計(jì)為必須滿足高速數(shù)據(jù)傳輸?shù)男枨?,因此其響?yīng)比和數(shù)據(jù)傳輸速率都很高。在這個(gè)前提下,可以將SYN+ACK超時(shí)閾值設(shè)定為一個(gè)相對(duì)較小的數(shù)值,例如0.8s,當(dāng)主機(jī)A發(fā)送SYN包到主機(jī)B后,如果在閾值時(shí)間之內(nèi)沒(méi)有收到主機(jī)B的SYN+ACK數(shù)據(jù)包,則認(rèn)為主機(jī)B沒(méi)有監(jiān)聽(tīng)指定端口。
另外,局域網(wǎng)內(nèi)的待掃描主機(jī)數(shù)量龐大,串行掃描的低效率特征顯然不能滿足快速掃描的需要,因此必須采用并發(fā)掃描的方式,并且為每一個(gè)并發(fā)任務(wù)單獨(dú)計(jì)算應(yīng)答時(shí)間。通過(guò)將每一個(gè)并發(fā)任務(wù)的執(zhí)行時(shí)間限定在閾值時(shí)間之內(nèi),就可以計(jì)算出整體掃描耗時(shí),也即:
其中,T1是創(chuàng)建并發(fā)任務(wù)消耗的時(shí)間,T2是SYN+ACK超時(shí)閾值,T3是銷毀并發(fā)任務(wù)消耗的時(shí)間。T1和T3取決于嵌入式多媒體系統(tǒng)的CPU速度和內(nèi)存效率。
SYN掃描屬于OSI/RM模型中的傳輸層掃描方式,為此需要構(gòu)造一個(gè)只有SYN標(biāo)志位的TCP數(shù)據(jù)包。并發(fā)掃描策略采用多線程方式實(shí)現(xiàn),每個(gè)線程負(fù)責(zé)LAN內(nèi)一臺(tái)主機(jī)的掃描,線程空間內(nèi)部盡可能少的攜帶變量并且進(jìn)行指令優(yōu)化以實(shí)現(xiàn)線程的輕量化。為了實(shí)現(xiàn)線程間無(wú)關(guān),每個(gè)線程采用自發(fā)自收的方式對(duì)特定主機(jī)進(jìn)行掃描,當(dāng)SYN包發(fā)出后,線程記錄一個(gè)時(shí)間戳,如果在閾值時(shí)間之內(nèi)沒(méi)有收到對(duì)方主機(jī)的SYN+ACK數(shù)據(jù)包,則認(rèn)為該主機(jī)沒(méi)有監(jiān)聽(tīng)指定端口,線程立即退出;如果在閾值時(shí)間之內(nèi)收到了對(duì)方主機(jī)的SYN+ACK數(shù)據(jù)包,則該線程負(fù)責(zé)建立基于特定服務(wù)的共享連接,例如samba或NFS等。
主進(jìn)程負(fù)責(zé)快速創(chuàng)建掃描線程,并等待線程執(zhí)行結(jié)束,考慮到嵌入式多媒體系統(tǒng)在小概率的極端情況下可能會(huì)出現(xiàn)的系統(tǒng)資源不足情況會(huì)影響線程的創(chuàng)建效率,可以在主進(jìn)程中設(shè)置全局超時(shí)閾值,當(dāng)主進(jìn)程的工作時(shí)間達(dá)到此閾值時(shí),強(qiáng)制釋放所有線程資源,放棄當(dāng)次掃描,以提高極端情況下用戶的操作體驗(yàn)和系統(tǒng)的健壯性。
為了測(cè)試快速掃描算法的效率,我們以高清網(wǎng)絡(luò)播放機(jī)為實(shí)驗(yàn)對(duì)象,基于LAN建立了一個(gè)實(shí)驗(yàn)環(huán)境,主要包括:百兆交換機(jī)、無(wú)線路由器、Realtek芯片方案的高清網(wǎng)絡(luò)播放機(jī)、Sigma芯片方案的高清網(wǎng)絡(luò)播放機(jī)、個(gè)人計(jì)算機(jī)、NAS網(wǎng)絡(luò)存儲(chǔ)器等。其中,高清網(wǎng)絡(luò)播放機(jī)、個(gè)人計(jì)算機(jī)和NAS網(wǎng)絡(luò)存儲(chǔ)器通過(guò)雙絞線或WIFI方式接入百兆交換機(jī)或無(wú)線路由器,構(gòu)成LAN;個(gè)人計(jì)算機(jī)和NAS網(wǎng)絡(luò)存儲(chǔ)器提供NFS服務(wù),并在111端口實(shí)施監(jiān)聽(tīng);高清網(wǎng)絡(luò)播放機(jī)作為NFS和samba客戶端,將測(cè)試快速掃描程序。
Realtek和Sigma兩個(gè)方案的高清網(wǎng)絡(luò)播放機(jī)都采用基于mips架構(gòu)處理器的GNU/Linux操作系統(tǒng),因此,快速掃描算法將用GNU C實(shí)現(xiàn),并在Debian5下交叉編譯為目標(biāo)機(jī)程序。首先將SYN+ACK超時(shí)閾值設(shè)定為0.8s,然后進(jìn)行100次LAN掃描測(cè)試,記錄下每次掃描的耗時(shí),并隨機(jī)選取其中10次測(cè)試,結(jié)果如表1所示。(表1)
表1 快速掃描算法測(cè)試結(jié)果
可以看到,所有的掃描任務(wù)都在1秒內(nèi)完成了。也就是說(shuō),在超時(shí)閾值為0.8s時(shí),該掃描算法能夠在1秒內(nèi)枚舉LAN內(nèi)的共享資源,并將結(jié)果返回給用戶,用戶無(wú)需長(zhǎng)時(shí)間的等待,因而大大提高了用戶操作體驗(yàn)。
本文提出了一個(gè)基于嵌入式多媒體系統(tǒng)的LAN快速掃描算法。該掃描算法利用了TCP協(xié)議連接的第一步,并沒(méi)有建立完整的TCP連接,因此這種掃描方式是輕量并且高效的。為了盡可能地做到實(shí)時(shí)響應(yīng),根據(jù)實(shí)際網(wǎng)絡(luò)環(huán)境制定合理的SYN+ACK超時(shí)閾值,并采用并發(fā)掃描的方式提高掃描效率。實(shí)驗(yàn)結(jié)果表明,本文提出的基于嵌入式多媒體系統(tǒng)的LAN快速掃描算法是高效的。
[1]KLAUSW F,RITTER H,The l inux network architecture:Design and implementation of network protocols in the l inux kernel.Bei jing: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 f ree BSD IP and TCP stack.http://people.f reebsd.org/~andre/Optimizing the FreeBSD IP and TCP Stack.pdf.