我們知道,tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,需要三次握手建立連線,而終止乙個連線要經過四次揮手。
第一次握手:客戶端申請連線(syn=1),傳送seq=x的資料報,等待伺服器確認。
第二次握手:伺服器端申請連線(syn=1),確認收到客戶端的申請(ack=1).;伺服器期望下次收到x+1資料報(ack=x+1),傳送seq=y的資料報。
第三次握手:客戶端確認收到請求(syn=1),傳送伺服器期望的資料報(y+1),完成連線。
第一次揮手:客戶端請求斷開連線(fin=1),傳送資料(seq=u)。
第二次揮手:確認收到請求(ack=1),期望收到資料報(ack=u+1),傳送資料(seq=v)。
第三次揮手:伺服器申請斷開連線(fin=1),確認收到你之前的請求(ack=1);期望收到資料(ack=u+1),傳送資料(seq=w)。
第四次揮手:確認收到請求(ack=1),傳送資料(seq=u+1),斷開連線。
如果不採用「三次握手」,那麼只要伺服器發出確認,新的連線就建立了。由於現在客戶端並沒有發出建立連線的請求,因此不會理睬伺服器的確認,也不會向伺服器傳送ack包,但是服務端確認為新的連線開始了,等待客戶端發資料,這樣就會白白浪費資源。而經過三次握手,客戶端和伺服器都有應有答,這樣可以確保tcp正確連線。
在tcp建立連線時,伺服器端的syn和ack向客戶端傳送是一次性傳送的,而在斷開連線的過程中,伺服器端向客戶端端傳送的ack和fin是是分兩次傳送的。因為在伺服器端接收到客戶端的fin後,客戶端可能還有資料要傳輸,所以先傳送ack,等客戶端處理完自己的事情後就可以傳送fin斷開連線了。
msl(maximum segment lifetime),最大報文段生存時間,2個msl是報文段傳送和接收的最長時間。假定網路不可靠,那麼第四次傳送的ack可能丟失,即伺服器端無法收到這個ack,如果伺服器端收不到這個確認ack,伺服器端會定時向客戶端重**送fin,直到伺服器端收到客戶端的確認ack。所以這個2msl就是用來處理這個可能丟失的ack的。
tcp 四次揮手 TCP的三次握手和四次揮手
三次握手 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn包 syn y 即syn ack包,此時伺服器進入syn recv狀態 第三次握手 客戶端收到伺服...
TCP三次握手和四次揮手
一 tcp三次握手 three way handshake 1 tcp三次握手的作用 三次握手的目的是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。在socket程式設計中,客戶端執行connect 時,將觸發三次握手。2 tcp三次握手過程 第一步 ...
TCP三次握手和四次揮手
三次握手 四次揮手 需四次揮手原因 由於tcp的半關閉特性,tcp連線時雙全工 即資料在兩個方向上能同時傳遞 因此,每個方向必須單獨的進行關閉。這個原則就是 當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向上的連線。當一端收到乙個fin後,它必須通知應用層另一端已經終止了那個方向的資料傳...