當兩台主機採用TCP協議進行通訊時,在交換資料前將建立串連。通訊完成後,將關閉會話並終止串連。串連和會話機制保障了TCP的可靠性功能。
請參見圖中建立並終止TCP串連的步驟。
主機將跟蹤會話過程中的每個資料區段,並使用TCP前序中的資訊瞭解每台主機所接收到的資料。
每個串連都代表兩股單向通訊資料流或者會話。若要建立串連,主機應執行三向交握。TCP前序中的控制位指出了串連的進度和狀態。
三向交握:
1.確認目的裝置存在於網路上;
2.確認目的裝置有活動的服務,並且正在源用戶端要使用的目的連接埠號碼上接受請求;
3.通知目的裝置源用戶端想要在該連接埠號碼上建立通訊會話。
在TCP串連中,充當用戶端的主機將向伺服器發起該會話。
TCP串連建立的過程分為三個步驟:
1.用戶端向伺服器發送包含初始序列值的資料區段,開啟通訊會話;
2.伺服器發送包含確認值的資料區段,其值等於收到的序列值加1,並加上其自身的同步序列值。該值比序號大1,因為ACK總是下一個預期位元組或二進位八位元。通過此確認值,用戶端可以將響應和上一次發送到伺服器的資料區段聯結起來;
3.發送帶確認值的用戶端響應,其值等於接受的序列值加1。這便完成了整個建立串連的過程。
為了理解三向交握的過程,必須考察兩台主機間交換的不同值。在TCP資料區段前序中,有六個包含控制資訊的1位元欄位,用於管理TCP進程。這些欄位分別是:
URG—緊急指標
ACK—確認欄位
PSH—推送功能
RST—重設串連
SYN—同步序號
FIN—發送方已傳輸完所有資料
這些欄位用作標誌,由於它們都只有1位元大小,所以它們都只有兩個值:1或者0。當值設為1時,表示資料區段中包含控制資訊。
通過4步流程法,可以交換標誌,以終止TCP串連。
TCP三向交握
步驟1:
TCP用戶端發送帶同步序號(SYN)控制標誌設定的資料區段,指示包含在前序中的序號欄位的初始值,用以開啟三向交握。序號的初始值稱為初始序號(ISN),由系統隨機選取,並用於跟蹤會話過程中從用戶端到伺服器的資料流。在會話過程中,每從用戶端向伺服器發送一個位元組的資料,資料區段前序中包含的ISN值就要加1。
,協議分析器的輸出結果中顯示了SYN控制標誌和相應的序號。
SYN控制標誌被置位並且相應的序號設定為0。儘管圖中的協議分析器已顯示了序號和確認號的相應值,但其真實值應該為32位二進位元字。我們可以通過研究Packet Bytes窗格確定資料區段前序中發送的實際數值。此處您可以看到以十六進位顯示的四個位元組。步驟2:
TCP伺服器需要確認從用戶端處收到SYN資料區段,從而建立從用戶端到伺服器的會話。為了達到此目的,伺服器應向用戶端發送帶ACK標誌設定的資料區段,表明確認編號有效。用戶端將這種帶確認標誌設定的資料區段理解為確認資訊,即伺服器已收到從TCP用戶端發出的SYN資訊。
確認編號欄位的值等於用戶端初始序號加1。此時建立從用戶端到伺服器的會話。ACK標誌將在會話其間保持設定。我們在前面已經學過,用戶端和伺服器之間的會話實際上是由兩個單向的交談群組成的:一個是從用戶端到伺服器的會話,另一個則正好相反。在三向交握過程的第二步中,伺服器必鬚髮起從伺服器到用戶端的響應。為開啟會話,伺服器應採用與用戶端同樣的方法使用SYN標誌。該操作設定前序中的SYN控制標誌,從而建立從伺服器到用戶端的會話。SYN標誌表明序號欄位的初始值已包含在前序中,且該值將用於跟蹤會話過程中從伺服器返回用戶端的資料流。
如右圖所示,協議分析器的輸出結果中顯示了ACK和SYN控制標誌的設定,以及相應的序號和確認號。
步驟3:
最後,TCP用戶端發送包含ACK資訊的資料區段,以示對伺服器發送的TCP SYN資訊的響應。在該資料區段中,不包括使用者資料。確認號欄位的值比從伺服器接收的初始序號值大1。一旦在用戶端和伺服器之間建立了雙向會話,該通訊過程中交換的所有資料區段都將包含ACK標誌設定。
,協議分析器的輸出結果中顯示了ACK控制標誌,以及相應的序號和確認號。
通過以下方式,可以加強資料網路的安全性:
拒絕建立TCP會話;
只允許建立特定服務的會話;
只允許已建立會話之間的通訊。
以上安全性原則可以應用於所有TCP會話,也可以僅應用於某些選定會話。
若要關閉串連,應設定資料區段前序中的FIN(結束)控制標誌。為終止每個單向TCP會話,需採用包含FIN資料區段和ACK資料區段的二次握手。因此,若要終止TCP支援的整個會話過程,需要實施四次交換,以終止兩個雙向會話。注意:在本部分中,為了更容易理解,採用了用戶端和伺服器端進行說明。實際上,終止的過程可以在任意兩台完成會話的主機之間展開。
1.當用戶端的資料流中沒有其它要發送的資料時,它將發送帶FIN標誌設定的資料區段;
2.伺服器發送ACK資訊,確認收到從用戶端發出的請求終止會話的FIN資訊;
3.伺服器向用戶端發送FIN資訊,終止從伺服器到用戶端的會話;
4.用戶端發送ACK響應資訊,確認收到從伺服器發出的FIN資訊。
當會話中的用戶端沒有其它要傳輸的資料時,它將在資料區段前序中設定FIN標誌。然後,會話中的伺服器端將發送包含ACK標誌設定的一般資料區段資訊,通過確認號確認已經收到所有資料。當所有資料區段得到確認後,會話關閉。
另一方向的會話採用相同的方式關閉。接收方在資料區段的前序中設定FIN標誌,然後發送到發送方,表明沒有其它需要發送的資料。返回的確認資訊確定已接收所有資料,隨即該方向的會話關閉。
如右圖所示,在資料區段前序中設定了FIN和ACK控制標誌,並從而關閉了HTTP會話。
也可以通過三向交握方式關閉串連。當用戶端沒有其它要傳輸的資料時,它將向伺服器發送FIN資訊。如果伺服器也沒有其它要傳輸的資料,它將發送同時包含FIN和ACK標誌設定的響應資訊,將兩步並作一步。最後,用戶端返回ACK資訊。