tcp協議的三次握手和四次揮手

先來解釋下爲何鏈接的時候是三次握手,而關閉的時候倒是四次揮手呢?服務器

  答 : 這是由於服務端在LISTEN狀態下,收到創建鏈接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉鏈接時,當收到對方的FIN報文時,僅僅表示對方再也不發送數據了可是還能接收數據,己方也未必所有數據都發送給對方了,因此己方能夠當即close,也能夠發送一些數據給對方後,再發送FIN報文給對方來表示贊成如今關閉鏈接,所以,己方ACK和FIN通常都會分開發送。spa

 

三次握手的過程:3d

有點相似於兩我的之間的電話通訊blog

 

對應客戶端和服務端之間的通訊:開發

 

 step1:請求

  創建鏈接時,客戶端發送SYN包到服務器,其中包含客戶端的初始序號seq = x ,進入SYN_SENT狀態,等待服務器確認.  im

step2:通信

  服務器收到請求後,必須確認客戶的數據包. 同時本身也發送一個SYN包,即SYN+ACK包,此時服務器進入SYN_RECV狀態數據

step3:客戶端

  客戶端收到服務器的SYN+ACK包,向服務器發送一個序列號(seq = x + 1),確認號爲ack(客戶端) = y + 1,此包發送完畢,客戶單和服務器進入ESTAB_LISHED(TCP鏈接成功)狀態,完成三次握手.

 

四次揮手過程(關閉客戶端到服務器的鏈接):

 

 step1:

  Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。

step2:

  Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。

step3:

  Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。

step4:

  Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。

相關文章
相關標籤/搜索