tcp 擁塞控制 TCP流量控制與擁塞控制

2021-10-18 00:10:57 字數 3596 閱讀 7420

流量控制

流量控制的定義

一條tcp連線每一側主機都為該連線設定了接收快取。當該tcp連線收到了正確的、按序的位元組後,他就將資料放入接收快取。相關聯的應用程序會從該快取中讀取資料。但不必是資料一到達就立即讀取。事實上,接收方也許正忙於其他任務,甚至要過很長時間後才讀取該資料。如果某個應用程序讀取比較緩慢,但是傳送方傳送的太多、太快,傳送的資料就會很容易地使該連線的接收快取溢位。

tcp為它的應用程式提供了流量控**務(flow-control service)以消除傳送方使接收方快取溢位的可能性。流量控制因此是乙個速度匹配服務,即傳送方的傳送速率與接收方應用程式的讀取速率相匹配。

流量控制的實現

tcp通過讓傳送方維護乙個稱為接收視窗(receive window)的變數(tcp報文段首部的接收視窗字段)來提供流量控制。通俗的講,接收視窗用於給傳送方乙個指示--該接收方還有多少可用的快取空間。因為tcp是全雙工通訊,在連線兩端的傳送方都各自維護了乙個接收視窗。

主機a則將自己發往主機b的序號空間中未確認的資料量控制在rwnd值的範圍內,這樣就可以避免主機a使主機b的接收快取溢位。

擁塞控制

為什麼需要擁塞控制?

我們在前面講到過,在tcp協議中,分組丟失一般是當網路變得擁塞時由路由器快取溢位引起的。因此分組重傳是作為網路擁塞的徵兆來對待,但是卻無法處理導致網路擁塞的原因,因為有太多的源想以過高的速率傳送資料。一旦網路發生擁塞,分組所經歷的時延會變大,分組丟失的可能性會變大,傳送端需要重傳的分組會變多,這只會導致網路越來越擁塞,形成惡性迴圈。因此,為了處理網路擁塞,需要一些機制以在面臨網路擁塞時遏制傳送方。

擁塞控制方法

在實踐中採用了兩種主要的擁塞控制方法,這兩種方法是根據網路層是否為傳輸層擁塞控制提供了顯示幫助來區分。它們是端到端擁塞控制網路輔助的擁塞控制

端到端擁塞控制

在端到端的擁塞控制中,網路層沒有為運輸層提供顯示支援。即使網路中存在擁塞,端系統也必須通過對網路行為的觀察(如分組的丟失與時延)來推理判斷之。

網路輔助的擁塞控制

在網路輔助的擁塞控制中,網路層構件(即路由器)向傳送方提供關於網路中擁塞狀態的顯示反饋資訊。擁塞資訊從網路反饋到傳送發通常有兩種方式:直接反饋資訊可以由網路路由器發給傳送方,這種方式的通知通常採用一種阻塞分組的形式;第二種方法是路由器標記或更新從傳送方流向接收方的分組中的某個欄位來指示擁塞的產生,一旦收到乙個標記的分組後,接收方就會向傳送方傳送該網路擁塞指示。

tcp擁塞控制

tcp是通過端到端的方法來解決擁塞控制的,因為ip層不會向端系統提供有關網路擁塞的反饋資訊。tcp報文段的丟失被認為是網路擁塞的乙個跡象,tcp會相應的減小其視窗長度。這裡我們需要明確的幾個問題是:

1.tcp傳送方如何限制它向其連線傳送流量的速率?

2.tcp傳送方如何感知從它到目的地之間的路徑上存在擁塞呢?

3.當感知到了擁塞時,採用何種演算法來改變其傳送速率呢?

首先我們來考慮tcp傳送方怎樣限制它向網路傳送流量的速率。與流量控制一樣,在傳送方的tcp擁塞控制機制中跟蹤了乙個額外的變數,即擁塞視窗(congestion window)。擁塞視窗表示為cwnd,通過這個擁塞視窗,我們就能夠對傳送方向其連線傳送資料的速率進行限制。具體的措施是:讓乙個傳送方中未確認的資料量不會超過cwnd和rwnd的最小值,即:

如前所述tcp傳送方通過捕獲到丟包時間的產生感知從它到目的地之間的路徑上存在擁塞。

在擁塞情況發生時,我們可以通過減小cwnd的值來減小傳送方傳送資料的速率。那麼如果沒有擁塞發生呢?如果沒有擁塞,我們應該增加cwnd的值來增大傳送方傳送資料的速率。傳送方傳送速率過大會導致網路擁塞,甚至擁塞崩潰;而如果傳送方過於謹慎,傳送太慢則不能充分利用頻寬。因此根據網路情況合理設定cwnd的值非常重要。

在概述了tcp擁塞控制之後,現在我們來考慮一下廣受讚譽的tcp擁塞控制演算法。該演算法包括三部分:慢啟動,擁塞避免,快速恢復

慢啟動

當一條tcp連線開始,cwnd值通常初始置為乙個mss較小值。這使得初始傳送速率為mss/rtt。在慢啟動(slow-start)狀態,cwnd的值以1個mss開始並且每當傳輸的報文段首次被確認就增加乙個mss。

①如果存在乙個由超時指示的丟包事件,tcp傳送方將cwnd設定為1並重新開始慢啟動過程。它還將第二個狀態變數的值ssthresh(慢啟動閾值)設定為cwnd/2,即當檢測到擁塞時將ssthresh置為擁塞視窗值的一半。

②當檢測到擁塞時ssthresh設為cwnd的一半,當到達或超過ssthresh的值時,結束慢啟動並且tcp轉移到擁塞避免模式。

③如果檢測到3個冗餘ack,這時tcp執行一種快速重傳並進入快速恢復狀態。

擁塞避免

每個rtt只將cwnd的值增加乙個mss:對於tcp傳送方無論何時到達乙個新的確認,就將cwnd增加乙個mss(mss/cwnd)位元組。例如,如果mss是1460位元組,並且cwnd是14 600位元組,則在乙個rtt內傳送10個報文段。每個到達ack增加1/10mss的擁塞視窗長度,因此在收到對所有10個報文段的確認後,擁塞視窗的值將增加了乙個mss。當出現超時時,tcp的擁塞避免與慢啟動階段一樣。當出現丟包時,網路繼續從傳送方向接收方交付報文段,當接收到3個冗餘ack時,將ssthresh的值置為cwnd的一半,同時將cwnd的值減半加上3個mss。

快速恢復

1)對收到的每個用冗餘ack,cwnd值增加乙個mss。

2)當對丟失報文段的乙個ack到達時,tcp在降低cwnd進入擁塞避免狀態。

3)如果出現超時事件,執行如同慢啟動和擁塞避免中相同的動作後,遷移到慢啟動狀態。

TCP流量控制與擁塞控制

tcp 的流量控制與擁塞控制可以說是一體的。流量控制是通過滑動視窗實現的,擁塞避免主要包含以下2個內容 1 慢開始,擁塞避免 2 快重傳,快恢復 1.流量控制 滑動視窗 tcp採用大小可變的滑動視窗進行流量控制,視窗大小的單位是位元組。傳送視窗在連線建立時由雙方商定。但在通訊的過程中,接收端可根據自...

TCP流量控制與擁塞控制

傳送方在確定傳送報文段的速率時,既要根據接受方的接受能力,又要從全域性考慮不要使用網路發生擁塞。因此tcp協議要求傳送方 維護兩個視窗 接收方總是有足夠大的快取空間,因而傳送視窗大小由網路的擁塞程度來決定,也就是說可以將傳送視窗大小 小於等於 擁塞視窗大小。tcp通過乙個定時器 重傳計時器 採用了往...

TCP 流量控制與擁塞控制

tcp流量控制 為了避免傳送端短時間內將大量資料傳送給接收端,而接收端快取和處理能力無法滿足情況,採取滑動視窗的方式。動態的調整傳送端的傳送速率,tcp視窗單位是位元組,即傳送視窗大小的位元組數小於接受埠大小的位元組數 tcp擁塞控制 與流量控制不同,流量控制只是控制傳送端的傳送速率,考慮的是兩端之...