TCP 中的 Nagle 算法

《HTTP 權(quán)威指南》閱讀隨筆

為什么要使用 Nagle 算法
TCP 有一個數(shù)據(jù)流接口,應(yīng)用程序可以通過它將任意尺寸的數(shù)據(jù)放入 TCP 棧中,即使一次只放入一個字節(jié)也可以。但是 TCP 段中至少包含了 40 個字節(jié)的標(biāo)記和首部,所以如果 TCP 發(fā)送了大量包含少量數(shù)據(jù)的分組時,網(wǎng)絡(luò)的性能就會嚴(yán)重下降。此時需要引入 Nagle 算法來解決這種性能問題。
什么是 Nagle 算法
Nagle 算法(以其發(fā)明者 John Nagle 命名)試圖在發(fā)送一個分組之前,將大量 TCP 數(shù)據(jù)綁定在一起,以提高網(wǎng)路效率。Nagle 算法鼓勵發(fā)送全尺寸的段,只有當(dāng)其他分組都被確認(rèn)之后,Nagle 算法才允許發(fā)送非全尺寸的分組,如果其他分組仍然在傳輸過程中,就將那部分?jǐn)?shù)據(jù)緩存起來,只有當(dāng)掛起分組被確認(rèn),或者緩存中積累夠一個全尺寸分組數(shù)據(jù)時,才會將緩存的數(shù)據(jù)發(fā)送出去。
Nagle 算法的弊端以及如何解決
Nagle 算法主要存在兩個問題:

  1. 對于零散的小的 HTTP 報文,可能會因為等待那些永遠(yuǎn)也不會到來的額外數(shù)據(jù)而產(chǎn)生時延;
  2. Nagle 算法會阻止數(shù)據(jù)發(fā)送,直到確認(rèn)分組抵達(dá)為止,但確認(rèn)分組會被遲延確認(rèn)算法延遲一小段時間(一般是 100~200 毫米)。

對于上面兩種情況,HTTP 應(yīng)用程序通??梢栽跅V性O(shè)置參數(shù) TCP_NODELAY 來禁用 Nagle 算法以提高性能。如果這么做的話,就要盡量保證發(fā)送包含大數(shù)據(jù)塊的 TCP 分組,來避免網(wǎng)絡(luò)性能的下降。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Nagle算法 Nagle算法的目的在于減少廣域網(wǎng)上小分組的數(shù)。 該算法要求一個TCP連接上最多只能有一個未被確認(rèn)...
    wayyyy閱讀 1,252評論 0 2
  • 作者: 雪山肥魚 時間:20211109 06:57 目的: 了解http 的連接管理 4.1 TCP 連接(老生...
    404Not_Found閱讀 543評論 0 1
  • [TOC] Small Packet Problem 在使用一些協(xié)議通訊的時候,比如Telnet,會有一個字節(jié)字節(jié)...
    tracy_668閱讀 1,168評論 0 1
  • TCP連接 TCP/IP是全球計算機(jī)及網(wǎng)絡(luò)設(shè)備都在使用的一種常用的分組交換網(wǎng)絡(luò)分層協(xié)議集。客戶端應(yīng)用程序可以打開一...
    咖啡少年不加糖whm閱讀 625評論 1 1
  • HTTP 是如何使用TCP連接的 TCP連接的時延,瓶頸以及存在的故障 HTTP 的優(yōu)化,包括并行連接,keep-...
    minyue閱讀 704評論 0 0

友情鏈接更多精彩內(nèi)容