電腦網路與連結技術第三章 鏈路層 上一頁    下一頁

3-4 流量控制

內容:

3-4-1 流量控制簡介

當兩端的鏈路層建立好通訊連線後,雙方也協議出使用連接導向的通訊服務,下一個問題是,兩端如何利用通訊連線傳送資料?而雙方該如何管理資料訊框在通訊連線上的流動,才會使通訊連線產生最高效率?這些都屬於『流量控制』(Flow Control)的問題。

流量控制除了管理資料在通訊連線上傳輸的順序外,還牽涉到傳送端和接收端緩衝器多寡的管理問題。當電腦欲傳送資料時,將資料依每次傳送封包大小,依序填入『傳送緩衝器』內。當傳送端將資料封包傳送出去後,可能必須經過一段時間後才能到達接收端,接收端是否正常收到資料?該如何回應給傳送端?如果發生問題怎樣重送?傳送端必須確認該訊號已正常傳送完畢,才可將資料封包由傳送緩衝器上刪除,因此在大量連續傳送資料時,傳送緩衝器就必須很大。同樣的,在接收端也必須有一個『接收緩衝器』,接收到資料後判斷資料正常便填入緩衝器內,但因為通訊連線的時間也許很長,每一筆資料封包到達的時間不一定相同,且到達的資料封包不一定按照原來的封包順序,也可能在一串的封包內其中有幾個封包發生錯誤。因此有幾個封包是重新傳送?有幾個封包是重複傳送?都必須等接收端將接收緩衝器內的封包按序號排列完成,才可傳送給上層通訊軟體,所以接收緩衝器有可能要很大。當然由技術層面來講,不論傳送緩衝器或接收緩衝器都不可能無限的擴充,我們希望流量控制的技術能儘量減少緩衝器的需求,而如何重複使用緩衝器以減低緩衝器需求也是流量控制項目之一。一般流量控制有兩種基本方法:

    • 停止與等待法(Stop-and-Wait Method

    • 滑動視窗法(Sliding Window Method

多數通訊協定(軟體)都有流量控制機制,也都以上述兩種方法為基礎,至於會採用哪一種,則必須視使用環境而定。以下分別介紹這兩種方法。

3-4-2 停止與等待法

停止與等待』(Stop-and-Wait)的重點在於傳送端將訊息送出後,必須等待接收端回應,再決定是否繼續傳送下一筆資料。如果回應接收正常(Ack),便再傳送下一筆資料;如果逾時未收到回應或收到回應不確認訊息(Nak),則需重新傳送該筆資料,其動作順序如圖 3-9 所示。

3-9 停止與等待流量控制

由圖 3-9 我們可以發現在停止與等待法中,通訊雙方花費太多的等待時間(大部分時間都在等待對方回應)。但因其處理方法簡單,一般近距離(回應時間較短)或要求快速反應的設備大部分採用此方法。而且傳送和接收雙方只要一個緩衝器便可,一般使用在主機電腦內、或電腦機房內各處理設備之間資料的傳輸,至於長距離傳輸則較不適合。(如 Bluetooth 便採用此方法)

3-4-3 滑動視窗法

當建立連線後,我們希望能充分利用連線來傳輸資料(連接導向服務),如果採用停止與等待方法,通訊連線大部分時間都是空閒著,傳輸效率太差。『滑動視窗法』(Sliding Window可連續傳送多筆資料,接收端只要回應目前已正確接收到第幾筆資料,一次確認多筆資料,網路上便可連續傳送多筆資料,提高網路的使用率。

3-10 滑動視窗法

首先我們用圖 3-10 來說明滑動視窗法的大略運作方式,圖 3-10 是以一般區域網路網路卡的動作為例子(其它層次也都類似),運作如下:首先將資料(如10Mbits)分割成若干個固定大小的訊框(如4 Kbits),並不全部送給傳送器(一般都是網路卡),因傳送器上記憶體容量可能不夠。又傳送器將本身也將記憶體依照訊框大小分割成若干個容器,稱之為『傳送緩衝器』(Send Buffers。首先主機將欲傳送的訊框依順序填入傳送器的傳送緩衝器,傳送器再就緩衝器資料一一傳送到網路上,傳送成功後清除緩衝器上的資料,再請求主機電腦(中斷CPU)再填入待傳的資料,一直到資料傳送完畢為止。

另外,接收端的接收器(網路卡)也將本身的記憶體分割成和訊框大小相同的若干個容器,稱之為『接收緩衝器』(Received Buffers。接收器接收到訊框後便填入接收緩衝器,如果有連續訊框接收正常,便要求(一般採用中斷方式)主機電腦(CPU)來讀取,再清除緩衝器預備接收下一筆訊框。同時還要傳送一個確認訊息給傳送端,表示已正確地接收到幾個訊框,請傳送端繼續發送訊框。

如果通訊雙方都可以同時接收和傳送訊框,那麼雙方都必須具有傳送緩衝器和接收緩衝器。如圖 3-10 所示,工作站 A 的傳送緩衝器對應工作站 B 的接收緩衝器,反之亦然。以下我們分為幾個步驟來介紹滑動視窗法的運作原理。

(A) 傳送視窗與接收視窗

首先我們來介紹什麼是視窗』(Window?其實視窗不過是緩衝記憶體的排列方式。不論傳送緩衝器或接收緩衝器都必須重複使用,如果記憶體以直線序列(Linear Array)排列,如圖 3-11 (a) 所示,資料封包只能由前端填入,由後端取出,記憶體緩衝器就必須不停往後延伸。因此,我們必須將緩衝器之記憶體的前頭和後尾銜接,成為環狀序列(Ring Array),以此構成視窗的形狀。以圖 3-11(a) 傳送緩衝器為例,假設有 8 個緩衝器,並由 CPU 填入訊框號碼 202122 23 等四個訊框。如果我們將其建構成環狀序列,如圖 3-11 (b) 所示,序列中有兩個指標(Pointer):『前端指標』(Front Pointer『後端指標』(Rear Pointer。前端指標指向可由 CPU 填入訊框的位置,當 CPU 繼續填入訊框時,指標就一直往前滑動。另外,後端指標則指向將發送到網路上的訊框位置,每發送一個訊框,指標就往前滑動一個緩衝器。CPU 不停的填入;而發送器也不斷的將訊框發送到網路上,兩個指標也就不停的滑動,因此稱之為『滑動視窗法』(Sliding Window

3-11 傳送視窗之緩衝器結構

3-12 接收視窗之緩衝器結構

3-12 (a) 為接收緩衝器的直線序列排列架構,我們同樣假設緩衝器大小為 80 ~ 7),如將其排列成環狀序列,便成為圖 3-12 (b) 的接收視窗。接收視窗的前端指標是由網路上接收到訊框之後往前滑動;後端指標是 CPU 讀取訊框後往前滑動。如果接收器已由網路上接收到號碼為 30 ~ 33 4 個訊框,它的滑動方向如圖 3-12 (b) 所示。

(B) 訊框順序編號

在鏈路層的訊框格式(其他層次也相同)裡包含兩個序號:

    • N(S):表示目前傳送訊框的序號。

    • N(R):表示期望對方下次傳送過來的訊框序號,也表示該序號以前的訊框都已正常接收。

3-13 序號 N(S) N(R) 之功能

我們用圖 3-13 來說明 N(S) N(R) 的運用情形,假設連線雙方(DL_A DL_B)都以全雙工方式相互傳遞訊框。首先 DL_A 發送序號為 20 N(S) = 20)的訊框給 DL_B,並期望 DL_B 下次傳送 31 號訊框給它(N(R) = 31),這表示 31 號以前的訊框(302928、)都已正常接收。DL_B 收到 DL_A 所傳送訊框後,便瞭解 30 號以前的訊框對方都已正常接收。再傳送第 31 號訊框,並要求對方下次傳送第 21 號訊框(N(S) = 31N(R) = 21),即告訴 DL_A 你的 20 號訊框我也正常接收了。由上得知,N(R) 帶有確認的功能。雙方可連續傳送多筆訊框,再回覆 N(R) 表示某號碼以前的訊框已正常接收。因此在滑動視窗法中,通訊雙方可以連續傳送多筆資料,不像停止與等待法一次只能傳送一個訊框。

滑動視窗的大小是相對應的緩衝器空間。如果以 128 個視窗為例,每個訊框為 4 K Bytes,其緩衝器記憶體空間是 512 KBytes。連同傳送和接收緩衝器就必須具有 1 Mbytes 的空間。視窗號碼和封包序號沒有絕對的關係,因為訊框是動態不停的填入緩衝器;而視窗號碼是固定的緩衝器空間。

一般通訊協定都將訊框序號(N(S))以亂數號碼(Random Number)來累進計算,並非一定由 0 開始計算。回應序號(N(R))是依照對方的 N(S) 來計算(如,加一)回應。一般通訊協定都以 16 8 位元來代表訊框訊號。

(C) 滑動視窗範例

我們用圖 3-14 來說明滑動視窗運作的範例。首先假設滑動視窗為 0 ~ 7,表示有 8 個緩衝器。但最多僅能使用到 7 個緩衝器,才不至於使前端和後端指標相重疊。假設目前 DL_A 預備由 20 號訊框開始發送;而 DL_B 30 號開始。以前所傳送之訊框都已確認成功,所有緩衝器(7 個)都空閒。我們用下列 a ~ f 步驟來描述它的運作情形:

(1) DL_A 發送 20 21 號訊框給 DL_B,對方並將其填入接收視窗內。同時DL_A 要求對方傳遞 30 號訊框,表示以前訊框(292827)都已正常接收。

(2) DL_B 發送 30 31 號訊框給 DL_A,並確認 22 號以前訊框(N(R) = 22DL_A 收到 N(R) = 22,知道之前所傳 20 21 對方已收到,便剔除這兩個訊框,後端指標滑動兩格。而同一時間內 DL_A CPU(或上層通訊軟體)再填入 2 個訊框(2526)到傳送視窗,也使前端指標向前滑動兩格。

(3) DL_A 傳送三個訊框(222324),其中 23 號遺失DL_B 發現訊框沒有依照順序到達,缺少 23 號。另DL_B CPU 又填入 2 個訊框(3536)至傳送視窗。

(4) DL_B 傳送 32 號訊框,同時要求對方重新傳送 23 N(R) = 23)。

(5) DL_A 重送 23 號訊框,並確認 32 號訊框DL_B 收到 N(R) = 33 便刪除傳送視窗的 31 32,並滑動傳送視窗。另一方面,將 N(S) = 23 訊框填入接收視窗,產生 222324 連續序號,便將這三個訊框傳給 CPU(或上層通訊軟體),再將接收視窗滑動三格。

(6) DL_B 連續傳送四個訊框(33 ~ 36),並確認對方 24 號以前訊框(N(R) = 25DL_A 收到 N(R) = 25 後便將 22 ~ 23 訊框刪除,並滑動視窗 3 個位置。並將所收的 4 個訊框填入接收視窗內。

3-14 滑動視窗範例

翻轉工作室:粘添壽

 

電腦網路與連結技術:

 

 

翻轉電子書系列: