網路規劃與管理:TCP 協定與分析 - 翻轉工作室
文章推薦指數: 80 %
TCP 提供網路的服務接點讓應用程式使用,也就是說,提供端點對端點(End-to-End)的連線。
主機電腦上有多個應用程式都必須透過網路提供或使用網路服務,TCP 就提供多點服務 ...
網路規劃與管理-CCNA技術彙集:第四章TCP/IP協定與分析 上一頁 下一頁
翻轉工作室:粘添壽
4-5TCP協定與分析
4-5-1TCP協定功能
『傳輸控制協定』(TransmissionControlProtocol,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-EndConnection)
●提供服務連接埠口(Port):
(1)0~1023:著名埠口,如80/tcp連接httpServer。
(2)1024~65535:使用者或動態埠口。
●連接導向方式
(1)虛擬連線建立。
(2)檢視錯誤與遺失封包。
圖4-19TCP通訊連線
4-5-2TCP封包格式
傳輸層的TCP/UDP封包經過IP封包包裝,又再經過Ethernet訊框包裝後,才發送到網路上,其包裝結構如圖4-20所示。
圖4-20Ethernet訊框包裝
在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的封包格式,各欄位功能如下:
●來源埠口(SourcePort):來源之TCP埠口。
●目的地埠口(DestinationPort):目的地之TCP埠口。
●順序編號(SequenceNumber):該封包的順序編號。
●確認號碼(AcknowledgeNumber):回應封包的確認號碼,也是期望傳送端下次發送封包的序號,其表示該確認號碼以前的封包都以正常接收。
●資料偏移量(DataOffset):因為TCP的Option欄位長度並非固定,DataOffset用來表示傳輸資料(Data)是在整個封包之區段起始位址。
●位元碼(Codebits):(6位元)(URG,ACK,PSH,TST,SYN,FIN)此欄位作控制訊息傳遞之用。
而且目前有關TCP/IP網路上的特殊處理工作(如防火牆等等)都是利用這些控制碼來運作。
其中:
(1)URG(Urgent):表示該封包為緊急資料,並使UrgentPoint欄位有效。
(2)ACK(Acknowledge):本封包有回應確認功能,其確認AcknowledgeNumber欄位中所指定的順序號碼。
(3)PSH(Push):請求對方立即傳送SendBuffer中的封包。
(4)RST(Reset):要求對方立即結束連線(強迫性),且發送者已斷線。
(5)SYN(Synchronous):通知對方要求建立連線(TCP連線)。
(6)FIN(Finish):通知對方,資料已傳輸完畢,是否同意斷線。
發送者還在連線中等待對方回應。
●視窗(Window):此欄位是用來控制封包流量,告訴對方目前本身還有多少緩衝器(ReceiveBuffer)可以接收封包(滑動視窗法之特性)。
如果Window=0表示緩衝器已滿暫停傳送資料。
Window大小的單位是以位元組表示(Byte)。
●檢查集(Checksum):此欄位為16bits長的檢查碼,接收方可依此Checksum來確定所收封包(資料極表頭)是否正確。
●緊急指標(UrgentPoint):當URG=1時,其代表緊急資料是在資料區的什麼位址。
●任選欄(Option):目前此欄位只應用於表示接收端能夠接收最大資料區段的大小。
如果不使用此欄位,則可以使用任意的資料區段大小。
●填補欄位(Padding):將Option欄位補足32位元的整數倍。
圖4-21TCP封包格式
4-5-3TCP建立連線
Tomlinson(1975)提出三向式握手法(Three-wayhandshake)。
其運作的主要原理,就是不管要求訊號或回應訊號都編有序號,尤其回應時必須指明這是回應第幾號要求連線訊息。
對於序號的編列不必依照一定的順序,只要能標示出獨立訊息便可以。
如圖4-22所示,工作站A(TP_A)送出要求連接訊號(ConnectRequest,CR)並附帶序列號碼 x(seq=x);工作站B(TP_B)針對TP_A的要求而送出同意連線訊號(Ack(ack=x)),並標示出本回應訊號的序號(seq=y);TP_A接到TP_B的同意連線訊號Ack(seq=y,ack=x),便知道是針對哪一個連線要求的回應,並在傳送一個確認訊號表示連線成功Ack(seq=x,ack=y);TP_B收到確認訊號也知道針對哪一個連線已連接成功。
圖4-22三向握手式連絡法之訊號方式
因此,TCP採用三向握手式連絡法(Three-wayhandshake)來實現連線處理,其中會用到封包內二個序號:SequenceNumber(seq)及AcknowledgeNumber(ack),以及Code(或稱Flags)欄位中四個旗標:ACK、SYN、FIN和RST。
有三個訊號來建立連線,如下:
(1)發起者要求連線:發起者發送TCP封包,標頭內SYN=1,表示要求連線;
(2)回應者同意連線:回應者如同意連線,則回送TCP封包,標頭內SYN=1&ACK=1,表示同意連線要求;
(3)發起者確認連線:發起者收到同意連線訊息後,最後確認連線成功則回應ACK=1。
另外,針對上述對話連線,有可能連線經過網路延誤而重新發送訊息,為了確認是針對哪一個對話連線回應,則以seq=連線號碼,來表示哪一對話,回應時ack=seq+1,表示針對哪一個連線號碼回應,並要求傳遞下一個封包序號(滑動視窗法確認方式,詳情請參閱TCP/IP與Internet網路)。
圖4-23TCP建立連線運作程序
4-5-4TCP擷取與分析-Wireshark
(A)系統分析
欲擷取TCP連線封包很容易,網路應用系統大多採用TCP協定,吾人在Windows上瀏覽某一網站(www.tsnien.idv.tw),再擷取httpd封包即可。
圖4-24TCP封包擷取網路
(B)擷取工具
此實習題目,需要用到下列工具:
█Wireshark網路封包分析器(安裝於Windows7)
█Windows上瀏覽www.tsnien.idv.tw網頁。
(C)擷取封包步驟
(1)開啟Wireshark:
█擷取條件:host192.168.1.102(windowsIP)、
█顯示篩選條件:tcp、
█再選擇介面卡,如下:
(2)Windows上瀏覽www.tsnien.idv.tw網頁。
(3)在Wireshark視窗按暫停。
(D)TCP協定分析
(D-1)客戶端建立連線封包
由上圖中第13封包是客戶端要求建立連線的封包。
各欄位分析如下:(僅說明重要欄位,其他請自行比較參考)
█IP封包標頭,如下:
●Source:192.168.1.102
●Destination:120.118.165.191(www.tsnien.idv.tw)
●Protocol:TCP
█TCP封包標頭,如下:
●SourcePort:50699
●DestinationPort:80
●SequenceNumber:0
●AcknowledgeNumber:0
●Flags:0x002(SYN)(客戶端要求連線)
●Windowsizevalue0:64240
(D-2)伺服端回應同意連線封包:
第41封包是伺服端同意連線的封包。
各欄位分析如下:(僅說明重要欄位,其他請自行比較參考)
█IP封包標頭,如下:
●Source:120.118.165.191(www.tsnien.idv.tw)
●Destination:192.168.1.102
●Protocol:TCP
█TCP封包標頭,如下:
●SourcePort:80
●DestinationPort:50699
●SequenceNumber:0
●AcknowledgeNumber:1
●Flags:0x012(SYN,ACK)(伺服端同意連線)
(D-3)客戶端確認連線成功:
第43封包是客戶端確認連線成功。
各欄位分析如下:(僅說明重要欄位,其他請自行比較參考)
█IP封包標頭,如下:
●Source:192.168.1.102
●Destination:120.118.165.191(www.tsnien.idv.tw)
●Protocol:TCP
█TCP封包標頭,如下:
●SourcePort:50699
●DestinationPort:80
●SequenceNumber:1
●AcknowledgeNumber:1
●Flags:0x010(ACK)(客戶端確認連線成功)
4-5-5TCP擷取與分析–PacketTracer
(A)系統分析
欲擷取TCP連線封包很容易,網路應用系統大多採用TCP協定,吾人在PC瀏覽某一網站,再擷取httpd封包即可。
(B)網路規劃
吾人利用PacketTracer設計一個簡單網路,包含有三個PC電腦,期望網路環境如下:
網路區段
Gateway/DNS
名稱
IP位址
連接埠口
192.168.0.0/
255.255.255.0
192.168.0.254/
168.95.1.1
PC0
192.168.0.1
HUB(Fa0)
Http_Server
192.168.0.250
HUB(Fa5)
因此,我們需要在PacketTracer上選擇下列裝置:
(1)Hub-PT:模擬集線器(Hub)一只。
提供PC電腦之間連線。
(2)PC-PT:模擬PC主機一只。
PC0主機使用。
(3)Server-PT:模擬伺服器主機一只。
開啟HTTPService,如下:
(4)規劃網路如下:(請下載TCP封包擷取.pkt)
(C)網路設定
█集線器Hub不需任何設定。
█PC0與PC2須設定相關網路參數,如下(如PC0):Gateway=192.168.0.254、DBSServer=168.95.1.1、IPAddress=192.168.0.1、SubnetMask=255.255.255.0。
█Http_Service:Gateway=192.168.0.254、DBSServer=168.95.1.1、IPAddress=192.168.0.250、SubnetMask=255.255.255.0。
(D)擷取封包步驟
(1)步驟1:PacketTracer採用Simulation模式,編輯EditFilters,點選TCP,表示只擷取TCP封包。
(2)步驟2:再由PC0上瀏覽Http_Server網頁:(點選PC0->Desktop->WebBrowser)
(3)步驟3:在packetTracer上按『AutoCapture/Play』暫停。
(E)TCP協定分析
(1)步驟1:在PacketTracer按『AutoCapture/Play』,則可觀察到擷取到TCP的封包。
(2)步驟2:分析『客戶端建立連線』(Seq=1)封包標頭,如下:
●SourcePort=1030、DestinationPort=80。
●SeqNum=0、AckNum=0。
●Flags=0b000010(0x02)(Syn=1)。
(3)步驟3:分析『伺服端同意連線』(Seq=1、Ack=1)封包標頭,如下:
●SourcePort=80、DestinationPort=1030。
●SeqNum=0、AckNum=1。
●Flags=0b010010(0x12)(Ack=1&Syn=1)。
(4)步驟4:分析『客戶端確認連線』(Ack=1)封包標頭,如下:
●SourcePort=1030、DestinationPort=80。
●SeqNum=1、AckNum=1。
●Flags=0b010000(0x10)(Ack=1)。
延伸文章資訊
- 1傳輸控制協定- 維基百科,自由的百科全書
TCP窗口縮放選項
- 2TCP 和UDP 是什麼:簡單的說明
TCP(通訊控制協定)和UDP(用戶資料包協定)都是網際網路中常見的協定,它們負責在網際網路將資料從設備傳輸到伺服器。當您使用Skype 聊天、發送電子郵件 ...
- 3網路規劃與管理:TCP 協定與分析 - 翻轉工作室
TCP 提供網路的服務接點讓應用程式使用,也就是說,提供端點對端點(End-to-End)的連線。主機電腦上有多個應用程式都必須透過網路提供或使用網路服務,TCP 就提供多點服務 ...
- 4第十章TCP協定
課前指引. TCP與UPD協定的運作行為不同,UDP是未經過與對方的連線,便直接將資料傳. 送出去,傳送過程也不經過與對方確認是否收到;反之,TCP是一個完整的協.
- 5實驗八TCP協定分析
封包交換傳輸協定,因為TCP協定主要是用在. 網路不可靠的時候完成通信,對於軍方可能特. 别有用,但是以目前來說,對於政府部門以及. 商業單位也非常適合。