引言:
tcp與udp各有各的優缺點,相比於udp,tcp具有擁塞控制與滑動視窗機制等功能,這裡先給自己整理一哈擁塞(se)控制。
為什麼要用擁塞控制:
因為由於一些原因(接收過多的報文,超過路由器的處理能力)路由器可能會丟棄一些報文,然而定時器這個時候就會處於超時狀態,傳送端就會重新傳送報文,這樣反而會惡性迴圈,加重路由器的擁塞。那麼為了控制這種情況設計人員在tcp的加入了擁塞控制功能。
分析有哪些方法可以解決這種情況:
在發生擁塞的時候,路由器進行流量限制
傳送端減慢自己傳送報文的速度
顯然,tcp協議是利用第二種,控制傳送端的傳送報文速率進行擁塞控制的。
幾個名詞的認識:
sender window = min –傳送視窗–快取
rwnd: receiver』s advertised window (接收方宣告視窗)—— a receiver-side limit——流量控制
cwnd: congestion window(擁塞視窗) —— a sender-side limit(反映了網路的擁塞狀況)——擁塞控制
慢啟動和擁塞避免
快速重傳和快速恢復
ssthresh:人為設定的閾值
擁塞控制的過程:
建立一條新的tcp連線以後,執行慢啟動:
···初始狀態cwnd=1(1個最大報文段)
···傳送方只允許傳送1個tcp報文段(因為傳送視窗=1)------慢啟動實際並不慢,每過1個rtt,cwnd就翻倍,呈2的指數增長(當視窗為1時傳送乙個報文,經過乙個rtt後,視窗大小加1為2,當視窗大小為2時傳送兩個報文,經過乙個rtt時,視窗加2,是每當收到乙個報文視窗就加1,以此類推)
·等待ack(即接收端接收報文後會返回乙個指定報文)
···每收到1個ack,
···傳送視窗向右滑動1個報文段的長度
···cwnd+1 傳送方連續傳送2個報文段
···直到傳送視窗大小=ssthresh(慢啟動閾值)
·在慢啟動階段,擁塞視窗以指數形式增長,要避免發生擁塞,當擁塞視窗達到某個值後,必須減慢擁塞視窗的增長規律
·當傳送視窗大小=ssthresh時,傳送方進入擁塞避免階段
·在這個階段中,只有當視窗中所有報文都確認後,擁塞視窗+1
·實質上:每收到1個ack,cwnd=cwnd+1/ cwnd
·當rtt較大時,可以認為是每隔乙個rtt,擁塞視窗cwnd+1 à 加性增加(addictive increase)
·擁塞避免直到出現重傳定時器超時,即發生擁塞
·推測擁塞:超時重傳–因為重傳定時器超時
·ssthresh(慢啟動閾值)設定為當前cwnd(擁塞視窗)的一半
·即ssthresh = [cwnd / 2]
·cwnd(擁塞視窗)= 1
·重新執行慢啟動:也就是說如果還出現報文超時,那麼ssthresh就要一直減半1,但是我好像記得書上有乙個公式計算rtt和閾值的,書暫時不在身邊網上也找不到,如果記得我我在補上。
·如果不是超時,而是連續收到3個ack,處理方式是:
·ssthresh(慢啟動閾值)設定為當前cwnd(擁塞視窗)的一半–這個與上面的操作是一樣的
·cwnd=當前閾值–但是這裡就與上面不同了,而是設定為當前慢啟動閾值,連續收到3個ack,說明1個報文段可能丟失了,但後面的幾個報文段又安全到達
·開始擁塞避免階段
計算機網路 擁塞控制
在流量控制中,傳送方傳送的資料是由接收方決定,而在擁塞控制中,由傳送方自己通過檢測網路狀況而決定。1.慢開始演算法 剛開始傳送tcp報文段時,先令擁塞視窗cwnd 1 1個最大報文段長度mss 逐次加倍 當到達慢開始門限時,改用擁塞避免演算法。2.擁塞避免演算法 cwnd每次加1 當網路出現擁塞時,...
計算機網路 擁塞控制(1)
當過多的包在網路緩衝區中競爭某個相同鏈路時,佇列會溢位丟包,當這種丟包成為普通事件時,則稱網路發生擁塞。簡單概述就是對聚合頻寬的需求超過了鏈路的可用容量。巨集觀原因 網路資源分布不均勻,流量分布不均勻,微觀原因 報文聚合到達率大於路由器輸出鏈路的頻寬 多個包丟失,鏈路利用率低下 全網同步振盪,吞吐量...
計算機網路 網路層 擁塞控制
擁塞控制是網路層和傳輸層一起工作的責任,網路 現太多的資料報時,網路的效能開始急劇下降,這種情況稱為擁塞 對應書p304 流量感知路由 准入控制 流量限制 負載脫落 擁塞控制 congestion control 確保子網能夠承載所達到的流量 是乙個全域性性問題,涉及各方面的行為,包括所有的主機 所...