tcp(transmission control protocol)網路傳輸控制協議,是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,資料傳輸前建立連線的工作要經過三次握手,資料傳輸後斷開連線的工作要經過四次揮手。
tcp共有6個標誌位,分別是:
第一次握手:客戶端要和服務端進行通訊,首先要告知服務端一聲,遂發出乙個syn=1的連線請求訊號,」服務端哥哥,我想給你說說話」。
第二次握手:當服務端接收到客戶端的連線請求,此時要給客戶端乙個確認資訊,」我知道了(ack),我這邊已經準備好了,你現在能連嗎(syn)」。
第三次握手:當客戶端收到了服務端的確認連線資訊後,要禮貌的告知一下服務端,「好的,咱們開始聯通吧(ack)」。
到此整個建立連線的過程已經結束,接下來就是雙方你一句我一句甚至同時交流傳遞資訊的過程了。
第一次揮手:雙方交流的差不多了,此時客戶端也已經結尾了,接下來要斷開通訊連線,所以告訴服務端「我說完了(fin)」,此時自身形成等待結束連線的狀態。
第二次揮手:服務端知道客戶端已經沒話說了,服務端此時還有兩句心裡話要給客戶端說,「我知道你說完了(ack),我再給你說兩句,&*……%¥」。
第三次揮手:此時客戶端洗耳恭聽繼續處於等待結束的狀態,伺服器端也說完了,自身此時處於等待關閉連線的狀態,並對告訴客戶端,「我說完了,咱們斷了吧(fin)」。
第四次揮手:客戶端收知道服務端也說完了,也要告訴服務端一聲(ack),因為連線和斷開要雙方都按下關閉操作才能斷開,客戶端同時又為自己定義乙個定時器,因為不知道剛才說的這句話能不能準確到達服務端(網路不穩定或者其他因素引起的網路原因),預設時間定為兩個通訊的最大時間之和,超出這個時間就預設伺服器端已經接收到了自己的確認資訊,此時客戶端就關閉自身連線,伺服器端一旦接收到客戶端發來的確定通知就立刻關閉伺服器端的連線。
到此為止雙方整個通訊過程就此終結。這裡要宣告一下:斷開鏈結不一定就是客戶端,誰都可以先發起斷開指令,另外客戶端和服務端是沒有固定標準的,誰先發起請求誰就是客戶端。
1.為什麼斷開鏈結的時候客戶端設定的定時器時間等待要2msl(兩個通訊報文的最大時間)?
這個問題也很好理解,當客戶端最終告訴伺服器端斷開確認的時候,他不知道自己的發出的指令是否能準確的一次性被伺服器接收。假如伺服器沒有接收到(這已經耗費了乙個報文的最大通訊時間了),伺服器端將會重新發起乙個結束通話的指令(fin)到客戶端,客戶端又接收到了伺服器發來的結束通訊指令將繼續給伺服器進行乙個確認,有人會說那要是客戶端發出的確認資訊服務端沒收到,而服務端重發的斷開指令客戶端也沒收到怎麼辦,說實話我也無奈,遇到這種情況咱們乾脆認為網確實不行了。
2.為什麼建立連線要三次握手而斷開連線要四次揮手?
說起這個,打乙個比喻,目前祖國正在高速發展高鐵,建立連線的過程正如上海到北京打通一條高鐵線,tcp通訊過程是乙個全雙工模式,即在這條高鐵線上要有兩個軌道,即能從上海發車到北京又能從北京發車到上海,甚至兩邊可以同時發車。所以斷開連線前提就是要保證兩條軌道都沒有車,然後雙方才能各自發起斷開動作。
客戶端工作流程:
注意:在time_wait狀態中,如果tcp client端最後一次傳送的ack丟失了,它將重新傳送。time_wait狀態中所需要的時間是依賴於實現方法的。典型的值為30秒、1分鐘和2分鐘。等待之後連線正式關閉,並且所有的資源(包括埠號)都被釋放。
伺服器端工作流程:
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給客戶端,詢問客戶端是否準備好進行資料通訊。...