三次握手四次揮手是tcp協議中的,在說三次握手四次揮手先說一下tcp協議和udp協議,
(1)我們常用的網路通信如瀏覽網頁、軟體聊天、看的愛奇藝上的視頻都是通過tcp、udp這兩種協議來進行資料傳輸的;
(2)tcp、udp協議都是作業在傳輸層,他們的目標是在程式間傳輸資料
(3)tcp、udp協議之間最大的區別:tcp是基于連接的,udp是基于非連接的,基于非連接就相當于寫信,基于連接就相當于打電話,

tcp有三個關鍵的步驟:三次握手、傳輸確認、四次揮手
(1)三次握手:

三次握手是建立連接的程序,當客戶端向服務端發起連接時會先發一包連接請求資料,過去詢問一下:能否與你建立連接,這包資料被稱為SYN包;如果對方同意建立連接,則回復一包SYN+ACK包;客戶端收到后回復一包ACK包,連接建立,因為這次程序互相發送了三包資料,成為三次握手,
為什么要三次握手而不是兩次握手(當服務端發送完SYN+ACK包就建立連接)?
這是為了防止因為已失效的請求報文突然又傳到服務器引起錯誤,本質上說,三次握手就是為例解決網路信道不可靠的問題,為了在不可靠的信道上建立可靠連接,

四次揮手:

處于連接狀態的客戶端和服務端都可以發起關閉連接請求,需要四次揮手來進行連接關閉,假設客戶端發起連接關閉請求,它需要向服務端發送一包FIN包,表示要關閉連接,自己進入關閉等待1狀態,這是第一次揮手;服務端收到FIN包,發送一包ACK包,表示自己進入了關閉等待狀態,客戶端進入關閉等待2狀態,這是第二次揮手;服務端此時還可以發送未發送的資料,而客戶端還可以接受資料,待服務端發送完資料之后,發送一包FIN包,進入最后確認狀態,只是第三次揮手;客戶端收到之后回復ACK包,進入超時等待狀態,經過超時時間后關閉連接,客戶端收到ACK包后立即關閉連接,這是第四次揮手,
為什么客戶端需要等待超時時間?
這是為了保證對方已收到ACK包,因為假設客戶端發送完最后一包ACK包后就釋放了連接,一旦ACK包在網路中丟失,服務端將一直停留在最后確認狀態,如果客戶端發送最后一包ACK包后,等待一段時間,這時服務端因為沒有收到ACK包,會重發FIN包,客戶端會回應這個FIN包重發ACK包并重繪超時時間,也是為了保證在不可靠的信道上建立可靠連接斷開,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/356946.html
標籤:其他
上一篇:計算機網路第5章運輸層
