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,傳送ack確認包+syn包syn=1,ack=1,seq=y,ack=x+1
傳送syn+ack包到客戶器,進入syn_recv狀態
c => [ack] => s客戶端收到syn+ack包,向服務端傳送ack確認包**(ack=k+1)**ack=1,seq=x+1,ack=y+1
服務端與客戶端進入established狀態
如果此時丟包,服務端會不斷重試直至超時⚠️針對syn flood的防護措施
syn佇列滿後,通過tcp_syncookies引數回發syn cookie
若正常連線則客戶端會回發syncookie
建立連線後,客戶端出現故障時⚠️保活機制
配置了保活的一端會傳送保活探測報文,若未接收到則繼續傳送
嘗試次數達到保活探測數仍未收到響應則中斷連線
目的:終止連線,tcp四次揮手的流程如下:客戶端或服務端都可發起主動關閉
假設客戶端發起關閉
c => [syn/fin] => s客戶端傳送fin/syn包**(fin=1,syn=u**(由伺服器傳送來的最後一次資料的最後乙個序號+1)**)**到伺服器fin=1,seq=u
客戶端進入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狀態,等待伺服器傳送第三次揮手報文
此時可能還有正在傳送中的資料伺服器傳送完資料後,傳送第三次揮手報文:服務端進入last-ack狀態c <= [syn/ack/fin] <= s
fin=1,ack=u+1,seq=w(可能已經傳送了資料)
客戶端接受到報文後進入time-wait
c => [syn/ack] => s服務端closed客戶端等待2msl時間clocedseq=u+1,ack=w+1
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位,用來標識...