Nagle算法要求一條TCP連接上最多只有一個(gè)未被確認(rèn)的報(bào)文,發(fā)送方發(fā)送一個(gè)TCP報(bào)文,接收方確認(rèn)該報(bào)文,發(fā)送方再發(fā)送下一個(gè)報(bào)文,若發(fā)送方在一定時(shí)間內(nèi)未收到確認(rèn),則再重發(fā)報(bào)文。相對(duì)來(lái)說Nagle算法相對(duì)簡(jiǎn)單且不容易出錯(cuò),但卻降低了網(wǎng)絡(luò)的吞吐量,也增加了網(wǎng)絡(luò)流量。
在實(shí)際的TCP實(shí)現(xiàn)中,接收方往往一次確認(rèn)一批的TCP報(bào)文,且確認(rèn)報(bào)文與接收方發(fā)往發(fā)送方的報(bào)文一同回復(fù),以減少網(wǎng)絡(luò)流量,從另一方面說也就允許發(fā)送方在前一報(bào)文未確認(rèn)時(shí),可以繼續(xù)發(fā)送下一個(gè)報(bào)文,雖然這種實(shí)現(xiàn)提高了吞吐量,但卻帶來(lái)了另一個(gè)問題,即發(fā)送文如何確認(rèn)報(bào)文被接收方正確接收?
TCP有兩種方式來(lái)保證報(bào)文被正確接收:
1:發(fā)送端在一定時(shí)期內(nèi)未收到報(bào)文確認(rèn),報(bào)文重發(fā)
2:接收端檢測(cè)到某一報(bào)文丟失,重復(fù)發(fā)送ACK報(bào)文(3個(gè)以上),以促使發(fā)送端重發(fā)丟失報(bào)文。這就是快速重傳機(jī)制。

通常,發(fā)送端會(huì)重傳接收方未收到的報(bào)文,但不會(huì)重傳已經(jīng)被接收方收到但并未確認(rèn)的包,然后接收方將收到的報(bào)文排序后進(jìn)行一并確認(rèn),
如上圖,由于某種原因,發(fā)送端發(fā)給接收端的數(shù)據(jù)包序號(hào)1025,丟失了序號(hào)為1的包(250839)
此時(shí)接收端對(duì)序號(hào)1進(jìn)行了確認(rèn),發(fā)送端重發(fā)了序號(hào)1,此時(shí)接收端已經(jīng)有了2484個(gè)字節(jié),序號(hào)1中有1024個(gè)字節(jié),序號(hào)1025中的1460個(gè)字節(jié),接收端這時(shí)回復(fù)一個(gè)確認(rèn)2485的AC包。
新聞熱點(diǎn)
疑難解答
圖片精選