tcp協(xié)議的三次握手和四次揮手
先來解釋下為什么連接的時候是三次握手,而關(guān)閉的時候卻是四次揮手呢?
答 : 這是因為服務(wù)端在LISTEN狀態(tài)下,收到建立連接請求的SYN報文后,把ACK和SYN放在一個報文里發(fā)送給客戶端。而關(guān)閉連接時,當(dāng)收到對方的FIN報文時,僅僅表示對方不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù),己方也未必全部數(shù)據(jù)都發(fā)送給對方了,所以己方可以立即close,也可以發(fā)送一些數(shù)據(jù)給對方后,再發(fā)送FIN報文給對方來表示同意現(xiàn)在關(guān)閉連接,因此,己方ACK和FIN一般都會分開發(fā)送。
三次握手的過程:
有點類似于兩個人之間的電話通信

對應(yīng)客戶端和服務(wù)端之間的通信:

step1:
建立連接時,客戶端發(fā)送SYN包到服務(wù)器,其中包含客戶端的初始序號seq = x ,進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn).
step2:
服務(wù)器收到請求后,必須確認(rèn)客戶的數(shù)據(jù)包. 同時自己也發(fā)送一個SYN包,即SYN+ACK包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài)
step3:
客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送一個序列號(seq = x + 1),確認(rèn)號為ack(客戶端) = y + 1,此包發(fā)送完畢,客戶單和服務(wù)器進(jìn)入ESTAB_LISHED(TCP連接成功)狀態(tài),完成三次握手.
四次揮手過程(關(guān)閉客戶端到服務(wù)器的連接):

step1:
Client發(fā)送一個FIN,用來關(guān)閉Client到Server的數(shù)據(jù)傳送,Client進(jìn)入FIN_WAIT_1狀態(tài)。
step2:
Server收到FIN后,發(fā)送一個ACK給Client,確認(rèn)序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進(jìn)入CLOSE_WAIT狀態(tài)。
step3:
Server發(fā)送一個FIN,用來關(guān)閉Server到Client的數(shù)據(jù)傳送,Server進(jìn)入LAST_ACK狀態(tài)。
step4:
Client收到FIN后,Client進(jìn)入TIME_WAIT狀態(tài),接著發(fā)送一個ACK給Server,確認(rèn)序號為收到序號+1,Server進(jìn)入CLOSED狀態(tài),完成四次揮手。


浙公網(wǎng)安備 33010602011771號