三次握手:即建立tcp連線,就是指建立乙個tcp連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。在socket程式設計中,這一過程由客戶端執行connet來觸發。
1)第一次握手:client將標誌位syn置為1,隨機產生乙個值seq=j,並將該資料報傳送給server,client進入syn_set狀態,等待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之間可以開始傳輸資料了。
四次揮手:即終止tcp連線,就是指斷開乙個tcp連線時,需要客戶端和服務端總共傳送四個包以確認連線的斷開。在socket程式設計中,這一過程由客戶端或服務端任一方執行close來觸發。
由於tcp連線是全雙工的,因此每個方向都必須要單獨進行關閉,當一方完成資料傳送任務後,傳送乙個fin來終止這一方向的連線,收到乙個fin只是意味著這一方向沒有資料流動了,即不會再收到資料了,但是這個tcp連線上仍然能夠傳送資料,直到這一方也傳送了fin。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉。
為什麼建立連線是三次握手,而關閉連線確是四次揮手呢?
因為服務端在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後,它必須通知應用層另一端已經終止了那個方向的資料傳...