1.17k likes | 1.27k Views
Chapter 12 傳輸控制通訊協定. 目標. 本章結束後,您將能夠: 可以去列舉並了解 TCP 所提供的服務 了解 TCP 的流量控制、錯誤控制、及壅塞控制 熟悉 TCP 區段中的各欄位 了解預接式連線的各階段 了解 TCP 的狀態轉換圖 熟悉 TCP 的選項. 12.1 TCP 的服務. 我們先看看有哪些應用層的程序使用 TCP 所提供的服務。. 本節所討論的主題包括:. 程序對程序的通訊 串流傳送服務 全雙工通訊 預接式服務 可靠性服務. 範例 1.
E N D
目標 本章結束後,您將能夠: • 可以去列舉並了解 TCP 所提供的服務 • 了解 TCP 的流量控制、錯誤控制、及壅塞控制 • 熟悉 TCP 區段中的各欄位 • 了解預接式連線的各階段 • 了解 TCP 的狀態轉換圖 • 熟悉 TCP 的選項
12.1 TCP的服務 我們先看看有哪些應用層的程序使用 TCP 所提供的服務。 本節所討論的主題包括: • 程序對程序的通訊 • 串流傳送服務 • 全雙工通訊 • 預接式服務 • 可靠性服務
範例1 就我們在第11章所說的,在 UNIX 系統中,公認埠號被儲存在 /etc/services的這個檔案中。檔案中的每一行給予某個服務的名稱及對應的公認埠號。我們可以使用grep 的系統工具來擷取指定應用所對應的那一行或多行的資料。下面顯示FTP 的埠號:
12.2 TCP的特色 前面章節已經提過 TCP 所提供的服務,而我們會在本節中簡短的概述一下 TCP 的幾項特點。 本節所討論的主題包括: • 編號系統 • 流量控制 • 錯誤控制 • 壅塞控制
請注意: 每條連線所傳送的位元組都被 TCP 編號, 第一個號碼是由亂數產生而來。
範例2 想像某一 TCP 連線傳送一個5,000 位元組的檔案。第一個位元組號碼為10,001,如果資料被分成 5個區段送出,每個區段各自攜帶1,000 個位元組,請問每一個區段的序號為何? 解答 以下是每個區段的序號:
請注意: 區段序號欄的值就是該區段的 第一個位元組資料編號。
請注意: 區段的回應欄之值定義預期接收的 下一個位元組,其回應號碼是累計的。
12.3 區段 在 TCP 中的一個封包稱為一個區段 ( segment )。 本節所討論的主題包括: • 格式 • 封裝
請注意: TCP 的檢查碼機制是強制執行的。
12.4 TCP 連線 TCP屬於預接式 ( connection-oriented )的傳輸協定,它在來源端與目的端之間建立一條虛擬路徑,所有屬於相同訊息的區段,就依這條虛擬路徑傳送。預接式的傳輸需要以下三個階段:連線的建立、資料的傳輸、及連線的結束。 本節所討論的主題包括: • 連線的建立 • 資料的傳輸 • 連線的結束
請注意: SYN區段並沒有攜帶任何的資料, 但是它會消耗 1 個序號。
請注意: SYN+ACK區段並沒有攜帶任何的資料, 但是它也會消耗 1 個序號。
請注意: ACK區段並沒有攜帶任何的資料, 它也不會消耗任何的序號。
請注意: 如果FIN區段沒有攜帶任何的資料時, 它只會消耗 1 個序號。
請注意: 如果FIN+ACK區段沒有攜帶任何的資料時, 它只會消耗 1 個序號。
12.5 狀態轉換圖 要把連線建立、結束、及資料傳送等各種可能發生的事件追蹤的很好,TCP 軟體是以有限狀態機 ( finite state machine )的方式實現。 本節所討論的主題包括: • 範例
請注意: 一般情況下,MSL 的值介於 30 秒到 1 分鐘之間。
12.6 流量控制 流量控制 ( flow control )用來管控來源端在收到目的端回應之前能夠送出的資料量。TCP 定義了一個窗口在緩衝器中,這個緩衝器儲存了已經從應用程式傳遞過來,並準備好要被傳送的資料。 本節所討論的主題包括: • 滑動窗口協定 • 傻瓜視窗症候群
請注意: 滑動窗口讓傳輸更有效率, 也用來控制資料的流量, 接收端不會因為接收太多的資料而無法消化, TCP 的滑動窗口是以位元組為計算單位。
範例3 如果接收端 ( B 主機 ) 擁有一個5,000位元組大的緩衝器,並且已接收 1,000 個位元組的資料但還沒有處理。請問A 主機之接收端窗口 ( rwnd )的值為何? 解答 rwnd = 5,000 – 1,000 = 4,000。B 主機在它的緩衝器滿出來之前還可以接收 4,000 個位元組。B 主機會將這個值公布在下一個要傳給 A 的區段中。
範例4 如果 rwnd 的值為3,000個位元組,而 cwnd 的值為 3,500個位元組,請問 A 主機之窗口大小為何? 解答 窗口大小為 rwnd 和 cwnd 中較小的那個值,所以等於 3,000 個位元組。
範例5 • 圖12.21 說明了一個虛構的滑動窗口之範例。 • 傳送端已經傳送到第 202 號的位元組資料。我們假設 cwnd 等於 20 ( 實際上這個值可能等於上千個位元組 )。 • 接收端已經傳送一個 200 號的回應號碼,以及 9 個位元組的 rwnd ( 實際上這個值可能等於上千個位元組 )。 • 傳送端窗口大小為 rwnd 和 cwnd 中較小的那個值,所以等於 9 個位元組。 • 第 200 到 202 號的位元組資料已經傳送,但是尚未被回應。第 203 到 208 號的位元組資料可以被傳送,而不需要擔心有關回應與否。第 209 號以上的位元組資料還不能被傳送。
範例 6 在圖12.21中,傳送端接收到一個封包,此封包內含有 202 號的回應號碼及 rwnd=9 等資訊。主機已經將 203、204 和205 號的位元組資料傳送出去。cwnd 的值仍然是 20,請說明新的窗口情況。 解答 圖12.22 說明了新的窗口。注意,在這種情況下,窗口左邊所關閉的位元組個數與右邊所開啟的位元組個數是相同的,窗口的大小並沒有被更動。而 202 號的回應號碼表示第 200和 201 號的位元組資料已經被接收,傳送端不需要再去擔心它們了,窗口可以滑過它們了。