本文是自己基於學習三次握手四次揮手的個人理解,不準確的地方可以一起討論。
在看到其他文章時都有看到syn還是ack的詞彙,首先明確一下什麼意思
syn:synchronize,同步、同步發生的意思。syn是tcp/ip建立連線時使用的握手訊號,所以syn報文是用來同步的。
ack:acknowledgement,確認字元的意思。確認發來的資料已經接收無誤。所以ack報文是用來應答的。
seq:是資料報序號。
三次握手是指建立tcp連線協議時需要在客戶端和伺服器之前傳送三個包,握手過程中傳送的包裡不包含資料。得等到建立好連線後才會傳送資料。
第一次握手:客戶端首先向服務端傳送第乙個包,其中syn標誌為1,ack=0,傳送順序sequence=x(隨機數int)。客戶端進入syn傳送狀態,等待伺服器確認。
第二次握手:伺服器收到這個包後傳送第二個包,其中包括syn、ack標誌位為1,傳送順序號seq=y(隨機數int),接收順序號ack=x+1,此時伺服器進入syn接收狀態。
第三次握手:客戶端收到伺服器傳來的包後,向伺服器傳送第三個包,syn=0,ack=1,接收順序號ack=y+1,傳送順序號seq=x+1.此包傳送完畢,客戶端和伺服器進入established建立成功狀態,完成三次握手。
此時完成握手後即建立了連線,可以傳輸資料。
到需要斷開連線之後,需要進行四次揮手。
四次揮手是指終止tcp連線協議時,需要在客戶端和伺服器之間傳送四個包。
第一次揮手:主動關閉方傳送乙個包,其中fin標誌位為1,傳送順序號seq為x。
第二次揮手:被動關閉方收到fin包後傳送第二個包,其中傳送順序號seq為z,接收順序號ack為x+1.
第三次揮手:被動關閉方再傳送第三個包,其中fin標誌位為1,傳送順序號seq為y,接收順序號ack為x。
第四次揮手:主動關閉方傳送第四個包,其中傳送順序號為x,接收順序號為y。
此時連線斷開。
為什麼需要三次握手
因為第二次握手時,服務端還不能確定客戶端已經收到了確認請求,也就是說服務端認為建立好連線,開始傳送資料,結果客戶端一直沒收到,服務端這時只發包不接收,伺服器很容易掛掉,也很容易被攻擊。
為什麼需要四次揮手
因為服務端在收到客戶端到斷開請求後,不能一次性將ack應答報文和fin報文,因為傳送fin報文之前,服務端的所有報文需要傳送完,所以得先將ack包發給客戶端後,再等待服務端的所有報文傳送完再傳送fin報文。
三次握手 四次揮手
1.tcp連線的建立 1 首先是伺服器初始化的過程,從 closed 關閉 狀態開始通過順序呼叫 socket bind listen 和accept 原語建立 socket 套接字,進入 listen 監聽 狀態,等待客戶端的 tcp傳輸連線請求。2 客戶端最開始也是從 closed 狀態開始呼叫...
三次握手,四次揮手
三次握手 three times handshake three way handshake 所謂的 三次握手 即對每次傳送的 資料量是怎樣跟蹤進行協商使 資料段的傳送和接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送 接收完畢後何時撤消聯絡,並建立虛連線。為了提供可靠的傳送,tcp在傳送...
三次握手 四次揮手
在tcp ip 協議中,tcp 協議提供可靠的連線服務,採用三次握手建立乙個連線,如圖1所示。1 第一次握手 建立連線時,客戶端a 傳送syn 包 syn j 到伺服器b 並進入syn send 狀態,等待伺服器b 確認。2 第二次握手 伺服器b 收到syn 包,必須確認客戶a 的syn ack j...