章節回顧:
《TCP/IP詳解卷1:協議》第3章 IP:網際協議(1)-讀書筆記
《TCP/IP詳解卷1:協議》第3章 IP:網際協議(2)-讀書筆記
《TCP/IP詳解卷1:協議》第4章 ARP:地址解析協議-讀書筆記
《TCP/IP詳解卷1:協議》第5章 RARP:逆地址解析協議-讀書筆記
《TCP/IP詳解卷1:協議》第6章 ICMP:Internet控制報文協議-讀書筆記
《TCP/IP詳解卷1:協議》第11章 UDP:使用者資料包協議-讀書筆記
《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(1)-讀書筆記
《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(2)-讀書筆記
《TCP/IP詳解卷1:協議》第19章 TCP的互動資料流-讀書筆記
第17章 TCP:傳輸控制協議
1、TCP服務
儘管TCP和UDP都使用相同的網路層(IP),TCP卻嚮應用層提供與UDP完全不同的服務。TCP提供一種面向連線的、可靠的位元組流服務。
(1)面向連線
兩個使用TCP的應用(通常是一個客戶和一個伺服器)在彼此交換資料之前必須先建立一個TCP連線。過程與打電話相似,先撥號振鈴,等待對方摘機說“喂”,然後才說明是誰。
說明:在一個TCP連線中,僅有兩方彼此進行通訊。廣播和多播不能用於TCP。
(2)可靠性
TCP通過下列方式來提供可靠性:
1)應用資料被分割成T C P認為最適合傳送的資料塊。由TCP傳遞給IP的資訊單位稱為報文段或段。
注意:對於UDP,應用程式產生的資料包長度將保持不變。
2)當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
3)當TCP收到發自TCP連線另一端的資料,它將傳送一個確認。這個確認不是立即傳送,通常將推遲幾分之一秒。
4)TCP將保持它的首部和資料檢驗和。這是一個端到端的檢驗和,如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。
5)因為TCP報文段是作為IP資料包來傳輸的,而IP資料包的到達可能會失序,所以TCP報文段的到達也可能會失序。如果必要,TCP將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用層。
6)因為IP資料包會發生重複,所以TCP的接收端必須丟棄重複的資料。
7)TCP提供流量控制。TCP連線的每一方都有固定大小的緩衝區。TCP的接收端只允許另一端傳送其緩衝區所能接納的資料。可防止較快主機致使較慢主機的緩衝區溢位。
說明:
1)兩個應用程式通過TCP連線交換8 bit構成的位元組流。TCP不在位元組流中插入記錄識別符號。將這稱為位元組流服務。
2)假設一方的應用程式先傳10位元組,又傳20位元組,再傳50位元組,連線的另一方將無法瞭解發方每次傳送了多少位元組。收方可以分4次接收這80個位元組,每次接收20位元組。
3)TCP對位元組流的內容不作任何解釋,它不知道傳輸的資料位元組流是二進位制資料、ASCII字元、EBCDIC字元或其他型別資料。由TCP雙方的應用層對位元組流進行解釋。
2、TCP首部
TCP資料被封裝在一個IP資料包中,如圖17-1所示。
圖17-2顯示TCP首部的資料格式。如果不計選項欄位,它通常是20個位元組。
TCP首部欄位說明:
(1)TCP段包含的源端和目的端埠號,是用於尋找發端和收端應用程式。
說明:源端和目的端埠號加上源端IP地址和目的端IP地址唯一確定一個TCP連線。
(2)序號用來標識從TCP發端向收端傳送的資料位元組流。如果將位元組流看作是在兩個應用程式間的單向流動,則TCP用序號對每個位元組進行計數。序號是32 bit的無符號數,到達2^32-1後又從0開始。
說明:TCP為應用層提供全雙工服務。這意味著資料能在兩個方向上獨立進行傳輸。所以,連線的每一端必須保持每個方向上的傳輸資料序號。
(3)當建立一個新的連線時,SYN標誌置1。
(4)因為每個傳輸的位元組都被計數,確認序號包含傳送確認的一端所期望收到的下一個序號,即確認序號是上次已成功收到資料位元組序號加1。
注意:只有ACK標誌為1時確認序號欄位才有效。
(5)傳送ACK無需任何代價,因為32 bit的確認序號欄位和ACK標誌一樣,總是TCP首部的一部分。因此,一旦一個連線建立起來,這個欄位總是被設定,ACK標誌也總是被設定為1。
(6)首部長度給出首部中32 bit字的數目。需要這個值是因為任選欄位的長度是可變的。這個欄位佔4 bit,因此TCP最多有60位元組的首部(32bit*(2^4-1))。如果沒有選項欄位,正常的長度是20位元組。
(7)TCP首部中有6個標誌位元,它們中的多個可同時被設定為1。含義為:
1)URG 緊急指標有效。
2)ACK 確認序號有效。
3)PSH 接收方應該儘快將這個報文段交給應用層。
4)RST 重建連線。
5)SYN 同步序號用來發起一個連線。
6)FIN 發端完成傳送任務。
(8)TCP的流量控制由連線的每一端通過宣告的視窗大小來提供。視窗大小為位元組數,起始於確認序號欄位指明的值,這個值是接收端期望接收的位元組。視窗大小是一個16 bit欄位,因而視窗大小最大為65535位元組。
(9)檢驗和覆蓋了整個TCP報文段包括TCP首部和TCP資料。這是一個強制性的欄位,一定是由發端計算和儲存,並由收端進行驗證。
說明:TCP檢驗和的計算與UDP檢驗和的計算相似,使用一個偽首部。
(10)只有當URG標誌置1時緊急指標才有效。緊急指標是一個正的偏移量,和序號欄位中的值相加表示緊急資料最後一個位元組的序號。TCP的緊急方式是傳送端向另一端傳送緊急資料的一種方式。
(11)最常見的選項欄位是最長報文大小,又稱為MSS (Maximum Segment Size)。每個連線方通常都在通訊的第一個報文段(為建立連線而設定SYN標誌的那個段)中指明這個選項。它指明本端所能接收的最大長度的報文段。
(12)TCP報文段中的資料部分是可選的。例如:一個連線建立和終止時,雙方交換的報文段僅有TCP首部。在處理超時的許多情況中,也會傳送不帶任何資料的報文段。
小結:
(1)TCP提供了一種可靠的面向連線的位元組流運輸層服務。
(2)TCP將使用者資料打包構成報文段;它傳送資料後啟動一個定時器;另一端對收到的資料進行確認,對失序的資料重新排序,丟棄重複資料;TCP提供端到端的流量控制,並計算和驗證一個強制性的端到端檢驗和。
(3)許多流行的應用程式如Telnet、Rlogin、FTP和SMTP都使用TCP。
第18章 TCP連線的建立與終止
1、引言
TCP是一個面向連線的協議。無論哪一方向另一方傳送資料之前,都必須先在雙方之間建立一條連線。
2、連線的建立與終止
(1)建立連線協議
如果18-3所示,為了建立一條TCP連線:
1)請求端(客戶)傳送一個SYN段指明客戶打算連線的伺服器的埠,以及初始序號(ISN,例子中為1415531521),如報文1。
2)伺服器發回包含伺服器的初始序號的SYN報文段(報文段2)作為應答。同時,將確認序號設定為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將佔用一個序號。
3)客戶必須將確認序號設定為伺服器的ISN加1以對伺服器的SYN報文段進行確認(報文段3)。
這三個報文段完成連線的建立,這個過程也稱為三次握手。
說明:
1)傳送第一個SYN的一端將執行主動開啟,接收這個SYN併發回下一個SYN的另一端執行被動開啟。
2)當一端為建立連線而傳送它的SYN時,它為連線選擇一個初始序號。ISN隨時間而變化,因此每個連線都將具有不同的ISN。
(2)終止連線
終止一個連線要經過4次握手。這是由TCP的半關閉造成的。
說明:
1)因為TCP是全雙工的(資料在兩個方向上能同時傳遞),因此每個方向必須單獨進行關閉。原則是:當一方完成它的資料傳送任務後傳送一個FIN來終止這個方向連線。當一端收到一個FIN時,它必須通知應用層另一端已經終止了那個方向的資料傳送。
注意:傳送FIN通常是應用層進行關閉的結果。
2)收到一個FIN只意味著在這一方向上沒有資料流動。
注意:一個TCP連線在收到一個FIN後仍能傳送資料,這對利用半關閉的應用來說是可能的,儘管在實際應用中只有很少的TCP應用程式這樣做。
圖18-4顯示了終止一個連線的典型握手順序。
傳送FIN將導致應用程式關閉它們的連線,這些FIN的ACK是由TCP軟體自動產生的。
說明:上面內容包括《TCP/IP詳解卷1:協議》第17章內容以及18章的一點內容(TCP連線的建立與終止),18章還有部分內容分析各種連線問題,內容較多,明天才能總結出來。