電腦網路與連結技術第十三章 TCP/IP 與 Internet 連結技術 上一頁    下一頁

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 網路上的特殊處理工作(如防火牆等等)都是利用這些控制碼來運作。其中:

      • URGUrgent):表示該封包為緊急資料,並使 Urgent Point 欄位有效。

      • ACKAcknowledge):本封包有回應確認功能,其確認 Acknowledge Number 欄位中所指定的順序號碼。

      • PSHPush):請求對方立即傳送 Send Buffer 中的封包。

      • RSTReset):要求對方立即結束連線(強迫性)。發送者已斷線。

      • SYNSynchronous):通知對方要求建立連線(TCP 連線)。

      • FINFinish):通知對方,資料以傳輸完畢,是否同意斷線。發送者還在連線中等待對方回應。

(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 ~ 65535216),我們採用兩種配置方式:『固定配置埠』(Static Allocated Port)和『動態配置埠』(Dynamically Allocated Port)。將 0 ~ 1023 之位置配置給固定的應用程式(或常用伺服器)使用,使一般用戶連接時不必特別去記憶連接埠的位置,稱之為固定配置埠。例如,當使用者連接到某一主機(163.15.2.1)上的 Web Server80),只要連接上 http://163.15.2.1,便自動連結到 Web Server,而不用輸入 http://163.15.2.1:80。我們節錄一些較常用的著名埠(Well-known)位置如表 13-3。動態配置埠是當應用程式需要連線時,才由系統動態地配置出,其埠號碼範圍為 1024 ~ 65535,但某些位置如被特別指定連線使用(如 8080),就不可以再重複配置。

  13-3 著名服務的埠號碼(節錄)

埠號碼

服務名稱

傳輸協定

應用服務說明

0

保留

 

 

1

tcpmux

TCP

TCP port 服務多處理

7

Echo

TCP/UDP

回應測試

11

systat

TCP

系統狀態顯示

15

netstat

TCP

網路狀態顯示

20

ftp-data

TCP

FTP 資料傳輸埠

21

ftp

TCP

FTP 控制埠

23

telnet

TCP

Telnet 遠端登入埠

25

smtp

TCP

Simple Mail Transfer Protocol

37

time

TCP/UDP

Time Server

42

name

UDP

Name Server

43

whois

TCP

是誰、nickname(別名)

53

domain

TCP/UDP

Domain Name ServerDNS

79

finger

TCP

尋找使用者

80

http

TCP

Web Server

109

pop-2

TCP

Post Office Protocol

119

nntp

TCP

Network News Transfer Protocol

123

ntp

TCP

Network Time Protocol

13-6-3 TCP 連線管理

TCP 是連接導向的傳輸方式,對於連線管理來說,顯得特別重要。TCP 採用『三向握手式連絡法』(Three-way handshake)來實現連線處理方式,其中會用到封包內二個序號:Sequence Numberseq Acknowledge Numberack,以及 Code 欄位中四個旗標:ACKSYNFIN RST。以下分別介紹各種連線情況的處理方式:(基本原理請參考第五章)

建立連線

        13-26 為三向握手式連絡法的連線建立圖,所謂三向握手式是表示有三個訊號來建立連線:(1) SYNAB)表示A B 要求連線;(2) SYN&ACKBA)為 B 回應給 A,表示同意或不同意連線要求;(3) ACKAB)表示 A 確認收到 B 的回應。另外, seq 表示要求連線的封包號碼;ack = seq +1 表示確認 seq 封包,並要求傳遞下一個封包序號(滑動視窗法確認方式)。

13-26 TCP 建立連線運作程序

(A) 資料傳送

        TCP 連線中的資料流量控制也是採用滑動視窗法(Sliding Window)(請參閱 3-4-2 節說明),錯誤偵測技巧是採用檢查集(Checksum)的方法(請參閱 3-5-2 節說明)。Sequence Numberseq 表示該封包的順序號碼(滑動視窗法中的 N(S))、Acknowledge Numberack)為期望對方發送的封包順序號碼(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, UDPUDP 傳輸協定比 TCP簡單,沒有連線要求、連線終止、以及流量控制的管理程序。它的優點是傳輸速率較快,主要應用於較少量與即時性傳輸,但對資料正確性的要求較不高(如語音或視訊)。而其缺點則是無法提供正確性較高的資料傳輸。採用 UDP 傳輸可能會有資料重覆、資料未依序到達、資料遺失等等問題,必須由使用者自行解決。倘若上層應用軟體可自行驗證資料正確性的情況下,可考慮使用 UDP(如 RIPDNS 之應用)傳輸。UDP 之封包格式如圖 13-29 所示,各欄位功能也如同 TCP 格式,不另再贅言。

13-29 UDP 之封包格式

翻轉工作室:粘添壽

 

電腦網路與連結技術:

 

 

翻轉電子書系列: