0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

TCP傳輸流量控制和擁塞避免方案

454398 ? 來源:博客園 ? 作者: lingjiango ? 2020-10-29 11:17 ? 次閱讀

先來了解2個TCP的概念:

MSS:Maximum Segment Size,TCP一次傳輸發(fā)送的最大數(shù)據(jù)段長度。

RTT:Round-Trip Time,往返時延,表示從發(fā)送端發(fā)送數(shù)據(jù)開始,到發(fā)送端收到來自接收端的確認(接收端收到數(shù)據(jù)后便立即發(fā)送確認),總共經(jīng)歷的時延。

TCP傳輸大塊數(shù)據(jù)時,肯定需要進行數(shù)據(jù)分段,而每個分段所能攜帶的最大數(shù)據(jù)就是1個MSS,假設大塊數(shù)據(jù)為100個MSS,那么發(fā)送方發(fā)送的方式大概有如下兩種:

1、 每次發(fā)送1個,收到接收方確認后,才發(fā)送下1個;

2、 一口氣發(fā)送100個,然后收到對方一起確認;

顯然,方式1中,一個RTT只能處理一個包,這樣的傳輸效率太低了。而方式2看似很美好,實際會存在兩個問題,一個是接收方的接收窗口未必能一次性接收這么多數(shù)據(jù),另外一個是網(wǎng)絡的帶寬也不一定足夠大,容易出現(xiàn)丟包事故。前一個問題就是標題中的流量控制(Flow control),TCP采用的是滑動窗口機制(Sliding window),后一個問題就是標題中的擁塞控制(Congestion control)。發(fā)送方的發(fā)送窗口或者說網(wǎng)絡傳輸交互就取決于這兩個問題的控制,誰控制的更嚴格,誰就占據(jù)了決定性因素,這也是為什么兩者總是一起出現(xiàn)一起被討論。

流量控制(Flow control):

TCP uses an end-to-end flow control protocol to avoid having the sender send data too fast for the TCP receiver to receive and process it reliably. Having a mechanism for flow control is essential in an environment where machines of diverse network speeds communicate.

TCP使用端到端流量控制協(xié)議來避免發(fā)送方發(fā)送數(shù)據(jù)太快,以致TCP接收方不能可靠地接收和處理數(shù)據(jù)。在不同網(wǎng)絡速度的機器進行通信的環(huán)境中,具有流量控制機制至關重要。

圖一

圖一為通過Wireshark抓包192.168.2.1和192.168.2.198的交互截圖,可以看到有個標記Win,這個標記的含義就是接收端告訴發(fā)送端自己還有多少緩沖區(qū)可以接收數(shù)據(jù)。于是發(fā)送端就可以根據(jù)這個接收端的處理能力來發(fā)送數(shù)據(jù),而不會導致接收端處理不過來。

[TCP zerowindow]& [TCP window Full]

提到Win標記,就順便談一下Wireshark的[TCP zerowindow]和[TCP window Full],當Win=0時,Wireshark就會打上TCP zerowindow,表示緩存區(qū)已滿,不能再接收數(shù)據(jù)了。當Wireshark在一個包上打上TCP window Full,就表示這個包的發(fā)送方已經(jīng)把對方聲明的接收窗口耗盡了。兩者的共同特點都是傳輸暫停,前者的含義是發(fā)送方無法再接收數(shù)據(jù),后者表示發(fā)送方無法再發(fā)送數(shù)據(jù)。

回過頭來再來說滑動窗口。

圖二截取自《TCP/IP詳解》

圖三取自參考資料

圖四取自參考資料

圖二和圖三可以知道接收方會通知發(fā)送方當前已接收到的信息和可用窗口信息。

圖三和圖四可以看出來窗口滑動的過程。

總結:TCP的流量控制由滑動窗口來實現(xiàn)的,滑動窗口控制流量取決于接收方的窗口大小。

擁塞控制(Congestion control):

流量控制是端到端的交互,如果只是局域網(wǎng)內(nèi)的兩臺設備交互,我想通過滑動窗口大概能控制得不差,但是實際網(wǎng)絡的情況非常復雜,發(fā)送方和接收方之間還有路由器和交換機,網(wǎng)絡傳輸線路又復雜,這個時候就需要擁塞控制。

擁塞控制主要有四個算法慢啟動、擁塞避免、快速重傳和快速恢復。

慢啟動:

討論慢啟動算法先來了解下?lián)砣翱诘母拍?,這是慢啟動算法為TCP發(fā)送方新增的窗口,congestion window,簡稱cwnd。對應上文,發(fā)送方取擁塞窗口和滑動窗口的最小值作為發(fā)送上限,即誰嚴格誰起決定因素。

1、 連接建立開始,發(fā)送方不了解網(wǎng)絡的情況,cwnd初始化比較小的值,RFC建議2-4個MSS,具體視MSS的大小而定;

