基于Nagle算法的嵌入式TCP協(xié)議
Nagle 算法的描述
在一個(gè)連接上已經(jīng)傳輸?shù)臄?shù)據(jù)還沒有被確認(rèn)的情況下,發(fā)送方的應(yīng)用程序又生成了后續(xù)數(shù)據(jù),并照常將數(shù)據(jù)送到輸出緩沖區(qū)中,但這時(shí)并不發(fā)送后續(xù)報(bào)文段,而是等到有足夠的數(shù)據(jù)填滿一個(gè)達(dá)到最大長度的報(bào)文段之后再把緩沖區(qū)中的數(shù)據(jù)發(fā)送出去。
如果某個(gè)應(yīng)用程序每次僅產(chǎn)生一個(gè)八位組的數(shù)據(jù), TCP 會立即發(fā)送最初的那個(gè)八位組,但是在確認(rèn)到達(dá)之前, TCP 會把后續(xù)數(shù)據(jù)存入緩沖區(qū)中。因此當(dāng)應(yīng)用程序生成數(shù)據(jù)的速率比網(wǎng)絡(luò)的速率快很多時(shí)(如傳送文件) ,后續(xù)的報(bào)文段將包含大量的數(shù)據(jù),而當(dāng)應(yīng)用程序比網(wǎng)絡(luò)速度更慢時(shí)(如用戶敲鍵盤) ,就會發(fā)送較短的報(bào)文段而不必經(jīng)過長的延時(shí)。
Nagle 算法在嵌入式環(huán)境的適用性
在嵌入式系統(tǒng)的環(huán)境中,嵌入式TCP 協(xié)議會面臨著各種情況,比如一兩個(gè)開關(guān)量的傳輸,或者是傳感器數(shù)據(jù)實(shí)時(shí)的傳輸,而Nagle 算法能夠自動適應(yīng)網(wǎng)絡(luò)速率和應(yīng)用層數(shù)據(jù)流量的各種情況,因?yàn)樗且源_認(rèn)來觸發(fā)的自計(jì)時(shí)的協(xié)議。
網(wǎng)絡(luò)模擬
NS-2 是一個(gè)應(yīng)用于網(wǎng)絡(luò)研究的離散事件模擬器,它充分支持有線與無線網(wǎng)絡(luò)上對于TCP、路由和多播協(xié)議的模擬。它自問世以來受到學(xué)術(shù)界的充分信賴,成為設(shè)計(jì)和檢驗(yàn)新的協(xié)議和算法的權(quán)威網(wǎng)絡(luò)模擬測試平臺。
網(wǎng)絡(luò)模擬環(huán)境的構(gòu)建
圖3 是本文構(gòu)建的網(wǎng)絡(luò)模擬環(huán)境:節(jié)點(diǎn)0 使用本文提出的嵌入式TCP 協(xié)議發(fā)送數(shù)據(jù),節(jié)點(diǎn)1 使用用戶投文協(xié)議(UDP) 組播協(xié)議來發(fā)送大量的數(shù)據(jù),用于測試嵌入式TCP 協(xié)議在網(wǎng)絡(luò)阻塞情況下的性能,節(jié)點(diǎn)2 和節(jié)點(diǎn)3 之間是瓶頸路徑,模擬交換機(jī)之間的線路情況。
嵌入式TCP 協(xié)議的性能指標(biāo)有吞吐量(throughp ut) ,即單位時(shí)間內(nèi)TCP 源節(jié)點(diǎn)發(fā)送的字節(jié)數(shù);延時(shí),即源節(jié)點(diǎn)的應(yīng)用層發(fā)出數(shù)據(jù)到目的節(jié)點(diǎn)應(yīng)用層接收到數(shù)據(jù)的時(shí)間量。
基于Nagle 的簡化TCP 協(xié)議的吞吐率
作為一個(gè)簡單確認(rèn)的TCP 協(xié)議,因?yàn)榇翱谑冀K是1 ,所以吞吐率( t hroughp ut ) 是恒定的,由于采用Nagle 算法,不再有大量小數(shù)據(jù)包產(chǎn)生,提高了吞吐率,提高的倍數(shù)約等于Internet 數(shù)據(jù)包最大值除以應(yīng)用層產(chǎn)生數(shù)據(jù)包大小。比如應(yīng)用層產(chǎn)生的數(shù)據(jù)包是10 byte ,那么吞吐率就提高了1000/ 10 = 100 倍。
如圖4 所示,接收到的數(shù)據(jù)是隨著時(shí)間線性增長的,也就是說吞吐率是恒定的。最高的曲線是采用Nagle 算法的簡化TCP 協(xié)議的吞吐率;最低的曲線是未采用Nagle 算法的簡化TCP 協(xié)議在同樣環(huán)境下的吞吐率;中間曲線為未經(jīng)過簡化的標(biāo)準(zhǔn)TCP 協(xié)議,因此可以從圖中看出,采用Nagle 算法明顯優(yōu)于其他兩種情況,并且大大改善了簡化TCP 的吞吐率。
基于Nagle 的簡化TCP 協(xié)議的響應(yīng)時(shí)間
再看看延時(shí)的問題,Nagle 算法會立即傳送最初的數(shù)據(jù),然后再以大吞吐量發(fā)送余下的數(shù)據(jù)。這就導(dǎo)致,第一,吞吐率大大增加,使得傳送數(shù)據(jù)更快;第二,產(chǎn)生的數(shù)據(jù)包數(shù)量減少,使得發(fā)生擁塞重傳的機(jī)會也減少。圖5 和6 中分別是標(biāo)準(zhǔn)TCP 協(xié)議的延時(shí)抖動(jit ter) 和采用Nagle 算法的TCP 協(xié)議的延時(shí)抖動。
圖6 曲線在開始的尖峰說明了在數(shù)據(jù)連接的開始Nagle 算法會立即發(fā)送接收到的小數(shù)據(jù)包,而接下來是將接收的大量的數(shù)據(jù)打成大包發(fā)送。圖6曲線的平滑情況說明了延時(shí)抖動很小,適合嵌入式系統(tǒng)中實(shí)時(shí)數(shù)據(jù)的傳輸。在同樣的模擬參數(shù)下,標(biāo)準(zhǔn)TCP 協(xié)議發(fā)送了大量的數(shù)據(jù)包(120 個(gè)) ,而采用Nagle 算法的簡化的TCP 協(xié)議發(fā)送了不到20 個(gè)數(shù)據(jù)包。顯而易見,采用Nagle 算法的簡化TCP 協(xié)議在吞吐率高的同時(shí)還節(jié)省了網(wǎng)絡(luò)的帶寬。
評論