□文/齊耀龍
(河北大學計算中心 河北·保定)
嵌入式系統是以應用為中心、以計算機技術為基礎、軟件硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
近年來,得益于芯片技術的發展和應用的需要,以及人們對產品可靠性、成本和更新換代要求的提高,使得嵌入式系統,尤其是嵌入式多媒體系統逐漸從純硬件實現和使用通用計算機實現的應用中脫穎而出,成為消費類電子產品領域令人關注的焦點。
嵌入式多媒體系統發展至今,已經成為功能豐富、性能強大的多媒體終端,其產品也豐富多樣,如智能手機、高清網絡播放機、網絡電視機等。作為多媒體終端設備,這些產品的一個重要應用就是通過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沒有監聽指定端口。
另外,局域網內的待掃描主機數量龐大,串行掃描的低效率特征顯然不能滿足快速掃描的需要,因此必須采用并發掃描的方式,并且為每一個并發任務單獨計算應答時間。通過將每一個并發任務的執行時間限定在閾值時間之內,就可以計算出整體掃描耗時,也即:

其中,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 快速掃描算法測試結果
可以看到,所有的掃描任務都在1秒內完成了。也就是說,在超時閾值為0.8s時,該掃描算法能夠在1秒內枚舉LAN內的共享資源,并將結果返回給用戶,用戶無需長時間的等待,因而大大提高了用戶操作體驗。
本文提出了一個基于嵌入式多媒體系統的LAN快速掃描算法。該掃描算法利用了TCP協議連接的第一步,并沒有建立完整的TCP連接,因此這種掃描方式是輕量并且高效的。為了盡可能地做到實時響應,根據實際網絡環境制定合理的SYN+ACK超時閾值,并采用并發掃描的方式提高掃描效率。實驗結果表明,本文提出的基于嵌入式多媒體系統的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.