13-6 TCP 與 UDP 協定
13-6-1 TCP 封包格式 『傳輸控制協定』(Transmission Control Protocol, TCP)和 IP 兩者似乎是連結在一起的同一名稱(TCP/IP),兩者的功能確實是相輔相成。IP 的功能是無論兩部工作站距離多遠,都能透過 IP 技術連結在一起。TCP 提供網路的服務接點讓應用程式使用,也就是說,提供端點對端點(host-to-host)的連線。主機電腦上可能有多個應用程式需要透過網路服務,TCP 就提供多點服務的連線(虛擬鏈路的多工功能)讓各種應用程式可同時連結到網路上。TCP 和 IP 的關係宛如電話系統中的電話號碼和分機號碼。當我們撥接電話時,將依照電話號碼的位址在廣泛的電話大海之中找到對方,並和其連接完成(IP 功能,各地區的交換機就如網路閘門)。這並不能表示我們已連絡上受話的對方,但最起碼我們也連線到對方的電話機上(IP 已連結到主機上)。欲找到受話的人也許可用人工呼叫,或是再撥分機號碼(TCP 的埠口號碼),就像是在主機號碼上再加入分機號碼來表示通訊的個人(TCP 的點對點連線)。而人與人之間的對話就像網路上應用程式之間的通訊。(傳輸層技術請參考本書第五章) TCP 和 IP 另一個相輔相成的功能是由 IP 提供非連接的不可靠傳輸,至於有關可靠傳輸的處理程序就必須仰賴 TCP 來完成。換言之,IP 傳送當中,也許會發生封包損壞、封包遺失、封包重複或次序錯亂等現象,這些情況都必須由 TCP 來負責檢測出,並要求對方重送、重整封包順序等工作。因此,TCP 必須提供連接導向的連線,才能使整個網路通訊達到可靠性的傳輸。本節將依此介紹 TCP 之特性,首先介紹 TCP 的封包格式,如圖 13-24 所示,各欄位功能如下: (1) 來源埠口(Source Port):來源之 TCP 埠口。 (2) 目的地埠口(Destination Port):目的地之 TCP 埠口。 (3) 順序編號(Sequence Number):該封包的順序編號。(滑動視窗法中的 N(S)) (4) 確認號碼(Acknowledge Number):回應傳送封包的確認號碼,也是期望傳送端下次發送封包的序號,其表示該確認號碼以前的封包都以正常接收。(滑動視窗法中的 N(R)) (5) 資料偏移量(Data Offset):因為 TCP 的 Option 欄位長度並非固定,Data Offset 用來表示傳輸資料(Data)是在整個封包之區段起始位址。 (6) 位元碼(Code bits):(6 位元)(URG, ACK, PSH, TST, SYN, FIN)此欄位作控制訊息傳遞之用。而且目前有關 TCP/IP 網路上的特殊處理工作(如防火牆等等)都是利用這些控制碼來運作。其中:
(7) 視窗(Window):此欄位是用來控制封包流量,告訴對方目前本身還有多少緩衝器(Receive Buffer)可以接收封包(滑動視窗法之特性)。如果 Window = 0 表示緩衝器已滿暫停傳送資料。Window 大小的單位是位元組(Byte)。 (8) 檢查集(Checksum):對整個封包(資料和表頭)作檢查集檢查的檢查碼。 (9) 緊急指標(Urgent Point):如 URG = 1 時,其代表緊急資料是在資料區的什麼位址。 (10) 任選欄(Option):目前此欄位只應用於表示接收端能夠接收最大資料區段的大小。如果不使用此欄位,則可以使用任意的資料區段大小。 (11) 填補欄位(Padding):將 Option 欄位補足 32 位元的整數倍。 圖 13-24 TCP 封包格式 13-6-2 TCP 埠口 『TCP 埠口』(TCP Port) 是 TCP 連線中虛擬鏈路的邏輯編號,讓應用層的應用軟體可透過埠口位置銜接上網路。TCP 埠口是利用 16 位元表示,理論上可以提供 65536(= 216)個連接埠。TCP 埠口和 IP 之連線是多工處理的關係(如圖 13-25 所示),至於虛擬鏈路之間如何選擇處理次序,可依照作業系統的程序排程(Scheduling)管理,例如,分時系統(Time sharing system)以時間分割或循環點名法(Round-robin)來輪流處理,或即時系統(Real-time system)以優先權較高的連線優先處理。對於每一個連接埠口都給予唯一的編號(如 2020),如圖 13-25 裡程式A 連接之位址為 163.15.2.1:2020,表示在 IP 位址為 163.15.2.1(宛如電話號碼) 的主機之第 2020 連接埠(宛如分機號碼)。程式1 的連結位址為 163.15.4.5:8080,程式設計者或網路使用者只要記住這個位址,就可以連絡到程式1,而不必知道(也很難知道)連線之間所經過何種網路,或它在全世界的哪一個角落。 圖 13-25 TCP 與 IP 之連線關係 TCP port 的編號範圍為0 ~ 65535(216),我們採用兩種配置方式:『固定配置埠』(Static Allocated Port)和『動態配置埠』(Dynamically Allocated Port)。將 0 ~ 1023 之位置配置給固定的應用程式(或常用伺服器)使用,使一般用戶連接時不必特別去記憶連接埠的位置,稱之為固定配置埠。例如,當使用者連接到某一主機(163.15.2.1)上的 Web Server(80),只要連接上 http://163.15.2.1,便自動連結到 Web Server,而不用輸入 http://163.15.2.1:80。我們節錄一些較常用的著名埠(Well-known)位置如表 13-3。動態配置埠是當應用程式需要連線時,才由系統動態地配置出,其埠號碼範圍為 1024 ~ 65535,但某些位置如被特別指定連線使用(如 8080),就不可以再重複配置。 表 13-3 著名服務的埠號碼(節錄)
13-6-3 TCP 連線管理 TCP 是連接導向的傳輸方式,對於連線管理來說,顯得特別重要。TCP 採用『三向握手式連絡法』(Three-way handshake)來實現連線處理方式,其中會用到封包內二個序號:Sequence Number(seq)及 Acknowledge Number(ack),以及 Code 欄位中四個旗標:ACK、SYN、FIN 和 RST。以下分別介紹各種連線情況的處理方式:(基本原理請參考第五章) 建立連線 圖 13-26 為三向握手式連絡法的連線建立圖,所謂三向握手式是表示有三個訊號來建立連線:(1) SYN(A→B)表示A 向 B 要求連線;(2) SYN&ACK(B→A)為 B 回應給 A,表示同意或不同意連線要求;(3) ACK(A→B)表示 A 確認收到 B 的回應。另外, seq 表示要求連線的封包號碼;ack = seq +1 表示確認 seq 封包,並要求傳遞下一個封包序號(滑動視窗法確認方式)。 圖 13-26 TCP 建立連線運作程序 (A) 資料傳送 TCP 連線中的資料流量控制也是採用滑動視窗法(Sliding Window)(請參閱 3-4-2 節說明),錯誤偵測技巧是採用檢查集(Checksum)的方法(請參閱 3-5-2 節說明)。Sequence Number(seq) 表示該封包的順序號碼(滑動視窗法中的 N(S))、Acknowledge Number(ack)為期望對方發送的封包順序號碼(N(R)),也確認該序號以前的封包都已正常接收。 傳送開始的 Sequence Number 是由亂數(Random Number)產生。圖 13-27 為 User_A 傳送資料給 User_B 的資料流動控制程序。其中 data_length 表示每次封包內所傳送的資料位元組數量。我們要特別強調封包序號的計算是以資料位元組(byte)為單位,而不是以傳送次數為單位。因此,回應確認序號是 ack = seq + data_length。 圖 13-27 TCP 資料傳送運作方式 (B) 連線終止 TCP 連線使用連接導向與雙向傳輸模式,遇到要處理連線終止的問題就會變得比較麻煩。可能出現一端已經傳輸完畢,而另一端卻還要傳送資料的問題,因此雙方必須協議好才可以終止連線。圖 13-28 為連線終止的運作程序,首先 User_A 傳送完資料並告訴 User_B 工作已完成,且準備終止連線(FIN = 1)。User_B 必須詢問上層通訊軟體是否還要繼續通訊,如上層回應同意終止連線,User_B 再告訴 User_A 確實可以終止連線。為了防止封包遺失或溢時傳送,雙方請求或回應封包都以封包序號(N(S) 及 N(R))作為確認基準。 圖 13-28 TCP 終止連線運作程序
13-6-4 UDP 協定 TCP/IP 網路除了提供可靠性服務的 TCP 連接外,也提供非連接方式傳輸,稱之為『使用者電報傳輸協定』(User Datagram Protocol, UDP)。UDP 傳輸協定比 TCP簡單,沒有連線要求、連線終止、以及流量控制的管理程序。它的優點是傳輸速率較快,主要應用於較少量與即時性傳輸,但對資料正確性的要求較不高(如語音或視訊)。而其缺點則是無法提供正確性較高的資料傳輸。採用 UDP 傳輸可能會有資料重覆、資料未依序到達、資料遺失等等問題,必須由使用者自行解決。倘若上層應用軟體可自行驗證資料正確性的情況下,可考慮使用 UDP(如 RIP、DNS 之應用)傳輸。UDP 之封包格式如圖 13-29 所示,各欄位功能也如同 TCP 格式,不另再贅言。 圖 13-29 UDP 之封包格式 |
翻轉工作室:粘添壽
電腦網路與連結技術:
翻轉電子書系列:
|