TCP欄位詳解與三次握手四次揮手過程

2021-10-21 02:19:33 字數 3640 閱讀 3670

tcp資料報

術語含義

序號seq

佔4個位元組,用來標記資料段的順序,tcp把連線中傳送的所有資料位元組都編上乙個序號

第乙個位元組的編號由本地隨機產生;給位元組編上序號後,就給每乙個報文段指派乙個序號;

序號seq就是這個報文段中的第乙個位元組的資料編號

確認號ack

佔4個位元組,表示期待收到對方下乙個報文段的第乙個資料位元組的序號;

確認號ack指的是期望接收到下乙個位元組的編號

當前報文段最後乙個位元組的編號+1即為將傳送的確認號

資料偏移

由於頭部有可選字段,長度不固定,因此資料偏移指出tcp報文資料距離tcp報文起始處有多遠

urg緊急指標標誌,為1時,緊急指標有效。表示此報文段中有緊急資料要被優先處理

ack確認序號標誌,為1時,確認號有效

pshpush標誌,為1時,接收端應用程式應該從tcp緩衝區把資料讀走,不用等到快取填滿

rst重置連線標誌,為1時,說明當前tcp出現嚴重錯誤,對方要求重新建立連線

syn同步序列號,為1時,請求建立連線,並在其序列號的字段進行序列號的初始值設定。

finfinish標誌,為1時,要求釋放連線

滑動視窗(視窗)

告知傳送端,接收端的快取大小,以此控制傳送端傳送的速率,從而流量控制

校驗和對整個tcp報文段(tcp頭部、tcp資料)以16位計算所得,由傳送端計算和儲存,接收端驗證

緊急指標

urg為1時有效,指出本報文段中緊急資料的位元組數

可選項定義一些可選引數

mss:每個tcp報文段中資料字段的最大長度

windows scaling:視窗擴**項

更多參考

目的:為了確認連線

客戶端傳送syn包到伺服器

客戶端進入syn_send狀態

c <= [syn/ack] <= s

syn=1,ack=1,seq=y,ack=x+1

服務端確認客戶端的syn,傳送ack確認包+syn

傳送syn+ack包到客戶器,進入syn_recv狀態

c => [ack] => s

ack=1,seq=x+1,ack=y+1

客戶端收到syn+ack包,向服務端傳送ack確認包**(ack=k+1)**

服務端與客戶端進入established狀態

如果此時丟包,服務端會不斷重試直至超時

⚠️針對syn flood的防護措施

syn佇列滿後,通過tcp_syncookies引數回發syn cookie

若正常連線則客戶端會回發syncookie

建立連線後,客戶端出現故障時

⚠️保活機制

配置了保活的一端會傳送保活探測報文,若未接收到則繼續傳送

嘗試次數達到保活探測數仍未收到響應則中斷連線

目的:終止連線,tcp四次揮手的流程如下:

客戶端或服務端都可發起主動關閉

假設客戶端發起關閉

c => [syn/fin] => s

fin=1,seq=u

客戶端傳送fin/syn包**(fin=1,syn=u**(由伺服器傳送來的最後一次資料的最後乙個序號+1)**)**到伺服器

客戶端進入fin-wait-1

伺服器傳送syn+ack包,syn=v,ack=u+1c <= [syn/ack] <= s

ack=1,seq=v,ack=u+1(與syn相同,乙個fin占用乙個序號)

伺服器通知上層應用程序:客戶端已經沒有資料要傳送了

伺服器進入半關閉cloce-wait狀態

客戶端進入fin-wait-2狀態,等待伺服器傳送第三次揮手報文

此時可能還有正在傳送中的資料

伺服器傳送完資料後,傳送第三次揮手報文:

c <= [syn/ack/fin] <= s

fin=1,ack=u+1,seq=w(可能已經傳送了資料)

服務端進入last-ack狀態

客戶端接受到報文後進入time-wait

c => [syn/ack] => s

seq=u+1,ack=w+1

服務端closed客戶端等待2msl時間cloced

msl最長報文段壽命

1.確保有足夠時間讓對方收到ack包

如果被動關閉端沒有收到ack就會重發fin包,一來一回即為2*time_wait

2.避免新舊連線混淆

有些路由器會快取ip資料報,延遲收到的包可能會與新連線混淆

因為全雙工,傳送方和接收方都需要fin報文和ack報文

對方關閉socket連線,我方忙於讀寫操作,沒有及時關閉連線

1.檢查**,釋放資源的**

2.檢查配置,特別是處理請求的執行緒配置

TCP三次握手和四次揮

一 tcp報文格式 在了解三次握手和四次揮手之前,首先要知道tcp報文內部包含了哪些東西。報文主要段的含義 序號 seq 用來標記資料段的順序,確保tcp傳輸有序。ack 確認 確認序號標誌,ack 1表示確認號字段有效,ack 0表示確認序號無效。syn 同步 連線請求序號標誌,用於建立連線。sy...

結合socket詳解TCP三次握手四次揮手

tcp協議中的三次握手和四次揮手大家應該都至少聽說過了,本人一直覺得理論學習要結合 才能學習的更深刻,當知道東西是這樣,然後再知道為什麼是這樣的時候,領悟往往更加深刻,今天本人就結合socket程式設計中的api來解析一下tcp協議的三次握手和四次揮手過程。那麼tcp協議中的三次握手和四次揮手實際在...

三次握手和四次揮手 TCP三次握手和四次揮手的理解

相比較於udp傳輸協議,tcp傳輸協議被認為是安全可靠的,這是由於tcp協議的三次握手和四次揮手保證了資料傳輸的安全性。tcp報文格式簡介 要了解tcp協議的三次握手和四次揮手,需要先了解在tcp協議中請求和響應的資料報報文格式。在報文中有幾個值得注意的字段 1 序號 seq序號,佔32位,用來標識...