1. 程式人生 > >TCP的三次握手,四次揮手詳解

TCP的三次握手,四次揮手詳解

三次握手
為了準確無誤的將資料傳送到指定IP,TCP協議採用了三次握手

1 客戶端向服務端提出請求,內容帶有syn標識,隨機序列x

2 服務端向客戶端迴應請求,內容帶有syn和ack標識,隨機序列y,確認序列x+1

3 客戶端向服務端確認請求,內容帶有ack,隨機序列x+1,確認序列y+1

完成三次握手

 

三次握手總結:

客戶端向服務端傳送一個帶有syn標識的資料包,服務端回用一個帶有synack標識的資料包,最後客戶端向服務端傳送一個ack標識的資料包,三次握手完成

三次握手圖如下: 

四次揮手
四次揮手是用來斷開伺服器和客戶端之間的通訊的,之所以要斷開連線,是因為TCP/IP 協議是要佔用埠號的,而計算機的埠卻是有限的,不進行斷開的話,會造成計算機資源的浪費。

客戶端向服務端提出請求,標識帶有fin和ackseq=xack=y

服務端向客戶端迴應請求,標識帶有ack,seq=yack=x+1

服務端向客戶端迴應請求,標識帶有fin和ackseq=yack=x+1

客戶端向服務端確認請求,標識帶有ack,seq=x+1ack=y+1

 

四次揮手總結:

客戶端向服務端傳送一個帶有fin和ack標識的資料包,服務端先會用一個帶有ack標識的資料包,等待資料傳輸完成,服務端在傳送一個帶有finack標識的資料包,最後客戶端向服務端傳送一個

帶有ack標識的資料包,四次揮手完成


四次揮手圖如下:

注:

  三次握手為什麼不能改成兩次握手?


解:三次握手中的每一次都是必須的。如果是兩次握手,在第二次結束後,伺服器並不能保證客戶端已經收到了第二次的請求,如此一來的話,伺服器會一直儲存著這個通訊過程,因為TCP通訊都是要佔用埠的,造成了一定的資源浪費。所以,就一定要讓客戶端來發送ACK的確認請求。

  關閉的時候為什麼會是四次揮手?
解:四次揮手不能像三次握手一樣,三次握手可以將ACK+SYN 一起傳送,ACK用於確認資訊,SYN卻是用來建立聯機的;四次揮手中ACK是不能和FIN一起傳送,ACK只是告訴客戶端確認我收到了,等我將資料傳送完畢之後會向其傳送FIN的標誌,所以四次揮手是不能夠改變的。