廣州總校區(qū)切換校區(qū)
復(fù)制成功
微信號:togogoi
添加微信好友, 詳細(xì)了解課程
已復(fù)制成功,如果自動跳轉(zhuǎn)微信失敗,請前往微信添加好友
打開微信
圖片

行業(yè)新聞

TCP傳輸規(guī)則及策略

發(fā)布時間: 2022-04-15

TCP傳輸規(guī)則及策略,TCP協(xié)議通過提供滑動窗口管理機(jī)制,在確保數(shù)據(jù)傳輸?shù)目煽啃缘耐瑫r,充分地利用網(wǎng)絡(luò)帶寬。

滑動窗口提供一種動態(tài)的傳輸機(jī)制,允許一次連續(xù)傳輸若干數(shù)據(jù)包而不必一一等待確認(rèn),但對連續(xù)發(fā)送的數(shù)據(jù)包的數(shù)量進(jìn)行限制。

滑動窗口的大小表明了接收方接收緩沖區(qū)的大小。它由一組按順序排列的數(shù)據(jù)包序號組成,這些數(shù)據(jù)包包括:發(fā)送并已確認(rèn)部分,發(fā)送但未被確認(rèn)的部分和能夠發(fā)送但未發(fā)送的部分。按照順序發(fā)送的若干數(shù)據(jù)包不必一一等待確認(rèn),確認(rèn)的順序可以打亂。




假設(shè)發(fā)送方通過滑動窗口一次性向接收方發(fā)送了順序號為4、5和6的數(shù)據(jù)包,數(shù)據(jù)包5、6被確認(rèn),而數(shù)據(jù)包4未被確認(rèn),這時窗口是不能被滑動的,直到數(shù)據(jù)包4被確認(rèn)后,窗口立即向后滑動。實際上,滑動窗口的大小在隨著接收方緩沖區(qū)的變動而變動,努力地使發(fā)送方一次發(fā)送的若干數(shù)據(jù)包可以正好填滿接收方的接收緩沖區(qū),這實際上是一種流量控制技術(shù)。

滑動窗口主要負(fù)責(zé)對流量進(jìn)行控制,路由器或接收方可以通過發(fā)送ICMP消息給發(fā)送方,以確保發(fā)送方發(fā)送數(shù)據(jù)包的速度。

發(fā)送方在知道接收方緩沖區(qū)大小的情況下發(fā)送了一個數(shù)據(jù)包,而該數(shù)據(jù)包只占用了接收方緩沖區(qū)的一部分。在應(yīng)用程序取走這個數(shù)據(jù)包之前,接收方會通告窗口大小為剩下的那部分緩沖區(qū)的大小,并立即對上一次的數(shù)據(jù)包進(jìn)行確認(rèn)。

發(fā)送方會根據(jù)接收方提供的新的窗口大小進(jìn)行發(fā)送,如果這時發(fā)送的數(shù)據(jù)包正好裝滿接收方的緩沖區(qū),但接收方的應(yīng)用程序還沒有對數(shù)據(jù)進(jìn)行讀取,接收方會進(jìn)行確認(rèn)并聲明滑動窗口大小為0。

此時發(fā)送方會停止發(fā)送數(shù)據(jù)包而進(jìn)入等待狀態(tài),直到接收方的應(yīng)用程序讀取緩沖區(qū)內(nèi)的數(shù)據(jù)后,接收方又會聲明大于0 的窗口大小,發(fā)送方會繼續(xù)發(fā)送數(shù)據(jù)。在這種情況下,很容易出現(xiàn)窗口聲明丟失從而出現(xiàn)死鎖的可能。

實際上,TCP標(biāo)準(zhǔn)提供了比較有效的手段防止以上情況的發(fā)生。

其實,發(fā)送方不用在應(yīng)用程序的數(shù)據(jù)到來時就馬上發(fā)送數(shù)據(jù)包;接收方也不用一收到數(shù)據(jù)包就進(jìn)行確認(rèn)。發(fā)送方產(chǎn)生了一個數(shù)據(jù)包,但該數(shù)據(jù)包可能只占用接收方緩沖區(qū)的一部分,此時發(fā)送方會將該數(shù)據(jù)包暫時緩存起來,等數(shù)據(jù)包的數(shù)量和大小足以裝滿接收方緩沖區(qū)時再一起發(fā)送,接收方亦如此。利用這一方式可以大大提高數(shù)據(jù)傳輸?shù)男阅堋?br>
TCP在具體實現(xiàn)時采用設(shè)置延遲的方式,即對包含確認(rèn)信息和窗口大小的修改信息的數(shù)據(jù)包進(jìn)行延遲操作,向后延遲500ms再發(fā)送出去,并盡可能在這些數(shù)據(jù)包上帶上一些實際數(shù)據(jù)。這樣,只要應(yīng)用程序在500ms內(nèi)響應(yīng),便可以將發(fā)送的數(shù)據(jù)包數(shù)降低50%,網(wǎng)絡(luò)的實際利用率也隨之得到提高。

采用這種方法可以改善網(wǎng)絡(luò)的使用狀況,但發(fā)送方的效率還是沒有得到有效的改善。

以上提到的情況其實屬于愚蠢窗口癥候群(silly window syndrome)現(xiàn)象:終端應(yīng)用程序在普遍情況下每進(jìn)行一次單擊鍵盤操作(即一個字節(jié))就會發(fā)送一個包,而典型情況下一個包會擁有一個字節(jié)的數(shù)據(jù)載荷和40個字節(jié)長(20字節(jié)TCP頭和20字節(jié)的IP)的頭,于是產(chǎn)生4000%的過載,很輕易地就降低了網(wǎng)絡(luò)傳輸性能。

1984 年,John Nagle設(shè)計了Nagle算法解決這種網(wǎng)絡(luò)問題,后來成為了一種標(biāo)準(zhǔn)并且在因特網(wǎng)上得以實現(xiàn)。

現(xiàn)在Nagle算法已經(jīng)成為默認(rèn)配置了。這種方法的原理其實很簡單:發(fā)送方首先發(fā)送從應(yīng)用程序傳來的數(shù)據(jù)的第一個字節(jié),并等待接收方的確認(rèn)信息;在此之前,從應(yīng)用程序傳來的數(shù)據(jù)會緩存起來,當(dāng)確認(rèn)信息到達(dá)后,即將緩存的數(shù)據(jù)一起發(fā)送出去。

這種方法動態(tài)地改善了網(wǎng)絡(luò)性能。但是在某些實際的TCP程序設(shè)計中,最好將Nagle算法關(guān)掉,因為使用它也可能產(chǎn)生不良效果。

上一篇: 什么是ARP協(xié)議

下一篇: 什么是端口與端口號

<
在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優(yōu)質(zhì)服務(wù)!