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:釋放乙個連線。
三次握手
三次握手:就是指建立乙個tcp連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。在socket程式設計中,這一過程由客戶端執行connect來觸發
第一次握手:client將標誌位syn置為1,隨機產生乙個值seq=j,並將該資料報傳送給server,client進入syn_sent狀態,等待server確認。
第二次握手:server收到資料報後由標誌位syn=1知道client請求建立連線,server將標誌位syn和ack都置為1,ack=j+1,隨機產生乙個值seq=k,並將該資料報傳送給client以確認連線請求,server進入syn_rcvd狀態。
第三次握手:client收到確認後,檢查ack是否為j+1,ack是否為1,如果正確則將標誌位ack置為1,ack=k+1,並將該資料報傳送給server,server檢查ack是否為k+1,ack是否為1,如果正確則連線建立成功,client和server進入established狀態,完成三次握手,隨後client與server之間可以開始傳輸資料了。
四次揮手
四次揮手:斷開乙個tcp連線時,需要客戶端和服務端總共傳送4個包以確認連線的斷開。在socket程式設計中,這一過程由客戶端或服務端任一方執行close來觸發,
由於tcp連線時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成資料傳送任務後,傳送乙個fin來終止這一方向的連線,收到乙個fin只是意味著這一方向上沒有資料流動了,即不會再收到資料了,但是在這個tcp連線上仍然能夠傳送資料,直到這一方向也傳送了fin。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉,上圖描述的即是如此。
第一次揮手:client傳送乙個fin,用來關閉client到server的資料傳送,client進入fin_wait_1狀態。
第二次揮手:server收到fin後,傳送乙個ack給client,確認序號為收到序號+1(與syn相同,乙個fin占用乙個序號),server進入close_wait狀態。
第三次揮手:server傳送乙個fin,用來關閉server到client的資料傳送,server進入last_ack狀態。
第四次揮手:client收到fin後,client進入time_wait狀態,接著傳送乙個ack給server,確認序號為收到序號+1,server進入closed狀態,完成四次揮手。
上面是一方主動關閉,另一方被動關閉的情況,實際中還會出現同時發起主動關閉的情況
為什麼建立連線是三次握手,而關閉連線卻是四次揮手呢?
這是因為服務端在listen狀態下,收到建立連線請求的syn報文後,把ack和syn放在乙個報文裡傳送給客戶端。而關閉連線時,當收到對方的fin報文時,僅僅表示對方不再傳送資料了但是還能接收資料,己方也未必全部資料都傳送給對方了,所以己方可以立即close,也可以傳送一些資料給對方後,再傳送fin報文給對方來表示同意現在關閉連線,因此,己方ack和fin一般都會分開傳送。
TCP IP協議三次握手與四次握手釋放
我們知道tcp建立連線要進行 三次握手 即交換三個分組。大致流程如下 只有就完了三次握手,但是這個三次握手發生在socket的那幾個函式中呢?請看下圖 圖1 socket中傳送的tcp三次握手 從圖中可以看出,當客戶端呼叫connect時,觸發了連線請求,向伺服器傳送了syn j包,這時connec...
TCP IP協議三次握手與四次揮手
一.標誌位和序號 seq序號 傳送方隨機生成的 ack確認序號 ack seq 1 標誌位ack 1時確認序號有效 syn標誌位 發起乙個新連線 ack標誌位 確認序號有效 fin標誌位 斷開連線 二.三次握手 三次握手是客戶端與服務端建立乙個tcp連線時,需要客戶端和服務端傳送三個包建立連線的過程...
TCP IP協議三次握手 四次揮手
tcp是一種面向連線的端到端的可靠傳輸協議。一 客戶端傳送乙個連線請求,傳送乙個隨機數x,這時客戶端的埠狀態變為syn sent狀態。二 服務端收到客戶端發起的連線請求,埠狀態變為listen狀態,服務端回覆客戶端發起的請求,把收到的隨機數x 1返回確認收到,在傳送乙個自己生成的隨機數y給客戶端。此...