TCP連接的三次握手和四次揮手
1、tcp報文格式
序號:Seq序號,占32位,用來標(biāo)識從源端向目的端發(fā)送的字節(jié)流
確認序號:Ack序號,占32位,只有當(dāng)ACK標(biāo)志為1時,該序號才有效,Ack=seq + 1
標(biāo)志位:共六個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下:
????? ? ????? ? (A)URG:緊急指針(urgent pointer)有效。
????????????? ? (B)ACK:確認序號有效。
????????????? ? (C)PSH:接收方應(yīng)該盡快將這個報文交給應(yīng)用層。
????????????? ? (D)RST:重置連接。
????????????? ? (E)SYN:發(fā)起一個新連接。
????????????? ? (F)FIN:釋放一個連接。
2、三次握手
(1)Client向Server發(fā)送同步確認包,將標(biāo)志位SYN=1,發(fā)送序列號seq=j,然后Client變成SYN_SEND狀態(tài)
(2)Server收到之后,發(fā)送SYN+ACK包。將標(biāo)志位ACK=1,確認序列號ack=seq+1。將標(biāo)志位SYN=1,序列號seq=k。然后Server變成SYN_SEND狀態(tài)
(3)Client收到確認后,檢查ack是否為j+1,ACK是否為1,如果正確則將標(biāo)志位ACK置為1,ack=K+1,并將該數(shù)據(jù)包發(fā)送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態(tài),完成三次握手,隨后Client與Server之間可以開始傳輸數(shù)據(jù)了
3、四次揮手
(1)Client發(fā)送FIN包,將FIN標(biāo)志位設(shè)置為1,發(fā)送序列號seq=j,Client進入FIN_WAIT_1狀態(tài)
(2)Server收到該請求后,發(fā)送確認包,將標(biāo)志位ACK設(shè)置為1,發(fā)送確認序列號ack=j+1,Server進入CLOSE_WAIT狀態(tài)。因為Server端此時有可能還有數(shù)據(jù)要發(fā)送,只是給客戶端發(fā)送了我知道你要關(guān)閉了,但是我還有數(shù)據(jù)要發(fā)送。然后可以繼續(xù)發(fā)送數(shù)據(jù)
(3)如果Server端把數(shù)據(jù)發(fā)送完之后,再給客戶端發(fā)送一個FIN包,將FIN標(biāo)志位設(shè)置1,發(fā)送序列號seq=k。然后進入LAST_ACK狀態(tài)。
?(4)Client收到之后,發(fā)送確認包,將標(biāo)志位ACK設(shè)置為1,ack=k+1。隨后雙方進入CLOSED狀態(tài)