TCP協議核心算法

內容原創,未經本人同意請勿轉載。聯系本人:jianshu_kevin@126.com

擁塞窗口(congestion window, cwd)

顧名思義,擁塞窗口就是用來避免網絡擁塞而設計的一個針對發送方保存的一個變量,是指發送方允許向網絡發送的數據量。tcp在發送數據時不是隨意發送的,要根據擁塞窗口來確定當前的可發送數據的大小。

初始擁塞窗口大小

初始擁塞窗口在RFC2581中有明確的定義:

  • 不超過發送放的2*MSS
  • 不得超過兩個TCP包

發送過程中的窗口變化(建議后面再看)

慢啟動

當網絡狀況不好的情況下,為了避免網絡狀態進一步惡化,而采取的一種減少數據發送的一種策略。

慢啟動門限值(ssthresh)

擁塞避免

系統采用滿啟動后,隨著網絡狀況好轉,如果發送方數據持續發送,那么數據量會越來越大。擁塞窗口CWD會不斷變大,為了避免數據量過大,就需要采取擁塞避免。

快速重傳

快速重傳用在網絡狀態有差變好的情況下。當發送方收到一個無序的確認報文后,就立即發送重復確認,為的是讓對方早點知道有報文沒有到達,而不是超時等待后再重傳。
快速重傳算法規定,當發送方收到連續的三次重復確認,就立即發送對方沒有收到的報文段,而不必等待重傳超時到期。

快速恢復

當接收方收到3次重復確認后,說明網絡狀況變好了,沒有必要采用慢啟動算法,直接采用快速恢復。快速恢復和滿啟動的區別就是可以發送的數據量不同

RTT(Round Trip Time)

網絡往返時間,等于一個數據包收到ACK-發送時的時間。

Nagle算法

防止小報數據,大量傳輸引起網絡過載,因為即使1個字節的數據+頭也得有41個字節了。所以為了避免小包數據,該算法采用了如下步驟避免這種情況:

  • 緩沖區數量達到一定的上限才發送
  • 等待了一段時間(200ms),才啟動發送

socket接口有TCP_CORK選項開關Nagle算法

on = 0;
setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* 拔去塞子 */

立即/捎帶/延遲 ACK

立即ACK

需要滿足以下條件:

  • 狀態為SYN_SENT
  • 接收到FIN包
  • 整個數據包都在pcb->recv_nxt,立即發送dupack
  • 接收到數據包長度為0

延遲ACK

接收到的數據不滿足立即ACK條件,就會將TF_ACK_DELAY置位,等待到時發送延遲ACK

捎帶ACK

延遲ACK到達之前,如果上層有數據要發送,那么就會將ACK捎帶在數據中發送,稱為捎帶ack

TCP連接和斷開的流程(非常重要)

Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 個人認為,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,096評論 0 8
  • 1.這篇文章不是本人原創的,只是個人為了對這部分知識做一個整理和系統的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,136評論 6 174
  • TCP/IP協議 作者:xinyuans 本文為參考TCP/IP詳解卷一,某些知識點加上了作者自己的理解,如有錯誤...
    xinyuans閱讀 846評論 0 1
  • 傳輸層-TCP, TCP頭部結構 ,TCP序列號和確認號詳解 TCP主要解決下面的三個問題 1.數據的可靠傳輸...
    抓兔子的貓閱讀 4,555評論 1 46
  • 六、TCP可靠傳輸的實現 首先介紹以字節為單位的滑動窗口。為了講述可靠傳輸原理的方便,假定數據傳輸只在一個方向進行...
    dmmy大印閱讀 1,818評論 0 1