TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務离福,采用三次握手建立一個連接溅呢,如圖1所示澡屡。
(1)第一次握手:建立連接時,客戶端A發(fā)送SYN包(SYN=j)到服務器B咐旧,并進入SYN_SEND狀態(tài)挪蹭,等待服務器B確認。
(2)第二次握手:服務器B收到SYN包休偶,必須確認客戶A的SYN(ACK=j+1)梁厉,同時自己也發(fā)送一個SYN包(SYN=k),即SYN+ACK包踏兜,此時服務器B進入SYN_RECV狀態(tài)词顾。
(3)第三次握手:客戶端A收到服務器B的SYN+ACK包,向服務器B發(fā)送確認包ACK(ACK=k+1)碱妆,此包發(fā)送完畢肉盹,客戶端A和服務器B進入ESTABLISHED狀態(tài),完成三次握手疹尾。
完成三次握手上忍,客戶端與服務器開始傳送數(shù)據(jù)。
確認號:其數(shù)值等于發(fā)送方的發(fā)送序號 +1(即接收方期望接收的下一個序列號)纳本。
關閉連接:
由于TCP連接是全雙工的窍蓝,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數(shù)據(jù)發(fā)送任務后就能發(fā)送一個FIN來終止這個方向的連接繁成。收到一個?FIN只意味著這一方向上沒有數(shù)據(jù)流動吓笙,一個TCP連接在收到一個FIN后仍能發(fā)送數(shù)據(jù)。首先進行關閉的一方將執(zhí)行主動關閉巾腕,而另一方執(zhí)行被動關閉面睛。
CP的連接的拆除需要發(fā)送四個包,因此稱為四次揮手(four-way handshake)尊搬∪客戶端或服務器均可主動發(fā)起揮手動作,在socket編程中佛寿,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作幌墓。
(1)客戶端A發(fā)送一個FIN,用來關閉客戶A到服務器B的數(shù)據(jù)傳送。
(2)服務器B收到這個FIN克锣,它發(fā)回一個ACK茵肃,確認序號為收到的序號加1。和SYN一樣袭祟,一個FIN將占用一個序號验残。
(3)服務器B關閉與客戶端A的連接,發(fā)送一個FIN給客戶端A巾乳。
(4)客戶端A發(fā)回ACK報文確認您没,并將確認序號設置為收到序號加1。
TCP采用四次揮手關閉連接如圖2所示胆绊。
圖2??TCP四次揮手關閉連接