tcp(transmission control protocol)網路傳輸控制協議,是一種面向連線的、可靠的、基於位元組流
的傳輸層通訊協議,資料傳輸前建立連線的工作要經過三次握手,資料傳輸後斷開連線的工作要經過四次揮手。
syn(synchronous),建立聯機。
ack(acknowledgement),確認。
psh(push),傳輸。
fin(finish),結束。
rst(reset),重置。
urg(urgent),緊急。
**三次握手和四次揮手的過程:
三次握手建立連線闡述:
第一次握手:客戶端要和服務端進行通訊,首先要告知服務端一聲,遂發出乙個syn=1的連線請求訊號,」服務端哥哥,我想給你說說話」。
第二次握手:當服務端接收到客戶端的連線請求,此時要給客戶端乙個確認資訊,」我知道了(ack),我這邊已經準備好了,你現在能連嗎(syn)」
。
第三次握手:當客戶端收到了服務端的確認連線資訊後,要禮貌的告知一下服務端,「好的,咱們開始聯通吧(ack)」。
到此整個建立連線的過程已經結束,接下來就是雙方你一句我一句甚至同時交流傳遞資訊的過程了。
四次揮手斷開連線闡述:
第一次揮手:雙方交流的差不多了,此時客戶端也已經結尾了,接下來要斷開通訊連線,所以告訴服務端「我說完了(fin)」
,此時自身形成等待結束連線的狀態。
第二次揮手:服務端知道客戶端已經沒話說了,服務端此時還有兩句心裡話要給客戶端說,「我知道你說完了(ack),我再給你說兩句,&*……%¥」。
第三次揮手:此時客戶端洗耳恭聽繼續處於等待結束的狀態,伺服器端也說完了,自身此時處於等待關閉連線的狀態,並對告訴客戶端,「我說完了,咱們斷了吧(fin)」。
第四次揮手:客戶端收知道服務端也說完了,也要告訴服務端一聲(ack),因為連線和斷開要雙方都按下關閉操作才能斷開
,客戶端同時又為自己定義乙個定時器
,因為不知道剛才說的這句話能不能準確到達服務端(網路不穩定或者其他因素引起的網路原因),預設時間定為兩個通訊的最大時間之和,超出這個時間就預設伺服器端已經接收到了自己的確認資訊,此時客戶端就關閉自身連線,伺服器端一旦接收到客戶端發來的確定通知就立刻關閉伺服器端的連線。
問題:為什麼斷開鏈結的時候客戶端設定的定時器時間等待要2msl
(兩個通訊報文的最大時間
)?
這個問題也很好理解,當客戶端最終告訴伺服器端斷開確認的時候,他不知道自己的發出的指令是否能準確的一次性被伺服器接收。假如伺服器沒有接收到(這已經耗費了乙個報文的最大通訊時間
了),伺服器端將會重新發起乙個結束通話的指令(fin)到客戶端,客戶端又接收到了伺服器發來的結束通訊指令將繼續給伺服器進行乙個確認
,有人會說那要是客戶端發出的確認資訊服務端沒收到,而服務端重發的斷開指令客戶端也沒收到怎麼辦,說實話我也無奈,遇到這種情況咱們乾脆認為網確實不行了。
參考:解讀time_wait
TCP三次握手 四次揮手詳解
1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...
TCP三次握手 四次揮手詳解
1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...
TCP三次握手 四次揮手詳解
1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1。2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...