網絡通信積累(二)

淺談流量控制和擁塞控制

流量控制

流量控制其實是控制發送端,在接收端接收能力不足時,發送端發送過快,接收端來不及處理,造成資源浪費。那也就是說,接收能力決定了發送速度。

在確認應答策略中,對每一個發送的數據段,都要給一個ACK確認應答,收到ACK後再發送下一個數據段,這樣做有一個比較大的缺點,就是性能比較差,尤其是數據往返的時間長的時候,就特別阻塞。

噹噹噹當,我們採用滑動窗口來實現流量控制。一次可以發送多條數據,從而去提高性能。

怎麼實現流量控制

滑動窗口。這裏的窗口可以理解爲類似於緩存區。

接收端將自己可以接收的緩衝區大小放入 TCP 首部中的 “窗口大小” 字段, 通過ACK端通知發送端;窗口大小字段越大, 說明網絡的吞吐量越高;

接收端一旦發現自己的緩衝區快滿了, 就會將窗口大小設置成一個更小的值通知給發送端;發送端接受到這個窗口之後, 就會減慢自己的發送速度;

如果接收端緩衝區滿了, 就會將窗口置爲0; 這時發送方不再發送數據, 但是會時不時地發送窗口探測數據段(一個字節), 使接收端把窗口大小告訴發送端;
流量控制示意圖

擁塞控制

我們雖然有了滑動窗口這個法寶,也不能掉以輕心,如果網絡中每臺終端都連上網絡以後,貿然發送大量的數據,網絡必然會吃不消,造成網絡擁堵。

所以我們控制擁塞也有幾個方法:慢開始和擁塞避免、快重傳和快恢復;
在這裏插入圖片描述
每次發送數據包的時候, 將擁塞窗口和接收端主機反饋的窗口大小做比較, 取較小的值作爲實際發送的窗口;像上面這樣的擁塞窗口增長速度, 是指數級別的. (慢開始) 只是指初使時慢, 但是增長速度非常快.爲了不增長的那麼快, 因此不能使擁塞窗口單純的加倍.此處引入一個叫做慢啓動的閾值。 當擁塞窗口超過這個閾值的時候, 不再按照指數方式增長, 而是按照線性方式增長(擁塞避免)。

當TCP開始啓動的時候, 慢開始閾值等於窗口最大值;在每次超時重發的時候, 慢開始閾值會變成原來的一半, 同時擁塞窗口置回1;少量的丟包, 我們僅僅是觸發超時重傳; 大量的丟包, 我們就認爲網絡擁塞;

當然,只要發送端一連收到三個重複的 ACK 即可斷定有分組丟失了,就應立即重傳丟失的報文段而不必繼續等待爲該報文段設置的重傳計時器的超時(快重傳)。
在這裏插入圖片描述

  1. 當發送方連續收到三個重複確認時,就執行“乘法減小”算法,把ssthresh門限減半。但是接下去並不執行慢開始算法。

  2. 考慮到如果網絡出現擁塞的話就不會收到好幾個重複的確認,所以發送方現在認爲網絡可能沒有出現擁塞。所以此時不執行慢開始算法,而是將cwnd設置爲ssthresh的大小,然後執行擁塞避免算法
    在這裏插入圖片描述

流量控制和擁塞控制的比較

  1. 相同點
    (1)現象都是丟包;
    (2)實現機制都是讓發送方發的慢一點,發的少一點

  2. 不同點
    (1)丟包位置不同
    流量控制丟包位置是在接收端
    擁塞控制丟包位置是在路由器
    (2)作用的對象不同
    流量控制的對象是接收方,怕發送方發的太快,使得接收方來不及處理 。
    擁塞控制的對象是網絡,也是怕發送方發的太快,造成網絡擁塞,使得網絡來不及處理。

  3. 聯繫
    流量控制:流量控制發生在發送端和接收端之間,只是點到點之間的控制。
    擁塞控制:擁塞控制通常表示的是一個全局性的過程,它會涉及到網絡中所有的主機、所有的路由器和降低網絡傳輸性能的所有因素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章