趙 勇,陳 亮,晁萍瑤
(西安工程大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,陜西 西安 710048)
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,對(duì)數(shù)據(jù)的安全性要求越來越高,于是出現(xiàn)了對(duì)數(shù)據(jù)進(jìn)行加解密的安全存儲(chǔ)系統(tǒng).此系統(tǒng)部署在應(yīng)用服務(wù)器(iSCSI啟動(dòng)器)與磁盤陣列(iSCSI目標(biāo)器)之間,通過對(duì)iSCSI報(bào)文中數(shù)據(jù)的加解密操作,實(shí)現(xiàn)在局域網(wǎng)存儲(chǔ)系統(tǒng)中數(shù)據(jù)的安全存儲(chǔ).在TCP/IP體系中,iSCSI屬于應(yīng)用層協(xié)議,其傳輸層采用的是TCP協(xié)議[1].網(wǎng)絡(luò)層提供的是一種不可靠的服務(wù),存在數(shù)據(jù)包的丟失、亂序、重傳等情況[2].安全存儲(chǔ)系統(tǒng)為了解析應(yīng)用層的iSCSI報(bào)文,首先必須對(duì)TCP流進(jìn)行還原,即將多個(gè)IP數(shù)據(jù)報(bào)重組為一條完整有序的TCP流[3].然而TCP流還原的速度是影響整個(gè)安全存儲(chǔ)系統(tǒng)性能的瓶頸.TCP流還原應(yīng)用廣泛,如入侵檢測系統(tǒng)、網(wǎng)絡(luò)流量分析系統(tǒng)等[4].梁勇[5]利用哈希算法解決了多連接TCP重組匹配問題,大大節(jié)約了系統(tǒng)資源,提高了系統(tǒng)的穩(wěn)定性.夏天一等[6]提出一種基于數(shù)據(jù)流特征的TCP重組技術(shù),從而提高了處理速度.但是他們并未對(duì)TCP協(xié)議的底層進(jìn)行研究,因此本文提出約去TCP狀態(tài)機(jī)中的CLOSING狀態(tài),并且對(duì)TCP定時(shí)器進(jìn)行改進(jìn),從而減少了系統(tǒng)資源被長時(shí)間占用的現(xiàn)象.然后采用Hash表對(duì)大量TCP流進(jìn)行管理,最后通過Splay樹算法對(duì)TCP分段進(jìn)行重組.通過對(duì)安全存儲(chǔ)系統(tǒng)流還原優(yōu)化前后的對(duì)比可知,數(shù)據(jù)讀寫速率得到明顯提高.
TCP是一種可靠傳輸服務(wù)的協(xié)議, 其實(shí)現(xiàn)代碼占內(nèi)核協(xié)議??偞a量的50%左右.以太網(wǎng)中基于TCP協(xié)議的數(shù)據(jù)量占整個(gè)網(wǎng)絡(luò)通信量的 90%[7].對(duì)TCP協(xié)議進(jìn)行約簡,可以減少內(nèi)核中協(xié)議棧的代碼量,減少內(nèi)存的開銷.TCP協(xié)議中的連接控制模塊(transmission control block,TCB)[8]包含了有關(guān)TCP連接的所有信息,如連接狀態(tài)、定時(shí)器、當(dāng)前平均往返時(shí)間的閾值等,可以為每個(gè)TCP連接提供報(bào)文的傳送、接收和重傳操作.當(dāng)某個(gè)控制塊被一個(gè)連接占用后,其他連接就無法使用該控制塊.因此,約簡的原則就是盡量減少TCP控制塊的占用時(shí)間,以及控制塊數(shù)據(jù)結(jié)構(gòu)中的字段信息,以此來提升內(nèi)存的利用率.下面就從TCP狀態(tài)機(jī)、定時(shí)器、算法3個(gè)方面闡述流還原的優(yōu)化策略.
圖 1 TCP正常連接建立和終止所對(duì)應(yīng)的狀態(tài)Fig.1 Corresponding state of TCP normal connection establishment and termination
TCP協(xié)議存在11種狀態(tài),每種狀態(tài)都代表TCP連接建立和斷開的詳細(xì)階段[9].其中客戶端獨(dú)有的狀態(tài):SYN-SENT、FIN-WAIT1、FIN-WAIT2、TIME-WAIT;服務(wù)端獨(dú)有的狀態(tài):LISTEN、SYN-RECD、CLOSE-WAIT、LAST-ACK;共有的狀態(tài):CLOSED、ESTABLISHED、TCP狀態(tài)機(jī)越復(fù)雜,計(jì)算機(jī)系統(tǒng)需要維護(hù)的資源開銷就越大[10],對(duì)系統(tǒng)存儲(chǔ)及運(yùn)算能力的要求就越高[11].因此,可以對(duì)狀態(tài)機(jī)進(jìn)行約簡.TCP連接以ESTABLISHED狀態(tài)為界,可分為建立連接和斷開連接兩個(gè)階段[12].正常的建立階段需要經(jīng)歷三次握手,斷開需要經(jīng)歷四次揮手,如圖1所示.
圖 2 非正常雙方同時(shí)主動(dòng)關(guān)閉狀態(tài)Fig.2 The state of active closure of non-normal parties at the same time
但是存在一種特殊情況,當(dāng)建立連接的雙方都同時(shí)主動(dòng)關(guān)閉連接的時(shí)候,會(huì)出現(xiàn)CLOSING狀態(tài)[13],如圖2所示.正常情況下,是客戶端發(fā)送FIN報(bào)文后,收到服務(wù)端ACK報(bào)文和FIN報(bào)文,最后客戶端響應(yīng)一個(gè)ACK報(bào)文,至此TCP連接斷開.但是CLOSING狀態(tài)表示客戶端發(fā)送FIN報(bào)文后,并沒有收到服務(wù)端的ACK報(bào)文,而是收到了服務(wù)端的FIN報(bào)文,此時(shí)雙方都處于CLOSING狀態(tài),都在等待對(duì)方回應(yīng)ACK報(bào)文.
CLOSING這種狀態(tài)屬于一種比較罕見的特殊狀態(tài)[14].此狀態(tài)下,如果始終沒有收到對(duì)方對(duì)自己FIN報(bào)文的ACK確認(rèn)報(bào)文,則重發(fā)FIN報(bào)文,直到收到ACK報(bào)文進(jìn)入TIME-WAIT狀態(tài)或者達(dá)到最大重傳上限.本文通過packetdirll構(gòu)造一系列的包序列,使得TCP進(jìn)入CLOSING狀態(tài),發(fā)現(xiàn)CLOSING狀態(tài)的套接字維持了2 min之久.其原因?yàn)?一端FIN報(bào)文發(fā)出去后,沒有收到ACK確認(rèn)包,因此會(huì)退避重發(fā),最終達(dá)到4次退避上限結(jié)束.在Linux協(xié)議棧的實(shí)現(xiàn)中,tcp-retransmit-skb由tcp-retransmit-timer調(diào)用,當(dāng)此過程中沒有重傳成功,還會(huì)發(fā)生退避,退避超時(shí)到期后,繼續(xù)在這里出錯(cuò),直到“不可容忍”銷毀套接字.無用的TCP狀態(tài)的存在使?fàn)顟B(tài)機(jī)的轉(zhuǎn)換關(guān)系變得復(fù)雜,增加了不穩(wěn)定因素,如果沒有大量工作對(duì)狀態(tài)轉(zhuǎn)換進(jìn)行檢測,很容易導(dǎo)致系統(tǒng)死鎖以及系統(tǒng)資源的無限期阻塞[15],這樣對(duì)于大流量的TCP流還原系統(tǒng)來說是不允許的,應(yīng)該盡量減少這種情況的出現(xiàn).
在局域網(wǎng)存儲(chǔ)系統(tǒng)中,iSCSI會(huì)話的建立與注銷都是由啟動(dòng)器主動(dòng)完成,類似的還有FTP.在這種情況下,TCP連接的建立與斷開只會(huì)是一方主動(dòng)進(jìn)行,并不會(huì)存在雙方主動(dòng)關(guān)閉的情況.因此,TCP流還原中的TCP狀態(tài)機(jī)可以去掉CLOSING狀態(tài),從而節(jié)省大部分的編程空間,減少了TCB塊中的信息,縮減了每個(gè)TCP連接的保持時(shí)間,從而提高了TCP流還原的效率.
TCP協(xié)議分別使用了重傳定時(shí)器、堅(jiān)持定時(shí)器、?;疃〞r(shí)器和時(shí)間等待定時(shí)器4種定時(shí)器來維持連接的狀態(tài).TCP在連接過程中使用保活定時(shí)器以避免在客戶端異常消失時(shí),服務(wù)器上留下半開放連接,而此時(shí)服務(wù)器卻又在等待來自客戶的數(shù)據(jù),這樣將使服務(wù)器永遠(yuǎn)等待下去.因此提出將?;疃〞r(shí)器的時(shí)間適當(dāng)?shù)乜s減,一般的?;疃〞r(shí)器的默認(rèn)時(shí)間為2 h[16],本文將保活定時(shí)器時(shí)間改為2 min.如果探測在2 min內(nèi)仍然沒有收到客戶端的反饋消息,那么可以認(rèn)為是連接異常斷開了[17].從而使系統(tǒng)釋放資源,減少了不必要的等待時(shí)間,降低了系統(tǒng)內(nèi)存被長時(shí)間占用的現(xiàn)象.
另外時(shí)間等待定時(shí)器是在連接終止階段使用的.一般,當(dāng)TCP連接關(guān)閉時(shí),并不認(rèn)為這個(gè)連接就真正關(guān)閉,在時(shí)間等待期間,連接還處于一種中間過渡狀態(tài).時(shí)間等待定時(shí)器的值通常設(shè)置為一個(gè)報(bào)文段壽命期望值的兩倍.然而,對(duì)于TCP流還原來說,時(shí)間等待定時(shí)器是可以刪去的,因?yàn)門CP流還原主要監(jiān)聽的是TCP連接建立階段的狀態(tài),并不需要檢測TCP連接斷開之后的狀態(tài).從而減少了控制塊中的字段信息,提高了內(nèi)存的利用率.
在安全存儲(chǔ)系統(tǒng)中,同一個(gè)時(shí)刻可能會(huì)有上萬條TCP連接,每一個(gè)連接又可能有上百個(gè)TCP分段,對(duì)于一個(gè)新到達(dá)的TCP分段,必須盡可能快速地找到對(duì)應(yīng)的TCP連接,并且快速地將一個(gè)TCP連接重新排序.由于Hash算法可以將數(shù)據(jù)存儲(chǔ)和查找消耗的時(shí)間大大降低,所以本文對(duì)于上萬條TCP連接采用Hash表進(jìn)行管理,不同的TCP連接通過五元組作為鍵值進(jìn)去區(qū)分,如圖3所示.
圖 3 Hash表管理多條流Fig.3 Hash table managing multi-flow
對(duì)于屬于同一個(gè)TCP連接的多個(gè)分段,借鑒了Snort入侵檢測系統(tǒng)中的分段管理方式,采用伸展樹(Splay tree)算法對(duì)其進(jìn)行重組.因?yàn)樯煺箻涞囊粋€(gè)節(jié)點(diǎn)被訪問時(shí),該節(jié)點(diǎn)經(jīng)過一系列的旋轉(zhuǎn)可以轉(zhuǎn)移到樹根,這樣可以讓計(jì)算機(jī)執(zhí)行比較少的訪問就可以到達(dá)目的節(jié)點(diǎn),當(dāng)再次訪問時(shí),只需比較一次就可以返回.Splay樹重組流程如圖4所示.
圖 4 Splay樹重組流程Fig.4 Flowchart of Splay tree reassemly
通過結(jié)合Hash表與Splay樹方式,減少了TCP流還原的時(shí)間復(fù)雜度以及降低了空間復(fù)雜度.
TCP流還原是安全存儲(chǔ)系統(tǒng)中的一個(gè)核心模塊.為了驗(yàn)證TCP流還原的性能,本文在其他條件不變的情況下,將安全存儲(chǔ)系統(tǒng)運(yùn)行在Tilera眾核網(wǎng)絡(luò)處理器上[18],對(duì)比TCP流還原改進(jìn)前后安全存儲(chǔ)系統(tǒng)的讀寫性能.測試過程中,分別檢測了不同大小的文件(1 k/1 M/128 M)在不同CPU數(shù)量下的讀寫性能,如圖5,6所示.
通過圖5和圖6可以看出要達(dá)到8 Gbit·s-1的吞吐量:約簡前1 k大小的文件需要36核,約簡后只需要20核;約簡前1 M大小的文件需要20核,約簡后只需要8核;約簡前128 M文件需要8核,而在約簡后只需2核即可.實(shí)驗(yàn)表明,改進(jìn)后的安全存儲(chǔ)系統(tǒng)的整體讀寫性能得到顯著提升.
本文在保證安全存儲(chǔ)系統(tǒng)讀寫性能的條件下,對(duì)文本、圖片、視頻等文件的完整性進(jìn)行驗(yàn)證.結(jié)果表明優(yōu)化后安全存儲(chǔ)系統(tǒng)保存的文件與之前相比MD5值沒有變化,文件完好無損.
圖 5 改進(jìn)前不同文件大小在不同CPU數(shù)量的讀寫吞吐量 圖 6 改進(jìn)后不同文件大小在不同CPU數(shù)量的讀寫吞吐量 Fig.5 The throughput of before improved different file sizes across diferent numbers of CPU Fig.6 The throughput of improved different file sizes across different numbers of CPU
針對(duì)安全存儲(chǔ)系統(tǒng)中TCP數(shù)據(jù)流量大、并發(fā)性較高的特點(diǎn),文從3個(gè)方面對(duì)TCP流還原的過程進(jìn)行改進(jìn):首先約簡了TCP狀態(tài)機(jī)中的CLOSING狀態(tài);其次改進(jìn)TCP定時(shí)器,縮減保活定時(shí)器的時(shí)間并且刪除了時(shí)間等待定時(shí)器;最后采用Hash表對(duì)大量的TCP流進(jìn)行管理并用Splay樹對(duì)屬于同一條流的TCP分段進(jìn)行排序,使得TCP流還原的效率得到了顯著提升.
參考文獻(xiàn)(References):
[1] 朱立谷,趙青梅,梁哲偉,等.iSCSI協(xié)議的研究[J].計(jì)算機(jī)工程與應(yīng)用,2002,38(15):43-45.
ZHU L G,ZHAO Q M,LIANG Z W,et al.Study of internet SCSI protocol[J].Computer Engineering and Applications,2002,38(15):43-45.
[2] 趙啟升,李存華.一種高效的TCP會(huì)話數(shù)據(jù)流重組算法及應(yīng)用[J].微電子學(xué)與計(jì)算機(jī),2010,27(7):129-132.
ZHAO Q S,LI C H.An efficient algorithm and application for restructuring TCP session data streams[J].Microelectronics & Computer,2010,27(7):129-132.
[3] 熊兵,陳曉蘇,陳寧.A real-time TCP stream reassembly mechanism in high-speed network[J].西南交通大學(xué)學(xué)報(bào),2009,17(3):185-191.
XIONG B,CHEN X S,CHEN N.A real-time TCP stream reassembly mechanism in high-speed network[J].Journal of Southwest Jiaotong University,2009,17(3):185-191.
[4] 鄧子寬,范明鈺,王光衛(wèi),等.Snort入侵檢測系統(tǒng)中TCP流重組的研究[J].信息安全與通信保密,2007(2):65-67.
DENG Z K,FAN M Y,WANG G W,et al.Reasearch on TCP reassembly in Snort IDS[J].Information Security and Communications Privacy,2007(2):65-67.
[5] 梁勇.網(wǎng)絡(luò)TCP數(shù)據(jù)流重組技術(shù)研究[J].信息通信,2012(6):35-36.
LIANG Y.Research on network TCP data flow reassembly technology[J].Information & Communications,2012(6):35-36
[6] 夏天一,劉嘉勇.基于數(shù)據(jù)流特征的TCP重組技術(shù)研究[J].信息安全與通信保密,2014(11):134-136.
XIA T Y,LIU J Y.TCP reassembling technology based on data flow characteristics[J].Information Security and Communications Privacy,2014(11):134-136.
[7] 帥春燕,江建慧,歐陽鑫.TCP有限狀態(tài)機(jī)和協(xié)議解析在偽警報(bào)去除中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2011,31(5):1271-1275.
SHUAI C Y,JIANG J H,OUYANG X.TCP finite state machine and protocol parse applied in removal of false alerts[J].Journal of Computer Applications,2011,31(5):1271-1275.
[8] 喬麗.嵌入式Internet中TCP狀態(tài)機(jī)的約簡[J].西南民族大學(xué)學(xué)報(bào),2011,37(6):991-994.
QIAO L.Reduction of TCP state machine in embedded internet[J].Journal of Southwest University for Nationalities,2011,37(6):991-994.
[9] 謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].5版.北京:電子工業(yè)出版社,2008:187.
XIE X R.Computer internet[M].5th ed.Beijing:Publishing House of Electronics Industry,2008:187.
[10] DOUGLAS E C,STEVENS D L.用TCP-IP進(jìn)行網(wǎng)際互聯(lián)第二卷:設(shè)計(jì)、實(shí)現(xiàn)與內(nèi)核[M].北京:電子工業(yè)出版社,2001:153.
DOUGLAS E C,STEVENS D L.Internetworking with TCP/IP Vol Ⅱ:Design,implementation,and internals[M].Beijing:Publishing House of Electronics Industry,2001:153.
[11] 馮翠麗,劉波濤.一種嵌入式TCP/IP協(xié)議棧的設(shè)計(jì)與實(shí)現(xiàn)[J].長江大學(xué)學(xué)報(bào)(自然科學(xué)版),2008,5(4):331-333.
FENG C L,LIU B T.Design and implementation of an embedded TCP/IP protocol stack[J].Journal of Yangtze University(Nat Sci Edit),2008,5(4):331-333.
[12] 馮翠麗,劉波濤.嵌入式TCP狀態(tài)機(jī)的簡化研究[J].西安郵電學(xué)院學(xué)報(bào),2012,17(1):58-61.
FENG C L,LIU B T.Embedded TCP state machines simplification research[J].Journal of Xi′an University of Posts and Telecommunications,2012,17(1):58-61.
[13] LAWRENCE B.TCP/IP詳解卷1:協(xié)議[M].北京:機(jī)械工業(yè)出版社,2000:191.
LAWRENCE B.TCP/IP Illustrated Volume 1:The protocols[M].Beijing:China Machine Press,2000:191.
[14] MORRISON K W,PURVES R S.Customizable landscape visualizations implementation application and testing of a web-based tool[J].Computer Environment & Urban Systems,2002,26(2/3):163-183.
[15] LIN C M,CHEN T F. Dynamic memory management for real-time embedded Java chips[J]. IEEE Network,2000,34:49-56.
[16] KOPETZKY T. Visual preview for link traversal on the World Wide Web[J].Computer Networks,1999,31(11/16):1525-1532.
[17] 林濤,王濟(jì)勇,韓光潔,等.EI內(nèi)核中TCP狀態(tài)機(jī)約簡的研究[J].計(jì)算機(jī)科學(xué),2004,31(1):31-34.
LIN T,WANG J Y,HAN G J,et al.Reasearch on TCP state machine reduction in embedded internet kernel[J].Computer Science,200431(1):31-34.
[18] 王建.眾核網(wǎng)絡(luò)處理器下高速包轉(zhuǎn)發(fā)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2016,33(12):102-105.
WANG J.Design and implementation of high-speed forwarding system on multi-core network processor[J].Computer Applications and Software,2016,33(12):102-105