新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何基于Nagle算法設(shè)計(jì)嵌入式TCP協(xié)議?

如何基于Nagle算法設(shè)計(jì)嵌入式TCP協(xié)議?

作者: 時(shí)間:2018-07-31 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://www.butianyuan.cn/article/201807/384684.htm


嵌入式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 算法會(huì)立即傳送最初的數(shù)據(jù),然后再以大吞吐量發(fā)送余下的數(shù)據(jù)。這就導(dǎo)致,第一,吞吐率大大增加,使得傳送數(shù)據(jù)更快;第二,產(chǎn)生的數(shù)據(jù)包數(shù)量減少,使得發(fā)生擁塞重傳的機(jī)會(huì)也減少。圖5 和6 中分別是標(biāo)準(zhǔn)TCP 協(xié)議的延時(shí)抖動(dòng)(jit ter) 和采用Nagle 算法的TCP 協(xié)議的延時(shí)抖動(dòng)。

圖6 曲線在開始的尖峰說明了在數(shù)據(jù)連接的開始Nagle 算法會(huì)立即發(fā)送接收到的小數(shù)據(jù)包,而接下來是將接收的大量的數(shù)據(jù)打成大包發(fā)送。圖6曲線的平滑情況說明了延時(shí)抖動(dòng)很小,適合嵌入式系統(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ò)的帶寬。



對(duì)該協(xié)議實(shí)用性的分析

網(wǎng)絡(luò)協(xié)議的實(shí)用性體現(xiàn)為,在惡劣的網(wǎng)絡(luò)環(huán)境(如數(shù)據(jù)丟失) 下,可以保持連接而且能夠恢復(fù)數(shù)據(jù)的傳輸。

前面已經(jīng)分析到,由于大大降低了網(wǎng)絡(luò)上小數(shù)據(jù)包的數(shù)量,降低了網(wǎng)絡(luò)帶寬的需求,使得基于Nagle 算法的TCP 協(xié)議比普通TCP 協(xié)議出現(xiàn)阻塞的可能性大大降低。

如果一旦網(wǎng)絡(luò)出現(xiàn)阻塞,會(huì)出現(xiàn)數(shù)據(jù)包的丟失。TCP 的數(shù)據(jù)發(fā)送方會(huì)接收到3 個(gè)重復(fù)的確認(rèn)(ACK) 信號(hào),基于Nagle 算法的簡化TCP ,同樣執(zhí)行標(biāo)準(zhǔn)的重發(fā)數(shù)據(jù)的工作,重新發(fā)送丟失的數(shù)據(jù)包。由于發(fā)送窗口始終是1 ,則不存在“快速恢復(fù)”問題。

對(duì)該協(xié)議模擬的結(jié)果如圖7 所示:圖中橫坐標(biāo)是模擬時(shí)間,縱坐標(biāo)是數(shù)據(jù)包的序列號(hào)。上面兩條曲線是Tahoe TCP 的數(shù)據(jù)和確認(rèn),而下面兩條曲線是基于Nagle 的TCP 的數(shù)據(jù)和確認(rèn)。 圖中Tahoe TCP在慢啟動(dòng)后的某個(gè)時(shí)刻,接收方收到了3 個(gè)相同的ACK確認(rèn)包,表示網(wǎng)絡(luò)出現(xiàn)了阻塞,而且傳送相同的數(shù)據(jù)Tahoe TCP 的帶寬占用比基于Nagle 的簡化TCP 大多了。而基于Nagle 的簡化TCP 卻并未阻塞。

由以上分析可見, 基于Nagle 算法的簡化的TCP 在數(shù)據(jù)傳輸方面是可靠的??梢詮V泛的在嵌入式TCP 中使用,并且與其他TCP 算法能夠完全兼容,而且能夠大幅度提高網(wǎng)絡(luò)性能,減少網(wǎng)絡(luò)阻塞,特別是在應(yīng)用層數(shù)據(jù)量比較小但數(shù)據(jù)包數(shù)量卻很多的情況下能夠大大改善數(shù)據(jù)的吞吐率和網(wǎng)絡(luò)占用率,是一種非常實(shí)用的算法。WindowsTM也在其Telnet 程序中使用了Nagle 算法。


基于Nagle 算法的TCP 協(xié)議由于算法簡單,性能優(yōu)秀,能夠勝任廣大的嵌入式Internet 的應(yīng)用領(lǐng)域包括:工業(yè)控制、智能家居、智能監(jiān)控、自動(dòng)抄表,等等。該協(xié)議能夠應(yīng)用于實(shí)時(shí)性要求比較高的場合,但是如果實(shí)時(shí)性要求特別高而網(wǎng)絡(luò)帶寬富裕時(shí)則建議不采用Nagle 算法。

結(jié) 語

本文提出的基于Nagle 算法的簡化TCP 協(xié)議,大大減輕了微處理器的運(yùn)算負(fù)擔(dān)和系統(tǒng)的存儲(chǔ)空間,使得TCP 協(xié)議得以在普通8/ 16 位處理器上實(shí)采用了Nagle 算法,在不增加多少代碼的情況下,提高了協(xié)議的吞吐率、降低了協(xié)議的帶寬占用,在嵌入式應(yīng)用中其吞吐率甚至高于未簡化的標(biāo)準(zhǔn)TCP 協(xié)議。它的延時(shí)抖動(dòng)基本是恒定的,非常適合嵌入式系統(tǒng)中的實(shí)時(shí)數(shù)據(jù)的傳輸。它發(fā)送少量的大數(shù)據(jù)包而不是大量的小數(shù)據(jù)包,從而節(jié)省了網(wǎng)絡(luò)帶寬。基于本文算法的自動(dòng)抄表方案已經(jīng)在浙大校園網(wǎng)、杭州網(wǎng)通、寧波網(wǎng)通、上海有線通等寬帶網(wǎng)絡(luò)下進(jìn)行了現(xiàn)場測試,測試結(jié)果符合設(shè)計(jì)要求。

該方案已經(jīng)被國內(nèi)多家電表生產(chǎn)企業(yè)所采納,并應(yīng)用于新型網(wǎng)絡(luò)電能表的生產(chǎn)上,這種網(wǎng)絡(luò)電能表可以方便地實(shí)現(xiàn)網(wǎng)絡(luò)化自動(dòng)集抄系統(tǒng),這些系統(tǒng)已經(jīng)應(yīng)用在上海、杭州、寧波等地的電力部門中。同時(shí),基于本文方案的新型電能表以及其技術(shù)文件已經(jīng)向全國電工儀器儀表標(biāo)準(zhǔn)化技術(shù)委員會(huì)進(jìn)行了推薦和報(bào)批。


上一頁 1 2 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