tcp三次握手的過程,需要客戶端和服務端總共傳送3個包以確認連線的建立:
tcp協議提供可靠的連線服務,使用三次握手建立了乙個連線。(syn:同步請求;syn+ack:同步請求應答)
a與b建立tcp連線時:首先a向b發syn(同步請求),然後b回覆syn搜尋+ack(同步請求應答),最後a回覆ack確認,這樣tcp的一次連線(三次握手)的過程就建立了!
(1)第一次握手:client將標誌位syn置為1,隨機產生乙個值seq=j,並將該資料報傳送給server,client進入syn_sent狀態,等待server確認。
(2)第二次握手:server收到資料報後由標誌位syn=1知道client請求建立連線,server將標誌位syn和ack都置為1,ack=j+1,隨機產生乙個值seq=k,並將該資料報傳送給client以確認連線請求,server進入syn_rcvd狀態。
(3)第三次握手:client收到確認後,檢查ack是否為j+1,ack是否為1,如果正確則將標誌位ack置為1,ack=k+1,並將該資料報傳送給server,server檢查ack是否為k+1,ack是否為1,如果正確則連線建立成功,client和server進入established狀態,完成三次握手,隨後client與server之間可以開始傳輸資料了。
幾個字段需要重點介紹下:
(1)序號:seq序號,佔32位,用來標識從tcp源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。
(2)確認序號:ack序號,佔32位,只有ack標誌位為1時,確認序號欄位才有效,ack=seq+1。
(3)標誌位:共6個,即urg、ack、psh、rst、syn、fin等,具體含義如下:
(a)urg:緊急指標(urgent pointer)有效。
(b)ack:確認序號有效。
(c)psh:接收方應該盡快將這個報文交給應用層。
(d)rst:重置連線。
(e)syn:發起乙個新連線。
(f)fin:釋放乙個連線。
需要注意的是:
(a)不要將確認序號ack與標誌位中的ack搞混了。
(b)確認方ack=發起方req+1,兩端配對。
四次揮手:
顧名思義,終止tcp連線。斷開乙個tcp連線,需要客戶端和服務端總共傳送4個包確認連線的斷開。
tcp連線時是雙工的,因此每個方向都必須單獨進行關閉。這一原則是當一方完成資料傳送任務後,傳送乙個fin來終止這一方向的連線,收到乙個fin只是意味著這一方向上沒有資料流動了,即不會再收到資料了,但是在這個tcp連線上仍然能夠傳送資料,直到這一方向也傳送了fin。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉,一方主動關閉,另一方被動關閉:
(1)第一次揮手:client傳送乙個fin,用來關閉client到server的資料傳送,client進入fin_wait_1狀態。
(2)第二次揮手:server收到fin後,傳送乙個ack給client,確認序號為收到序號+1(與syn相同,乙個fin占用乙個序號),server進入close_wait狀態。
(3)第三次揮手:server傳送乙個fin,用來關閉server到client的資料傳送,server進入last_ack狀態。
(4)第四次揮手:client收到fin後,client進入time_wait狀態,接著傳送乙個ack給server,確認序號為收到序號+1,server進入closed狀態,完成四次揮手。
同時揮手的情況:
問題:為什麼建立連線是三次握手,而關閉連線卻是四次揮手?
因為服務端在listen狀態下,收到建立連線請求的syn報文後,把ack和syn放在乙個報文裡傳送到客戶端;
而斷開連線時,當收到對方的fin報文時,僅僅表示對方不再傳送資料但還能接收資料,乙方這時候也未必把所有資料都傳送給了對方,如果這時候乙方服務端立即close,也可以傳送資料給對方。所有服務端再傳送fin報文給對方表示同意客戶端現在關閉連線,因此服務端ack 和fin一般分開傳送。
握手資料內容:
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後,它必須通知應用層另一端已經終止了那個方向的資料傳...