網路規劃與管理技術第 四章 TCP/IP 協定與分析  上一頁    下一頁

4-6 TCP 協定與分析

內容:

4-6-1 TCP 協定功能

『傳輸控制協定』(Transmission Control Protocol, TCP IP 兩者似乎是連結在一起的同一名稱(TCP/IP),兩者的功能確實是相輔相成。IP 的功能是無論兩部工作站在無遠弗屆的任一個角落,都能將它們連結在一起。TCP 提供網路的服務接點讓應用程式使用,也就是說,提供端點對端點(End-to-End)的連線。主機電腦上有多個應用程式都必須透過網路提供或使用網路服務,TCP 就提供多點服務的連線(虛擬鏈路的多工功能)讓各種應用程式可同時連結到網路上。TCP IP 的關係宛如電話系統中的電話號碼和分機號碼。當我們撥接電話時,將依照電話號碼的位址在廣泛的電話大海之中找到對方,並和其連接完成(IP 功能,各地區的交換機就如網路閘門)。這並不能表示我們已連絡上受話的對方,但最起碼我們也連線到對方的電話機上(IP 已連結到主機上)。欲找到受話的人也許可用人工呼叫,但也可以再撥分機號碼(TCP 的埠口號碼),這表示在主機號碼上再加入分機號碼來表示通訊的個人(TCP 的點對點連線)。人與人之間的對話就像網路上應用程式之間的通訊。

TCP IP 另一個相輔相成的功能是 IP 提供非連接的不可靠傳輸,對於有關可靠傳輸的處理程序就必須仰賴 TCP 來完成。換言之,IP 傳送當中,也許會發生封包損壞、封包遺失、封包重複或次序錯亂等現象,這些情況都必須由 TCP 來負責檢測出,並要求對方重送、重整封包順序等工作。因此,TCP 必須提供連接導向的連線,才能使整個網路通訊達到可靠性的傳輸。重點說明如下:

端點對端點連線 (End-to-End Connection)

提供服務連接埠口(Port)

(1) 0 ~ 1023:著名埠口,如 80/tcp 連接 http Server

(2) 1024 ~ 65535:使用者或動態埠口。

連接導向方式

(1) 虛擬連線建立

(2) 檢視錯誤與遺失封包

4-19 TCP 通訊連線

4-6-2 TCP 封包格式

傳輸層的 TCP/UDP 封包經過 IP 封包包裝,又再經過 Ethernet 訊框包裝後,才發送到網路上,其包裝結構如圖 4-20 所示。

4-20 Ethernet 訊框包裝

        Ethernet 框標頭中,型態(Type)為 0x0800 表示該訊框是承載 IP 封包,又在 IP 封包標頭中,如 Protocol 欄位為 6 表示本封包是承載 TCP 訊息;如 Protocol = 17 則表示承載 UDP 訊息。一般傳送 TCP/IP 訊息,IP 標頭大多不會攜帶特殊訊息(如來源路徑選擇),也沒有選項欄位(Option),因此 IP 標頭佔用 20 位元組長度。TCP 標頭如沒有特殊訊息,也是佔用 20 位元組長度。而一般 UDP 標頭也都是佔用 20 位元組。如下:

Eth.type = 0x0800

Ip.pro = x06

4-21 TCP 的封包格式,各欄位功能如下:

來源埠口(Source Port):來源之 TCP 埠口。

目的地埠口(Destination Port):目的地之 TCP 埠口。

順序編號(Sequence Number):該封包的順序編號。

確認號碼(Acknowledge Number):回應封包的確認號碼,也是期望傳送端下次發送封包的序號,其表示該確認號碼以前的封包都以正常接收。

資料偏移量(Data Offset):因為 TCP Option 欄位長度並非固定,Data Offset 用來表示傳輸資料(Data)是在整個封包之區段起始位址。

位元碼(Code bits):6 位元)(URG, ACK, PSH, TST, SYN, FIN)此欄位作控制訊息傳遞之用。而且目前有關 TCP/IP 網路上的特殊處理工作(如防火牆等等)都是利用這些控制碼來運作。其中:

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

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

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

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

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

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

視窗(Window):此欄位是用來控制封包流量,告訴對方目前本身還有多少緩衝器(Receive Buffer)可以接收封包(滑動視窗法之特性)。如果 Window = 0 表示緩衝器已滿暫停傳送資料。Window 大小的單位是以位元組表示(Byte)。

檢查集(Checksum):此欄位為 16 bits 長的檢查碼,接收方可依此 Checksum 來確定所收封包(資料極表頭)是否正確。

緊急指標(Urgent Point): URG = 1 時,其代表緊急資料是在資料區的什麼位址。

任選欄(Option):目前此欄位只應用於表示接收端能夠接收最大資料區段的大小。如果不使用此欄位,則可以使用任意的資料區段大小。

填補欄位(Padding): Option 欄位補足 32 位元的整數倍。

4-21 TCP 封包格式

4-6-3 TCP 建立連線

Tomlinson1975)提出三向式握手法(Three-way handshake)。其運作的主要原理,就是不管要求訊號或回應訊號都編有序號,尤其回應時必須指明這是回應第幾號要求連線訊息。對於序號的編列不必依照一定的順序,只要能標示出獨立訊息便可以。如圖 4-22 所示,工作站 ATP_A)送出要求連接訊號(Connect RequestCR)並附帶序列號碼  xseq=x);工作站 BTP_B 針對 TP_A 的要求而送出同意連線訊號 Ack(ack=x)),並標示出本回應訊號的序號(seq=y);TP_A 接到 TP_B 的同意連線訊號 Ackseq=y, ack=x),便知道是針對哪一個連線要求的回應,並在傳送一個確認訊號表示連線成功 Ackseq=x, ack=y);TP_B 收到確認訊號也知道針對哪一個連線已連接成功。

4-22 三向握手式連絡法之訊號方式

        因此,TCP 採用三向握手式連絡法(Three-way handshake)來實現連線處理,其中會用到封包內二個序號:Sequence Numberseq)及 Acknowledge Numberack),以及 Code(或稱 Flags)欄位中四個旗標:ACKSYNFIN RST。有三個訊號來建立連線,如下:

(1) 發起者要求連線 發起者發送 TCP 封包,標頭內 SYN = 1,表示要求連線;

(2) 回應者同意連線:回應者如同意連線,則回送 TCP 封包,標頭內 SYN = 1 & ACK = 1,表示同意連線要求;

(3) 發起者確認連線:發起者收到同意連線訊息後,最後確認連線成功則回應 ACK =1

另外,針對上述對話連線,有可能連線經過網路延誤而重新發送訊息,為了確認是針對哪一個對話連線回應,則以 seq = 連線號碼,來表示哪一對話,回應時 ack = seq +1,表示針對哪一個連線號碼回應,並要求傳遞下一個封包序號(滑動視窗法確認方式,詳情請參閱 TCP/IP Internet 網路)

4-23 TCP 建立連線運作程序

翻轉工作室:粘添壽

 

網路規劃與管理技術:

 

 

翻轉電子書系列: