1. 程式人生 > >網路題——滑動視窗,最大吞吐量

網路題——滑動視窗,最大吞吐量

設TCP使用的最大視窗為64KB,即64x1024位元組,而傳輸通道的頻寬可認為是不受限制的。若報文段的平均往返時延為20ms,問所能得到的最大吞吐量是多少?

滑動視窗的概念

TCP通過滑動視窗的概念來進行流量控制。設想在傳送端傳送資料的速度很快而接收端接收速度卻很慢的情況下,為了保證資料不丟失,顯然需要進行流量控制, 協調好通訊雙方的工作節奏。所謂滑動視窗,可以理解成接收端所能提供的緩衝區大小。TCP利用一個滑動的視窗來告訴傳送端對它所傳送的資料能提供多大的緩 衝區。由於視窗由16位bit所定義,所以接收端TCP 能最大提供65535個位元組的緩衝。由此,可以利用視窗大小和第一個資料的序列號計算出最大可接收的資料序列號。 



滑動視窗本質上是描述接受方的TCP資料報緩衝區大小的資料,傳送方根據這個資料來計算自己最多能傳送多長的資料。如果傳送方收到接受方的視窗大小為0的TCP資料報,那麼傳送方將停止傳送資料,等到接受方傳送視窗大小不為0的資料報的到來。 
關於滑動視窗協議,還有三個術語,分別是: 

視窗合攏:當視窗從左邊向右邊靠近的時候,這種現象發生在資料被髮送和確認的時候。   
 視窗張開:當視窗的右邊沿向右邊移動的時候,這種現象發生在接受端處理了資料以後。   
 視窗收縮:當視窗的右邊沿向左邊移動的時候,這種現象不常發生。   
 TCP就是用這個視窗,慢慢的從資料的左邊移動到右邊,把處於視窗範圍內的資料傳送出去(但不用傳送所有,只是處於視窗內的資料可以傳送。)。這就是視窗 的意義。視窗的大小是可以通過socket來制定的,4096並不是最理想的視窗大小,而16384則可以使吞吐量大大的增加。


  A—————C—————B   
  如上圖,A與B之間建立TCP連線,滑動視窗實現有兩個作用:   

  由於對稱性,只考慮A端傳送視窗和B端接收視窗,有如下兩個作用   

  1。B端來不及處理接收資料(控制不同速率主機間的同步),這時,A通過B端通知的接收視窗而減緩資料的傳送。   
  2。B端來得及處理接收資料,但是在A與B之間某處如C,使得AB之間的整體頻寬效能較差,此時,A端根據擁塞處理策略(慢啟動,加倍遞減和緩慢增加)來更新視窗,以決定資料的傳送。   

與固定大小的滑窗協議相比,TCP採用可變大小的滑窗協議是為了取得更好的效能。   

  TCP是一個廣域網協議,而廣域網環境下的路由器和主機,各自有著不同的效能和處理能力,在這種情況下,採用固定視窗大小的滑窗協議會引起效能上的損失。TCP規定視窗的大小是由接收方通告的,通過採取慢啟動和擁塞避免演算法等機制來使頻寬和效能取得最佳。

報文段

報文(message)是網路中交換與傳輸的資料單元,即站點一次性要傳送的資料塊。它像一個導航一樣。

------------------------------------

簡單來說

------------------------------------

視窗就是緩衝區。為了優化停等協議,所以他現在不是讓你一幀一幀的來了。讓你可以發一串了。

傳輸頻寬不受限制,意思就是傳過去的時間可以忽略不計。

停等協議。

這個報文段的往返時延指的是

------->

<------

訊號過去回來所用的時間是20ms。這個就是有關於停等協議了。只有過去回來,告知傳送端接收端已經接受到這個緩衝區的東西了,傳送端才能繼續傳送。所以傳送端每0.02s會發送一次資料。1秒鐘會發送50次資料。

最大吞吐量,就是一秒鐘可以發多少資料過去。那就是每秒吞吐量=50次*64KB=50次*64*1024B=50次*64*1024*8bit=26214400bit=26.21Mb

最後上個圖 加深理解


藍色的就是視窗,因為通道的頻寬不受限制,所以視窗被傳到底端近似於0s。

而藍色的就是報文段,用於傳送端和接收端之間的停等協議的訊號通知。這個來回需要20ms。報文段就是告訴傳送端,接收端已經收到了視窗。傳送端就很欣慰,於是決定繼續傳送視窗(這裡講的簡單了點,其實是把資料放在了窗口裡)。

最大吞吐量就是一秒鐘可以傳送多少bit啊?上面有講了。值得注意的是1B=8bit,注意換算(B是計算機中的概念,不是網路傳輸中的概念)

相關推薦

網路——滑動視窗吞吐量

設TCP使用的最大視窗為64KB,即64x1024位元組,而傳輸通道的頻寬可認為是不受限制的。若報文段的平均往返時延為20ms,問所能得到的最大吞吐量是多少? 滑動視窗的概念 TCP通過滑動視窗的概念來進行流量控制。設想在傳送端傳送資料的速度很快而接收端接收速度卻很慢的情

劍指offer系列——二叉搜尋樹的第k個結點資料流的中位數滑動視窗

二叉搜尋樹的第k個結點 題目描述 給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8)    中,按結點數值大小順序第三小結點的值為4。 解題思路: 二叉搜尋樹中序遍歷就能排好序,所以中序遍歷到第k個結點就是第k小的結點。 程式

演算法(二十二):滑動視窗

題目描述 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4,4,6,6,6,5}; 針對陣列{2,3,4,2,6,2,5,1}的滑動視窗有以下6個: {[2,

劍指offer---滑動視窗

題目:滑動視窗的最大值 要求:給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。具體見下例: 例如,陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4,4,6,6,6,5}; 6個滑動視窗如下: {[2,3,4],2,6,2,5

劍指offer____滑動視窗

給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4,4,6,6,6,5}; 針對陣列{2,3,4,2,6,2,5,1}的滑動視窗有以下6個: {[2,3,4],2,6,

劍指Offer-66-滑動視窗

專案地址:https://github.com/SpecialYy/Sword-Means-Offer 問題 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大

Leetcode-滑動視窗值_python

239.給定一個數組 nums,有一個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。 返回滑動視窗最大值。 示例: 輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 輸出

劍指offer 64. 滑動視窗

題目描述 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4,4,6,6,6,5}; 針對陣列{2,3,4,2,6,2,5,1}的滑動視窗有以下6個: {[

劍指offer——滑動視窗

概述 題目描述 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4

(劍指offer)滑動視窗

時間限制:1秒 空間限制:32768K 熱度指數:126716 題目描述 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4,4,6,6,6,5}; 針

劍指Offer-59 滑動視窗

題目: 給定一個數組和滑動視窗的大小,請找出所有滑動窗口裡的最大值。 例如,如果輸入陣列[2, 3, 4, 2, 6, 2, 5, 1]及滑動視窗的大小3,那麼一共存在6個滑動視窗,它們的最大值分別為[4, 4, 6, 6, 6, 5]。 注意: 資料保證k大於0,且k小於等於陣列長度。

面試題59-題目一:滑動視窗

/*  * 面試題59-題目一:滑動視窗的最大值  * 題目:給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。  * 例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,  * 他們的最大值分別為{4,4,

劍指offer----滑動視窗

題目描述 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4,4,6,6,6,5}; 針對陣列{2,3,4,2,6,2,5,1}的

【佇列】滑動視窗值序列,帶max函式的佇列

視窗即佇列,本質是一樣的。 面試題59-1:滑動視窗的最大值序列 給定一個數組和滑動視窗的大小,請找出所有滑動窗口裡的最大值。例如,如果輸入陣列{2, 3, 4, 2, 6, 2, 5, 1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,它們的最大值分別為{4

239.滑動視窗

給定一個數組 nums,有一個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。 返回滑動視窗最大值。 示例: 輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 輸出:

面試題72:滑動視窗

題目: 給定一個數組和滑動視窗的大小,請找出所有滑動窗口裡的最大值。 思路: 方法一:暴力法 視窗大小為K,則每次找到一個視窗最大值的時間複雜度為O(K),總時間複雜度:O(NK) 方法二: 仔細觀察,發現視窗滑動其實就是佇列先移出一個元素,再新增一個元素,我們可不可以在這

劍指offer-----滑動視窗值(java版)

一 題目 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4,4,6

滑動視窗值——C++版

題目描述 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3, 那麼一共存在6個滑動視窗,他們的最大值分別為{4,

Leetcode 239 Silding Window Maximum(滑動視窗值)

一,問題描述 1,給定一個整數陣列nums 和一個正整數k的滑動視窗,滑動視窗每次從左到右移動一個數字,返回每次滑動視窗中的最大值。 2,例如: 輸入: nums=[1,3,-1,-3,5,3,6,7] k=3 輸出: 3, 3 ,5,

劍指offer:滑動視窗值(Python)

題目描述 給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{4,4,6,6,6,5}; 針對陣列{2,3,4,2,6,2,5,1}