黃海利 ,王曉喃
(1.中國礦業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 徐州 221116;2.常熟理工學(xué)院 計(jì)算機(jī)科學(xué)與工程學(xué)院,江蘇 常熟 215500)
TCP/IP的體系結(jié)構(gòu)已經(jīng)被廣泛應(yīng)用,傳輸層是整個(gè)網(wǎng)絡(luò)體系結(jié)構(gòu)中的關(guān)鍵層.從通信和信息處理的角度看,傳輸層向上面的應(yīng)用層提供通信服務(wù),屬于面向通信部分的最高層,同時(shí)也是用戶功能中的最低層.傳輸層有兩種不同的傳輸協(xié)議,即面向連接的TCP(Transmission control protocol)和無連接的UDP(User da?tagram protocl).
由于兩種協(xié)議各有特點(diǎn)和優(yōu)勢,因此它們適用于不同壞境的應(yīng)用,從而面臨著在不同的網(wǎng)絡(luò)應(yīng)用中該如何正確選擇協(xié)議的問題.深入理解不同協(xié)議的優(yōu)缺點(diǎn)和性能指標(biāo)是應(yīng)用協(xié)議的前提,因此本文從傳輸延時(shí)、丟包率、吞吐量三個(gè)方面分別對(duì)TCP和UDP的性能進(jìn)行了分析,為如何應(yīng)用這兩種協(xié)議提供了參考依據(jù).
TCP是面向連接的傳輸層協(xié)議,即應(yīng)用程序在使用TCP協(xié)議之前,必須建立TCP連接,在數(shù)據(jù)傳送完畢后,必須釋放建立的連接,此過程也稱作三次握手(Three-way handshake).
TCP提供可靠交付的數(shù)據(jù)傳輸,通過TCP連接傳送的數(shù)據(jù)具有如下特點(diǎn):無差錯(cuò)、不丟失、不重復(fù)并且按序到達(dá).TCP使用分組編號(hào),在發(fā)送端對(duì)用戶數(shù)據(jù)進(jìn)行分片,在接收端進(jìn)行重組.接收端接收到數(shù)據(jù)后,都需發(fā)送確認(rèn)消息給發(fā)送方,通知其已經(jīng)成功收到數(shù)據(jù).
TCP采用滑動(dòng)窗口機(jī)制來控制發(fā)送方的發(fā)送速率,發(fā)送方和接收方都維持一個(gè)特定大小的窗口,窗口內(nèi)的數(shù)據(jù)允許發(fā)送.當(dāng)發(fā)送方接收到確認(rèn)幀后,它會(huì)向前移動(dòng)自己的發(fā)送窗口.接收方收到按序到達(dá)的數(shù)據(jù)后,也會(huì)向前移動(dòng)自己的窗口,從而達(dá)到兩個(gè)窗口相互作用控制發(fā)送速率的目的.
網(wǎng)絡(luò)的擁塞是不可避免的,如何防止數(shù)據(jù)擁塞至關(guān)重要,TCP采取如下措施來防止擁塞.在發(fā)送端發(fā)送數(shù)據(jù)之前,并不知道網(wǎng)絡(luò)的負(fù)荷情況,如果將大量的數(shù)據(jù)注入到網(wǎng)絡(luò),很有可能引起網(wǎng)絡(luò)擁塞.慢開始(slow-start)算法是由小到大逐漸增大(按照指數(shù)規(guī)律增長)擁塞窗口的數(shù)值,不斷監(jiān)測網(wǎng)絡(luò)擁塞情況.當(dāng)注入量不斷增大時(shí),必然會(huì)導(dǎo)致?lián)砣?此時(shí),采用擁塞避免機(jī)制解決這個(gè)問題.首先為擁塞窗口設(shè)置一個(gè)慢開始門限,當(dāng)擁塞窗口達(dá)到門限值時(shí)就改用擁塞避免(按照線性規(guī)律變化).當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),將慢開始門限值減半,啟動(dòng)慢開始算法.快重傳和快恢復(fù)算法在擁塞避免機(jī)制基礎(chǔ)上進(jìn)行了改進(jìn),只要連續(xù)接收到三個(gè)重復(fù)確認(rèn)幀就重傳接收端尚未收到的報(bào)文段,并把慢開始門限減半.這時(shí),發(fā)送方認(rèn)為網(wǎng)絡(luò)已經(jīng)擁塞,它會(huì)將擁塞窗口設(shè)置為慢開始門限減半后的值,開始執(zhí)行擁塞避免算法.
UDP為應(yīng)用程序提供了一種不必建立連接就可以發(fā)送IP數(shù)據(jù)報(bào)的方法.
UDP是無連接的,即在發(fā)送數(shù)據(jù)之前無需建立連接,因此減少了開銷和數(shù)據(jù)傳輸時(shí)延.UDP不保證可靠交付,因此發(fā)送端不需要維持復(fù)雜的連接狀態(tài)表.
UDP沒有擁塞控制,因此當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),發(fā)送端不會(huì)降低自己的發(fā)送速率.因此UDP適用于具有如下特點(diǎn)的應(yīng)用:1)要求發(fā)送端以恒定的速率發(fā)送數(shù)據(jù);2)允許在網(wǎng)絡(luò)發(fā)生擁塞時(shí)丟失一些數(shù)據(jù);3)不允許數(shù)據(jù)有太大的時(shí)延.這些應(yīng)用包括IP電話、實(shí)時(shí)視頻會(huì)議等.
圖1 仿真拓?fù)鋱D
仿真工具采用NS-2,仿真參數(shù)見圖1.源節(jié)點(diǎn)n0采用TCP傳輸cbr數(shù)據(jù),n1采用UDP傳輸cbr數(shù)據(jù).兩條數(shù)據(jù)流在相同配置的鏈路上傳輸,鏈路的帶寬是2 Mbs,鏈路延時(shí)是10 ms.兩條數(shù)據(jù)流由n2接收后再轉(zhuǎn)發(fā)給n3,節(jié)點(diǎn)n3采用sink代理接收數(shù)據(jù).n2和n3之間的鏈路帶寬為1.7 Mbps,延時(shí)為20 ms.上述的設(shè)置是為了產(chǎn)生瓶頸,出現(xiàn)丟包和排隊(duì)現(xiàn)象以便進(jìn)行性能分析.n2隊(duì)列大小為20,數(shù)據(jù)包長度為1000 bytes,cbr發(fā)送速率為1 Mbps.
圖2 TCP與UDP時(shí)延
如圖2所示,TCP協(xié)議下的路由延時(shí)比UDP協(xié)議下的延時(shí)高,主要原因是TCP采用可靠機(jī)制傳輸數(shù)據(jù).發(fā)送端在發(fā)送一個(gè)數(shù)據(jù)包后,必須等待確認(rèn)幀,如果沒有收到確認(rèn)幀,必須進(jìn)行重傳.因此,TCP的傳輸時(shí)間就包括了傳輸?shù)耐禃r(shí)間,從而增加了傳輸延時(shí).與TCP協(xié)議對(duì)比,UDP無反饋機(jī)制,不保證可靠傳輸,所以UDP發(fā)送數(shù)據(jù)的時(shí)間只包括從發(fā)送端到接收端的時(shí)間,從而它的傳輸延遲比TCP短.
由圖3可知,UDP的節(jié)點(diǎn)吞吐量高于TCP的吞吐量.TCP協(xié)議是可靠傳輸,采用滑動(dòng)窗口協(xié)議控制發(fā)送窗口的發(fā)送速率,即接收方和發(fā)送方都維持特定大小的窗口,只有當(dāng)發(fā)送方收到接收方的確認(rèn)幀后,才會(huì)增加自己的窗口.在網(wǎng)絡(luò)狀況擁塞時(shí),如果接收方?jīng)]有收到確認(rèn)幀,它就會(huì)減小發(fā)送窗口的大小,因此導(dǎo)致可以發(fā)送的數(shù)據(jù)量減小.當(dāng)仿真時(shí)間到1.0 s時(shí),UDP流和TCP流開始競爭帶寬,因此TCP會(huì)降低自己的發(fā)送速率,而無反饋流UDP仍然按照原來的發(fā)送速率發(fā)送.所以,TCP的發(fā)送量減少,而UDP沒有改變,從而導(dǎo)致UDP的吞吐量高于TCP.UCP吞吐量相比1.0 s之前會(huì)降低,是由于TCP數(shù)據(jù)流和UDP發(fā)生了競爭,產(chǎn)生了丟包.圖2也說明了TCP和UDP的相互作用會(huì)影響TCP數(shù)據(jù)流對(duì)帶寬的使用率.
從圖4可以看出,TCP的丟包率呈下降趨勢,這是由于TCP的滑動(dòng)窗口和確認(rèn)機(jī)制起了作用.TCP會(huì)定時(shí)檢測網(wǎng)絡(luò)擁塞情況,發(fā)現(xiàn)丟包后會(huì)降低自己的發(fā)送速率,從而也降低了丟包率.UDP不檢測網(wǎng)絡(luò)狀況,也不會(huì)減少發(fā)送速率,因此它的丟包率受TCP發(fā)送數(shù)據(jù)量的影響,從而導(dǎo)致此起彼伏的現(xiàn)象,即TCP流數(shù)據(jù)少,UDP丟包率就少,TCP數(shù)據(jù)流多,UDP丟包率就多.在這里,不能判定由于TCP是可靠傳輸,就斷定UDP的丟包率比TCP的丟包率要高,隊(duì)列大小和cbr參數(shù)都會(huì)對(duì)丟包率造成影響.
圖 5中,cbr從1 mb降低為 0.9 mb,從而得到UDP和TCP的丟包率.從圖5可以看出,丟包率明顯降低,這是因?yàn)閿?shù)據(jù)流的發(fā)送速率降低緩解了網(wǎng)絡(luò)的擁塞情況,從而給接收端提供了充裕的時(shí)間接收數(shù)據(jù).
圖6中,隊(duì)列大小從20改為25.同樣可以提取UDP和TCP的丟包率來比較.從圖6可以看出,丟包率降低,這是由于在網(wǎng)絡(luò)出現(xiàn)擁塞時(shí)隊(duì)列緩存空間的增大可以接收更多的數(shù)據(jù),因此降低了丟包率.
由仿真結(jié)果分析,TCP的可靠機(jī)制是用增加延時(shí)減少吞吐量作為代價(jià).不能判定由于TCP是可靠傳輸,就斷定UDP的丟包率比TCP的丟包率要高,怎樣降低丟包率是個(gè)值得思考的問題.增加隊(duì)列大小和降低發(fā)送速率雖然會(huì)降低丟包率,但是也會(huì)帶來其他負(fù)面影響,比如增加隊(duì)列大小會(huì)增加排隊(duì)延時(shí),降低發(fā)送速率會(huì)降低鏈路利用率等.
圖3 TCP與UCP吞吐量
圖4 TCP和UDP丟包率
圖5 不同發(fā)送速率的丟包圖
我們下一步的工作將從以下幾方面入手:
(1)怎樣在一定的網(wǎng)絡(luò)壞境下設(shè)定最優(yōu)值,使數(shù)據(jù)傳輸延時(shí)、丟包率、吞吐量都能達(dá)到最優(yōu)解.
(2)為UDP設(shè)置一個(gè)監(jiān)聽器,監(jiān)聽網(wǎng)絡(luò)擁塞情況,當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),以一定概率降低自己的發(fā)送速率.
(3)由于網(wǎng)絡(luò)層的分組丟棄策略對(duì)TCP擁塞控制影響較大,因此,通過改進(jìn)路由算法來提高TCP的性能.
圖6 不同隊(duì)列大小的丟包圖
[1]羅萬明,林闖,閻保平.TCP/IP擁塞控制研究[J]. 計(jì)算機(jī)學(xué)報(bào),2001,24(1):1-18.
[2]Postel J.Transmission Control Protocol[S].RFC 793.1981.
[3]Postel J.User Datagram Protocol[S].RFC 768,1980.
[4]Velten D.Reliable Data Protocol[S].RFC908,1984.
[5]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].5版.北京:電子工業(yè)出版社,2008.
[6]卡薩德.TCP/IP入門經(jīng)典[M].4版.井中月,譯.北京:人民郵電出版社,2009.
[7]柯志享,程榮祥,鄧德雋.NS2仿真實(shí)驗(yàn):多媒體和無線網(wǎng)絡(luò)通信[M].北京:電子工業(yè)出版社,2009.
[8]方路平,劉世華,陳盼,等.NS-2網(wǎng)絡(luò)模擬基礎(chǔ)與應(yīng)用[M].北京:國防工業(yè)出版社,2008.
[9]Andrew Tanenbaum S.Computer Network[M].Fourth Edition.London:Prentice Hall PTR,2004.
[10]劉俊,童學(xué)紅.TCP擁塞控制算法[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(7):2309-2313.