我一直在研究資料包傳輸的吞吐量速度,並且對從一個端系統到另一個端系統的總吞吐量感到困惑。例如:假設伺服器正在向客戶端發送資料包,中間有路由器。我的課本電腦網路Kurose和Ross表示,吞吐速度較慢的終端系統決定了整個檔案傳輸的吞吐速度。為什麼是這樣?
難道這兩個吞吐量速度不會相加就構成整個檔案傳輸吞吐量嗎?例如:伺服器的吞吐量以 1 Mbps 的速率輸出,路由器的吞吐量以 2 Mbps 的速率輸出。也假設檔案大小為 1000 萬位元。從伺服器到路由器,需要 10 秒才能到達伺服器,然後大約需要 5 秒才能到達客戶端,使總吞吐量互動需要 15 秒。我就是這麼想的,但按照教科書的邏輯,這需要 10 秒鐘。為什麼是這樣?
答案1
想像一下,一排螞蟻從一片樹葉移動到它們的洞裡,但它們需要爬過去的路上有一根棍子:
<Leaf> ------ <stick> ------ <hole>
螞蟻需要 3 秒鐘到達棍子(旅程的第 1 腿),10 秒鐘才能爬過棍子(第 2 腿),然後 2 秒從棍子移動到洞(第 3 腿)。 leg1的總頻寬是3隻螞蟻,棍子的頻寬是1隻螞蟻,leg3的頻寬是3隻螞蟻。
因此 ant0 離開葉子,並前往棍子。他爬過棍子,走到洞口。總時間 = 15 秒。
Ant1 比 ant0 落後 1 秒,並在 3 秒內遍歷完leg1。它到達了棒,但棒的頻寬已滿,因為 Ant0 正在使用它。因此 Ant1 必須等待 9 秒才能開始越過棍子。當 Ant0 在棍子上完成後,Ant1 越過棍子並繼續進入洞。總時間為 3 秒 + 9 秒(等待)+ 過桿 10 秒 + 進洞 2 秒 => 24 秒。
Ant2 落後 ant1 1 秒,需要 3 秒才能到達棍子。然後,它需要等待 Ant0 和 Ant1 清除木棒,然後才能穿過。總時間=3s+10s(等待ant1)+8s(等待ant0)+10s(過木棍)+2s到達洞=>33秒。
因此,如果我們要測量該路徑的吞吐量,則為每秒 3/(15+24+33) => 0.0416 隻螞蟻。
假設我們將leg1 加速到1 秒(快3 倍)。我們最終得到每秒 3/(13+22+31) => 0.454 隻螞蟻。單腳速度增加 3 倍,增幅很小。
假設我們將leg3 加速到1 秒(快2 倍)。我們最終得到每秒 3/(12+21+30) => 0.0476 隻螞蟻。再次影響很小。
然而,如果我們增加leg2的速度,也許增加2倍到5秒,我們會得到一個非常不同的數字:3/(7 + 11 + 17) => 0.085 隻螞蟻每秒。
因此,增加任一較快組件的作用很小,但將最慢組件的速率加倍實際上會使路徑的吞吐量加倍。
那麼你有沒有註意到,儘管Leg3有足夠的頻寬,傳輸速率也很快,但這並不影響螞蟻到達洞口的速度,因為螞蟻進入Leg3的速度受到了棍子的瓶頸,所以大多數Leg3 上的頻寬不可用。你可以將其增加 100 倍,並且不會對螞蟻到達洞口的速度產生絲毫影響。在這種情況下,改變方程式的唯一方法就是提高螞蟻穿過棍子的速度。其他一切都沒有意義。
答案2
速度最慢的一端將決定整體鏈路速度,因為它實際上無法更快地接收數據,否則會導致錯誤。
不要考慮所花費的時間,而要考慮聽的速度有多快。
這麼說吧:有人大聲朗讀一本書,但他們說得很快,而且有人在聽。聽的人只能以較慢的速度理解,所以要么快速閱讀的人必須放慢到聽者可以理解的速度,要么聽者必須不斷地說「等等,你能重複一下嗎」。這決定了吞吐量。
您還犯了一個嚴重錯誤,假設路由器在傳遞之前保存要傳輸的整個資料區塊,雖然這種情況確實發生在微小的資料區塊上,但這並不是整個系統的工作方式。
您在這裡看到兩個吞吐量。發起者到路由器以及從路由器到接收者的吞吐量。路由器在任何給定時刻僅保存少量數據,並且在重新傳輸之前不會存儲整個大數據塊,因此您實際上擁有系統中最慢的鏈路,限制了端到端鏈路可以工作的整體速度在。