Tcp協議客戶端與服務端--三次握手
前言:
我們經常瀏覽網頁,網路聊天等,都是通過tcp協議以及udp協議進行傳輸的,Tcp和udp協議都工作在
傳輸層,都是在程式之間進行資料的傳輸,tcp以及udp協議都是以二進位制數進行傳輸
那麼tcp以及udp協議具體他們之間有什麼區別呢?
答:一個基於連結,一個基於非連結
例子:如果將人與人之間的通訊比喻成程序與程序之間的通訊
a.非連結可以比喻成寫信:
1.對方是否能收到資訊
2.內容是否完整
3.如果有兩封信他是否按照先後順序進行接受
b.基於連結可以比喻成打電話:
那麼打電話則不同這一系列的操作,電話接通,相互通話結束結束通話等操作流程,都可以得到對方的確認。
總結:那麼打電話是基於連結的那麼就是TCP協議,寫信就是基於非連結的也就是Udp協議
多測師教育培訓之什麼是三次握手?:
答:三次握手是建立通訊連結的過程。
1.傳送端(客戶端)向接受段傳送一個數據包給接受端(伺服器)詢問我是否可以與你建立連結,這個資料包我們稱為Syn包,syn包裡會生成序列號
2.如果服務端同意連結那麼就會進行回覆客戶端,傳送的資料包SYN加上一包ack+1包
注意:Ack包(ack包有自己的固定格式,長度大小,由接受方傳送給請求放 表示傳送的syn確認資訊無誤,1表示資料確認有效)
3.客戶端收到了服務端的確認資訊(syn+ack)包之後,然後向服務端傳送ack包,建立連結成功
總結:那麼這個互動的過程分為三次,傳送了3包資料包,所以我們稱為3次握手
為什麼是3次握手而不是兩次握手呢?
答:是為了防止已失效的報文資訊突然又傳到服務端引起錯誤
假如採用兩次握手建立連結:
客戶端向服務端傳送一包請求資料包(syn包),如果因為一些未知原因(網路等等)導致沒有到達伺服器,在傳輸的過程中在某個節點產生了滯留。
為了建立連結那麼客戶端會再次傳送一個請求(syn包)給服務端,這次的包正常送達,服務端回覆syn+ack包建立連結,那麼阻塞的第一個資料包突然恢復,第一包syn又送達到伺服器,那麼這個時候服務端會誤認為客戶端又發起了一個新的請求,那麼這個時候服務端就會認為是兩個連結狀態,客戶端端會認為是一個連結就會導致兩個端狀態不一致
總結,所以就會採用三次握手進行確認,就是為了解決網路通道不穩定