If (MSS <= 1095 bytes)

then win <= 4 * MSS;

If (1095 bytes < MSS < 2190 bytes)

then win <= 4380;

If (2190 bytes <= MSS)

then win <= 2 * MSS; 摘自rfc3390.

2、 如果發(fā)送出去的包都被ACK,說明還未到達擁塞點,則增加擁塞窗口,RFC建議的是每收到n個ACK,則cwnd新增n個MSS,呈指數(shù)關系增長,雖然這個過程看似比較快,但是基數(shù)比較低,所以被稱為“慢啟動”。

擁塞避免:

其實慢啟動除了維護了cwnd,還維護了慢啟動臨界值ssthresh,一般將ssthresh設置為65535字節(jié)。在cwnd<=ssthresh時,還是處于慢啟動環(huán)節(jié),一旦>ssthresh,開始進入擁塞避免。

RFC建議擁塞避免環(huán)節(jié),無論一個RTT可以收到多少個ACK,每一次確認都只新增1個MSS,呈線性關系增長,避免快速的觸碰到網(wǎng)絡擁塞點。

圖五取自參考資料

快速重傳和快速恢復:

進入擁塞避免之后,最終還是會碰到擁塞點,發(fā)送方此時遲遲得不到確認,當然得不到確認也有可能是因為延遲確認導致的。發(fā)送方此時決定等待一段時間,如果一段時間后還是得不到確認,就發(fā)起重傳,這個過程叫做超時重傳。從發(fā)出原始包到重傳該包的時間叫做RTO(Retransmission TimeOut)。

進入超時重傳后,RFC建議將cwnd設置為1個MSS,而對于ssthresh,RFC5681建議的是發(fā)生擁塞時未被ACK的數(shù)據(jù)量的1/2,但必須大于等于2個MSS。然后重新進入慢啟動環(huán)節(jié)。超時重傳因為需要等待RTO之后才能進入新的恢復環(huán)節(jié),所以對網(wǎng)絡性能的影響是比較大的。所以各路大神又想到了一個新的方式,看能否無需等待RTO,就發(fā)起重傳,這種方式叫做快速重傳。快速重傳規(guī)定在收到3個及以上重復ACK時就觸發(fā)重傳,不再進入慢啟動環(huán)節(jié),然后直接進入擁塞避免,這個就是快速恢復算法。為什么是3個?因為1-2個重復ACK,很有可能是亂序,只有在3個及以上的時候才是有可能丟包了。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1337

    瀏覽量

    78865
  • 網(wǎng)絡傳輸

    關注

    0

    文章

    133

    瀏覽量

    17338
  • 擁塞
    +關注

    關注

    0

    文章

    12

    瀏覽量

    9437
