tcp(transmission control protocol) 傳輸控制協議
tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線:
位碼即tcp標誌位,有6種標示:syn(synchronous建立聯機) ack(acknowledgement 確認) psh(push傳送) fin(finish結束) rst(reset重置) urg(urgent緊急)
sequence number(順序號碼) acknowledge number(確認號碼)
第一次握手:主機a傳送位碼為syn=1,隨機產生seq number=1234567的資料報到伺服器,主機b由syn=1知道,a要求建立聯機;
第二次握手:主機b收到請求後要確認聯機資訊,向a傳送ack number=(主機a的seq+1),syn=1,ack=1,隨機產生seq=7654321的包
第三次握手:主機a收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機a會再傳送ack number=(主機b的seq+1),ack=1,主機b收到後確認seq值與ack=1則連線建立成功。
完成三次握手,主機a與主機b開始傳送資料。
在tcp/ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。
第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態; 第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。 完成三次握手,客戶端與伺服器開始傳送資料.
例項:ip 192.168.1.116.3337 > 192.168.1.123.7788: s 3626544836:3626544836
ip 192.168.1.123.7788 > 192.168.1.116.3337: s 1739326486:1739326486 ack 3626544837
ip 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1
第一次握手:192.168.1.116傳送位碼syn=1,隨機產生seq number=3626544836的資料報到192.168.1.123,192.168.1.123由syn=1知道192.168.1.116要求建立聯機;
第二次握手:192.168.1.123收到請求後要確認聯機資訊,向192.168.1.116傳送ack number=3626544837,syn=1,ack=1,隨機產生seq=1739326486的包;
第三次握手:192.168.1.116收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,192.168.1.116會再傳送ack number=1739326487,ack=1,192.168.1.123收到後確認seq=seq+1,ack=1則連線建立成功。
**:乙個三次握手的過程(圖1,圖2)
(圖1)
(圖2)
第一次握手的標誌位(圖3)
我們可以看到標誌位裡面只有個同步位,也就是在做請求(syn)
(圖3)
第二次握手的標誌位(圖4)
我們可以看到標誌位裡面有個確認位和同步位,也就是在做應答(syn + ack)
(圖4)
第三次握手的標誌位(圖5)
我們可以看到標誌位裡面只有個確認位,也就是再做再次確認(ack)
(圖5)
乙個完整的三次握手也就是 請求---應答---再次確認
why 三次?
三次主要解決 client傳送的連線請求延時的情況。
比方說, client a 傳送請求連線由於網路原因延時一段時間,當伺服器b接受到這個請求時,如果沒有三次握手,伺服器b向a傳送sys=1,ack=1,並建立連線,但是a這個連線已經失效,a對收到的響應不做回應,但是b端一直在等待a向自己傳送資料,這會造成資源的浪費。 有三次握手的情況,a對收到的響應不做回應,b端收不到a端的響應,認為這個連線無效,不做處理。
綜上可知,由於tcp連線是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向的連線。收到乙個 fin只意味著這一方向上沒有資料流動,乙個tcp連線在收到乙個fin後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
(1)客戶端a傳送乙個fin,用來關閉客戶a到伺服器b的資料傳送。
(2)伺服器b收到這個fin,它發回乙個ack,確認序號為收到的序號加1,和syn一樣,乙個fin將占用乙個序號。
(3)伺服器b關閉與客戶端a的連線,傳送乙個fin給客戶端a。
(4)客戶端a發回ack報文確認,並將確認序號設定為收到序號加1。
why 4次?
因為tcp有個半關閉狀態,假設a.b要釋放連線,那麼a傳送乙個釋放連線報文給b,b收到後傳送確認,這個時候a不發資料,但是b如果發資料a還是要接受,這叫半關閉。然後b還要發給a連線釋放報文,然後a發確認,所以是4次。
TCP協議三次握手過程分析
tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線 位碼即tcp標誌位,有6種標示 syn synchronous建立聯機 ack acknowledgement 確認 psh pus...
TCP協議三次握手過程分析
原文出自 tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線 位碼即tcp標誌位,有6種標示 syn synchronous建立聯機 ack acknowledgement 確認 ps...
TCP協議三次握手過程分析
tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線 位碼即tcp標誌位,有6種標示 syn synchronous建立聯機 ack acknowledgement 確認 psh pus...