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

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

我們知道,TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,需要三次握手建立連接,而終止一個連接要經過四次揮手。

三次握手

第一次握手:客戶端申請連接(SYN=1),發送seq=x的數據包,等待服務器確認。
第二次握手:服務器端申請連接(SYN=1),確認收到客戶端的申請(ACK=1).;服務器期望下次收到x+1數據包(ack=x+1),發送seq=y的數據包。
第三次握手:客戶端確認收到請求(SYN=1),發送服務器期望的數據包(y+1),完成連接。
TCP協議的三次握手和四次揮手

四次揮手

第一次揮手:客戶端請求斷開連接(FIN=1),發送數據(seq=u)。
第二次揮手:確認收到請求(ACK=1),期望收到數據包(ack=u+1),發送數據(seq=v)。
第三次揮手:服務器申請斷開連接(FIN=1),確認收到你之前的請求(ACK=1);期望收到數據(ack=u+1),發送數據(seq=w)。
第四次揮手:確認收到請求(ACK=1),發送數據(seq=u+1),斷開連接。
TCP協議的三次握手和四次揮手

爲什麼需要三次握手?

   如果不採用“三次握手”,那麼只要服務器發出確認,新的連接就建立了。由於現在客戶端並沒有發出建立連接的請求,因此不會理睬服務器的確認,也不會向服務器發送ACK包,但是服務端確認爲新的連接開始了,等待客戶端發數據,這樣就會白白浪費資源。而經過三次握手,客戶端和服務器都有應有答,這樣可以確保TCP正確連接。

爲什麼需要四次揮手?

  在TCP建立連接時,服務器端的SYN和ACK向客戶端發送是一次性發送的,而在斷開連接的過程中,服務器端向客戶端端發送的ACK和FIN是是分兩次發送的。因爲在服務器端接收到客戶端的FIN後,客戶端可能還有數據要傳輸,所以先發送ACK,等客戶端處理完自己的事情後就可以發送FIN斷開連接了。

爲什麼四次揮手後有2MSL的時間等待?

   MSL(Maximum Segment Lifetime),最大報文段生存時間,2個MSL是報文段發送和接收的最長時間。假定網絡不可靠,那麼第四次發送的ACK可能丟失,即服務器端無法收到這個ACK,如果服務器端收不到這個確認ACK,服務器端會定時向客戶端重複發送FIN,直到服務器端收到客戶端的確認ACK。所以這個2MSL就是用來處理這個可能丟失的ACK的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章