收藏 人收藏

    評論

    相關推薦

    質(zhì)量流量控制器在生物發(fā)酵行業(yè)的應用

    氣體質(zhì)量流量控制器在工業(yè)中應用廣泛,尤其對氣體流量要求高的行業(yè)至關重要。愛拓利MFC300 MFC330系列能精確調(diào)節(jié)生物發(fā)酵過程中的氣體,提升生產(chǎn)效率和產(chǎn)品質(zhì)量,廣泛應用于生物發(fā)酵行業(yè)。 氣體
    的頭像 發(fā)表于 10-08 15:39 ?111次閱讀

    氣體質(zhì)量流量控制

    ? ? ?? 氣體質(zhì)量流量控制器 (MFC)的由來 ?主要源于工業(yè)過程中對氣體流量精確控制和測量的需求。隨著工業(yè)技術的發(fā)展,特別是在石油化工、冶金、制藥等行業(yè),對氣體流量的精確
    的頭像 發(fā)表于 09-24 10:36 ?167次閱讀
    氣體質(zhì)量<b class='flag-5'>流量控制</b>器

    如何使用AT指令集實現(xiàn)硬件流量控制?

    我嘗試使用 AT 指令集實現(xiàn)硬件流量控制。我已將主機控制器連接到 ESP8266 12S。 引腳 13 似乎一切正常,但引腳 15 看起來像是被拉下來并且永遠不會改變它的狀態(tài),我無法
    發(fā)表于 07-16 07:23

    TCP協(xié)議中的擁塞控制機制與網(wǎng)絡穩(wěn)定性

    TCP協(xié)議中的擁塞控制機制與網(wǎng)絡穩(wěn)定性的深度探討 隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡流量呈現(xiàn)爆炸式增長,網(wǎng)絡擁塞問題逐漸凸顯。為了維護網(wǎng)絡的穩(wěn)定運行
    的頭像 發(fā)表于 04-19 16:42 ?310次閱讀

    以太網(wǎng)存儲網(wǎng)絡的擁塞管理連載案例(五)

    解決無損以太網(wǎng)網(wǎng)絡擁塞問題的方法與光纖通道結構相同。兩者都使用逐跳流量控制機制,只是實現(xiàn)方式不同而已。
    的頭像 發(fā)表于 03-04 11:17 ?738次閱讀
    以太網(wǎng)存儲網(wǎng)絡的<b class='flag-5'>擁塞</b>管理連載案例(五)

    以太網(wǎng)存儲網(wǎng)絡的擁塞管理連載方案(一)

    鏈路級流量控制(LLFC):LLFC 可在直接連接的設備之間對鏈路上的所有流量進行流量控制。LLFC 是一項 IEEE 標準(IEEE 802.3x)。
    的頭像 發(fā)表于 02-26 10:52 ?1030次閱讀
    以太網(wǎng)存儲網(wǎng)絡的<b class='flag-5'>擁塞</b>管理連載<b class='flag-5'>方案</b>(一)

    TCP協(xié)議技術之擁塞控制算法

    擁塞控制是在網(wǎng)絡層和傳輸層進行的功能。在網(wǎng)絡層,擁塞控制可以通過路由算法來控制數(shù)據(jù)包在網(wǎng)絡中的
    的頭像 發(fā)表于 02-03 17:06 ?1790次閱讀
    <b class='flag-5'>TCP</b>協(xié)議技術之<b class='flag-5'>擁塞</b><b class='flag-5'>控制</b>算法

    請問TCP擁塞控制對數(shù)據(jù)延遲有何影響?

    今天分享一篇文章,是關于 TCP 擁塞控制對數(shù)據(jù)延遲產(chǎn)生的影響的。作者在服務延遲變高之后進行抓包分析,結果發(fā)現(xiàn)時間花在了 TCP 本身的機制上面:客戶端并不是將請求一股腦發(fā)送給服務端,
    的頭像 發(fā)表于 01-19 09:44 ?495次閱讀
    請問<b class='flag-5'>TCP</b><b class='flag-5'>擁塞</b><b class='flag-5'>控制</b>對數(shù)據(jù)延遲有何影響?

    騰訊有點頂,連環(huán)追問我基礎細節(jié)!

    傳輸層:該層處理兩個設備之間的端到端的通信。它在發(fā)送方將數(shù)據(jù)分解成段,然后在接收方重新組裝。這一層有流量控制,以防止擁塞。這一層的主要協(xié)議是 TCP 和 UDP。
    的頭像 發(fā)表于 12-11 17:30 ?503次閱讀

    如何選擇傳輸層協(xié)議?TCP和UDP的優(yōu)缺點和適用場合

    和可靠性至關重要。本文將詳細介紹TCP和UDP的優(yōu)缺點以及適用場合。 1. TCP的優(yōu)點和適用場合: TCP是一種可靠的、面向連接的傳輸層協(xié)議,它提供了重發(fā)機制、數(shù)據(jù)丟失檢測和
    的頭像 發(fā)表于 12-11 11:42 ?876次閱讀

    TCP傳輸控制協(xié)議知識科普拓展

    傳輸控制協(xié)議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。
    的頭像 發(fā)表于 11-27 17:46 ?890次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>傳輸</b><b class='flag-5'>控制</b>協(xié)議知識科普拓展

    TCP源碼,和注釋,及應用

    TCP協(xié)議實現(xiàn)涉及到更多的細節(jié)和功能,包括建立連接、數(shù)據(jù)傳輸、流量控制、擁塞控制等。如果您想深入了解T
    發(fā)表于 11-19 12:31

    工業(yè)控制領域基于TCP/IP的數(shù)據(jù)傳輸方案

    電子發(fā)燒友網(wǎng)站提供《工業(yè)控制領域基于TCP/IP的數(shù)據(jù)傳輸方案.pdf》資料免費下載
    發(fā)表于 11-16 10:52 ?0次下載
    工業(yè)<b class='flag-5'>控制</b>領域基于<b class='flag-5'>TCP</b>/IP的數(shù)據(jù)<b class='flag-5'>傳輸</b><b class='flag-5'>方案</b>

    TCP和UDP的區(qū)別

    是可靠傳輸,使用流量控制擁塞控制;UDP是不可靠傳輸 TCP首部最小20字節(jié),最大60字節(jié);U
    的頭像 發(fā)表于 11-09 09:35 ?4651次閱讀
    <b class='flag-5'>TCP</b>和UDP的區(qū)別

    啤酒機如何實現(xiàn)液體流量控制

    啤酒機是現(xiàn)代家庭和餐飲場所中越來越受歡迎的設備,它可以方便地提供各種風味的啤酒。流量控制是啤酒機制作啤酒過程中的重要環(huán)節(jié)之一,而流量計則是實現(xiàn)這一控制的關鍵部件。本文將介紹啤酒機如何通過流量
    的頭像 發(fā)表于 11-02 14:29 ?421次閱讀
    啤酒機如何實現(xiàn)液體<b class='flag-5'>流量控制</b>