1. 程式人生 > >學習筆記-TCP的三次握手四次揮手

學習筆記-TCP的三次握手四次揮手

TCP的三次握手四次揮手

形象的理解是建立連線的時候進行三次通訊,斷開連線的時候進行4次通訊

建立連線的三次通訊

第一次

客戶端------>服務端

客戶端傳送請求到服務端,此時客戶端並不確定自己的傳送功能是否正常,接收功能也不確定

服務端接收到客戶端的請求之後

服務端能夠確定的是:客戶端的傳送功能正常,自己的接收功能正常

此時服務端並不確定的是:自己的傳送功能是否正常,客戶端的接收功能是否正常

因此需要進行確認

第二次

服務端----->客戶端

服務端向客戶端傳送請求

如果客戶端收到請求

那麼客戶端能夠確認的是:自己的傳送功能正常,自己的接收功能正常,服務端的接收功能正常,服務端的傳送功能正常

講道理客戶端就已經確認完成所有功能正常了,那麼此時服務端還沒有,因為服務端傳送請求給客戶端之後服務端並沒有確認自己的的傳送功能能否正常使用,因此還需要等待客戶端傳送確認訊息

第三次

客戶端----->服務端

雖然客戶端能夠確認一切功能正常,那麼服務端還沒有,所以客戶端再次傳送請求給服務端,服務端接收到請求後服務端就確認自己傳送的訊息客戶端已經收到了,那麼就說明自己傳送功能正常

通過三次相互通訊就保證了客戶端和服務端都能夠確認對方的收發送功能均處於正常狀態

四次揮手(斷開連線請求):

當客戶端需要斷開連線的時候同樣需要客戶端和服務端雙方都確認對方已經斷開連線,根據三次握手的原則,這裡也確實是只需要三次就相互確認了,但是實際上是傳送了四次

第一次

客戶端----->服務端

當客戶端想要斷開的時候就向著服務端傳送請求,一旦客戶端傳送這個斷開連線請求後,客戶端就不能再主動傳送任何資料,那麼客戶端則需要進行等待服務端的確認

第二次

服務端----->客戶端

服務端在接收到客戶端的資料之後會發送確認資訊給客戶端,表明客戶端已經接收到了服務端的斷開連線請求,但是這裡還不能直接同意斷開,因為服務端以前傳送的資料可能還在參與運算,這種運算還沒有結束,需要將這些事務處理完成之後再發送一次請求

第三次

服務端----->客戶端

服務端將資料處理完成之後再次傳送一個請求,表示已經處理完成,同意斷開連線

第四次

客戶端----->服務端

在客戶端收到兩次服務端的回覆後客戶端可以確認的是客戶端已經收到了自己的斷開連線請求,並且服務端已經將自己的事務處理完成並同意斷開連線

這次傳送是客戶端底層被動傳送確認資訊,因為客戶端在第一次傳送的時候就已經沒有傳送資料的功能了,所以這裡是系統的自動答覆

需要注意的是並不是客戶端傳送完這次請求之後就立即斷開,而是需要等2MSL時間後斷開

MSL時間:

MSL時間表示從客戶端傳送請求到服務端的單邊最長用時

這裡等待2MSL表示一個來回,其意義在於,如果自己在收到客戶端兩次請求後傳送的確認請求並不一定服務端就收到了

對於服務端而言在傳送完第三次確認請求之後就會進入等待2MSL狀態,如果在這個時間之內沒有收到客戶端的第四次請求,則表明自己傳送的第三次請求客戶端沒有收到,那麼服務端會再次傳送第三次請求

那麼對於客戶端而言,等待2MSL的意義在於,如果自己傳送的第4次請求服務端沒有收到,則服務端一定會再次傳送第三次請求,自己一定會再次接收到第三次請求,如果自己在2MSL的時間內還沒有收到服務端傳送的第三次請求,則表表明服務端已經收到了自己傳送的第四次請求

所以之所以一定要等待2MSL,意義就在於能夠確保資訊一個來回的時間足夠雙方都確認

一旦2MSL時間沒有收到伺服器的第三次請求,那麼客戶端就直接關閉