天天看點

TCP連接配接詳解

一個tcp連接配接的建立需要進行三次握手:

1.發送端發送一個SYN=1,ACK=0标志位資料包給接收端,請求進行連接配接,這是第一次握手;

2.接收端收到請求并且允許連接配接的話,就會發送一個SYN=1,ACK=1标志的資料包給發送端,告訴它,可以通訊了,并且讓發送端發送一個确認資料包,這是第二次握手;

3.最後,發送端發送一個SYN=0,ACK=1的資料包給接收端,告訴它連接配接已被确認,這就是第三次握手。之後,一個TCP連接配接建立,開始通訊。

4.

标志解釋:

SYN:同步标志

同步序列編号(Synchronize Sequence Numbers)欄有效。該标志僅在三次握手建立TCP連接配接時有效。它提示TCP連接配接的服務端檢查序列編号,該序列編号為TCP連接配接初始端(一般是用戶端)的初始序列編号。在這裡,可以把 TCP序列編号看作是一個範圍從0到4,294,967,295的32位計數器。通過TCP連接配接交換的資料中每一個位元組都經過序列編号。在TCP報頭中的序列編号欄包括了TCP分段中第一個位元組的序列編号。

ACK:确認标志

确認編号(Acknowledgement Number)欄有效。大多數情況下該标志位是置位的。TCP報頭内的确認編号欄内包含的确認編号(w+1,Figure-1)為下一個預期的序列編号,同時提示遠端系統已經成功接收所有資料。

RST:複位标志

複位标志有效。用于複位相應的TCP連接配接。

URG:緊急标志

緊急(The urgent pointer) 标志有效。緊急标志置位,

PSH:推标志

該标志置位時,接收端不将該資料進行隊列處理,而是盡可能快将資料轉由應用處理。在處理 telnet 或 rlogin 等互動模式的連接配接時,該标志總是置位的。

ECE: 顯示擁塞提醒回應

CWR: 擁塞視窗減少

FIN:結束标志

帶有該标志置位的資料包用來結束一個TCP回話,但對應端口仍處于開放狀态,準備接收後續資料。

//------------------------------------------------------------------------------------------

它們的含義是:SYN表示建立連接配接,FIN表示關閉連接配接,ACK表示響應,PSH表示有 DATA資料傳輸,RST表示連接配接重置。其中,ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連接配接之後的響應,如果隻是單個的一個SYN,它表示的隻是建立連接配接。TCP的幾次握手就是通過這樣的ACK表現出來的。但SYN與FIN是不會同時為1的,因為前者表示的是建立連接配接,而後者表示的是斷開連接配接。RST一般是在FIN之後才會出現為1的情況,表示的是連接配接重置。一般地,當出現FIN包或RST包時,我們便認為用戶端與伺服器端斷開了連接配接;而當出現SYN和SYN+ACK包時,我們認為用戶端與伺服器建立了一個連接配接。PSH為1的情況,一般隻出現在 DATA内容不為0的包中,也就是說PSH為1表示的是有真正的TCP資料包内容被傳遞。TCP的連接配接建立和連接配接關閉,都是通過請求-響應的模式完成的。

tcp斷開連接配接要進行四次握手

由于TCP連接配接是全雙工的,是以每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料發送任務後就能發送一個FIN來終止這個方向的連接配接。收到一個 FIN隻意味着這一方向上沒有資料流動,一個TCP連接配接在收到一個FIN後仍能發送資料。首先進行關閉的一方将執行主動關閉,而另一方執行被動關閉。

(1)用戶端A發送一個FIN,用來關閉客戶A到伺服器B的資料傳送(封包段4)。

(2)伺服器B收到這個FIN,它發回一個ACK,确認序号為收到的序号加1(封包段5)。和SYN一樣,一個FIN将占用一個序号。

(3)伺服器B關閉與用戶端A的連接配接,發送一個FIN給用戶端A(封包段6)。

(4)用戶端A發回ACK封包确認,并将确認序号設定為收到序号加1(封包段7)。

[img]http://dl.iteye.com/upload/attachment/236769/2fade014-c22c-3725-afa7-0afa8b4d06d0.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/236772/a422cf9b-c915-37e7-ab88-6da36ca252bd.jpg[/img]

繼續閱讀