TCP三次握手與四次握手

2021-08-04 04:37:41 字數 2812 閱讀 4920

當我們從瀏覽器輸入乙個url,http的工作流程如下圖所示:

dns解析流程請看dns網域名稱解析過程這篇文章

現在來講tcp三次握手

tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。

(1)序號:seq序號,佔32位,用來標識從tcp源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。

(2)確認序號:ack序號,佔32位,只有ack標誌位為1時,確認序號欄位才有效,ack=seq+1。

位碼即tcp標誌位,有6種標示:

(a)urg:緊急指標(urgent pointer)有效。

(b)ack:確認序號有效。

(c)psh:接收方應該盡快將這個報文交給應用層。

(d)rst:重置連線。

(e)syn:發起乙個新連線。

(f)fin:釋放乙個連線。

需要注意的是:

(a)不要將確認序號ack與標誌位中的ack搞混了。

(b)確認方ack=發起方req+1,兩端配對。

客戶端tcp狀態遷移:

closed->syn_sent->established->fin_wait_1->fin_wait_2->time_wait->closed

伺服器tcp狀態遷移:

closed->listen->syn收到->established->close_wait->last_ack->closed

各個狀態的意義如下:

listen - 偵聽來自遠方tcp埠的連線請求;

syn-sent -在傳送連線請求後等待匹配的連線請求;

syn-received - 在收到和傳送乙個連線請求後等待對連線請求的確認;

established- 代表乙個開啟的連線,資料可以傳送給使用者;

fin-wait-1 - 等待遠端tcp的連線中斷請求,或先前的連線中斷請求的確認;

fin-wait-2 - 從遠端tcp等待連線中斷請求;

close-wait - 等待從本地使用者發來的連線中斷請求;

closing -等待遠端tcp對連線中斷的確認;

last-ack - 等待原來發向遠端tcp的連線中斷請求的確認;

time-wait -等待足夠的時間以確保遠端tcp接收到連線中斷請求的確認;

closed - 沒有任何連線狀態;

tcp/ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線,需要客戶端和服務端總共傳送3個包以確認連線的建立。

第一次握手:client將標誌位syn置為1,隨機產生乙個值seq=j,並將該syn包傳送給server,client進入syn_sent狀態,等待server確認。

第二次握手:server收到client的syn包後,確認客戶端的syn(ack = j+1),並自己也傳送乙個syn包(seq=k),即ack包+syn包,此時伺服器b進入syn_recv狀態。

第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。

整個流程如下圖所示:

由於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狀態,完成四次揮手。

(1)三次握手是什麼或者流程?四次握手呢?答案前面分析就是。

(2)為什麼建立連線是三次握手,而關閉連線卻是四次揮手呢?

這是因為服務端在listen狀態下,收到建立連線請求的syn報文後,把ack和syn放在乙個報文裡傳送給客戶端。而關閉連線時,當收到對方的fin報文時,僅僅表示對方不再傳送資料了但是還能接收資料,己方也未必全部資料都傳送給對方了,所以己方可以立即close,也可以傳送一些資料給對方後,再傳送fin報文給對方來表示同意現在關閉連線,因此,己方ack和fin一般都會分開傳送。

參考部落格:

TCP 三次握手 四次握手

http常見狀態碼 200 ok 伺服器成功處理了請求 301 302 moved permanently 重定向 response中應該包含乙個location url,說明資源現在所處的位置 304 not modified 未修改 客戶的快取資源是最新的,要客戶端使用快取 404 not fo...

tcp三次握手和四次握手

建立tcp需要三次握手才能建立,而斷開連線則需要四次握手。整個過程如下圖所示 先來看看如何建立連線的。首先client端傳送連線請求報文,server段接受連線後回覆ack報文,並為這次連線分配資源。client端接收到ack報文後也向server段發生ack報文,並分配資源,這樣tcp連線就建立了...

TCP三次握手和四次握手

ip 網路層 不穩定性。硬體聯絡緊密 傳輸層 1.完全不彌補 udp 無連線不可靠報文傳輸 2.完全彌補 tcp 面向連線的可靠資料報傳遞 tcp傳送資料就包含了tcp三次握手建立連線和關閉連線的四次握手 建立連線用syn傳送,用ack應答 所謂三次握手就是客戶端與伺服器之間的三次應答。伺服器是一直...