TCP 請求頭
TCP 請求頭結構
Source Port(源埠):源埠號 (佔用16位),傳送端程式埠
Destination Port(目的埠):目的埠號(佔用16位),接收端程式埠
Sequence Number(傳送資料序號):用來標識從TCP發端向TCP收端傳送的資料位元組流,它表示在這個報文段中的的第一個資料位元組在資料流中的序號;主要用來解決網路報亂序的問題;(佔用32位)
Acknowledgment Number (ACK 確認號): 32位確認序列號包含傳送確認的一端所期望收到的下一個序號,因此,確認序號應當是上次已成功收到資料位元組序號加1。不過,只有當標誌位中的ACK標誌(下面介紹)為1時該確認序列號的欄位才有效。主要用來解決不丟包的問題;
例如:傳輸一個檔案,檔案比較大的 TCP 會把該檔案拆成多段進行傳送,
假如每段1000個位元組,第一次的時候 Sequence Number 會隨機一個 int 數值,假如為1。
第一次傳送 Sequence Number=1,
第一次響應 Acknowledgment Number = 1001
第二次傳送 Sequence Number=1001
第二次響應 Acknowledgment Number = 2001
... ...
Data Offset(資料偏移量) : 資料偏移量(4位)給出首部中32 bit字的數目,需要這個值是因為任選欄位的長度是可變的。這個欄位佔4bit(最多能表示15個32bit的的字,即4*15=60個位元組的首部長度),因此TCP最多有60位元組的首部。然而,沒有任選欄位,正常的長度是20位元組; 如果有額外的 TCP 的 option 選項,還得加上 option 的長度。
Reserved(保留欄位):保留欄位,目前還沒有使用。
TCP Flags(控制位) :TCP控制位(6位),每一位代表一個控制位,它們中的多個可同時被設定為1,主要是用於操控TCP的狀態機的,依次為URG,ACK,PSH,RST,SYN,FIN。每個標誌位的意思如下:
- URG:此標誌表示TCP包的緊急指標域(後面馬上就要說到)有效,用來保證TCP連線不被中斷,並且督促中間層裝置要儘快處理這些資料;
- ACK:此標誌表示應答域有效,就是說前面所說的TCP應答號將會包含在TCP資料包中;有兩個取值:0和1,為1的時候表示應答域有效,反之為0;
- PSH:這個標誌位表示Push操作。所謂Push操作就是指在資料包到達接收端以後,立即傳送給應用程式,而不是在緩衝區中排隊;
- RST:這個標誌表示連線復位請求。用來複位那些產生錯誤的連線,也被用來拒絕錯誤和非法的資料包;
- SYN:表示同步序號,用來建立連線。SYN標誌位和ACK標誌位搭配使用,當連線請求的時候,SYN=1,ACK=0;連線被響應的時候,SYN=1,ACK=1;這個標誌的資料包經常被用來進行埠掃描。掃描者傳送一個只有SYN的資料包,如果對方主機響應了一個資料包回來 ,就表明這臺主機存在這個埠;但是由於這種掃描方式只是進行TCP三次握手的第一次握手,因此這種掃描的成功表示被掃描的機器不很安全,一臺安全的主機將會強制要求一個連線嚴格的進行TCP的三次握手;
- FIN: 表示傳送端已經達到資料末尾,也就是說雙方的資料傳送完成,沒有資料可以傳送了,傳送FIN標誌位的TCP資料包後,連線將被斷開。這個標誌的資料包也經常被用於進行埠掃描。
Window(視窗) :視窗大小(16位),表示接收端可用緩衝區大小,根據緩衝區大小和每次包大小,就可以計算出同時處理的 TCP 包的個數。同時處理的包個數越多,則網速越快。
Checksum (校驗和): 用來檢查 TCP 包是否完整(16位)
Urgent Pointer (緊急指標):表示應緊急處理的資料位置(16位)。路由器可以把緊急的資料包優先處理。
Options(可選欄位):可選欄位,可變長度,最長為40位元組。(因為 Data Offset 最多能表示60個位元組長度的 TCP 頭資訊,固定的 TCP 頭部為 20 位元組)
Padding (填充):填充位。因為 Data Offset 只能表示 TCP 頭部的長度 必須是 4 位元組的整倍數。如果 Options 選項不足 4位元組的整倍數,就需要 Padding 填充為 4 位元組的整倍數。
相關文章
- 有趣的請求引數/請求頭
- ajax中設定請求頭和自定義請求頭
- 0227-TCP 請求報文TCP
- HTTP請求頭與響應頭HTTP
- centos上nginx轉發tcp請求CentOSNginxTCP
- python爬蟲請求頭Python爬蟲
- 使用Spring Integration接收TCP與UDP請求SpringTCPUDP
- HTTP請求頭和響應頭詳解HTTP
- Python中get、post請求詳解(HTTP請求頭、狀態碼)PythonHTTP
- http請求頭與響應頭的應用HTTP
- HTTP常用請求頭大揭祕HTTP
- http請求頭個欄位解釋HTTP
- 利用Referer請求頭防止“盜鏈”-JavawebJavaWeb
- java webservice 帶請求頭方式處理JavaWeb
- SpringMVC處理請求頭、響應頭、編碼行為SpringMVC
- 爬蟲中的TCP請求自動切換ip爬蟲TCP
- HTTP請求頭的Content-Type欄位HTTP
- 請求協議中的content-type頭協議
- 使用Python獲取HTTP請求頭資料PythonHTTP
- MDN新增“HTTP有條件請求”標頭HTTP
- Nginx轉發導致請求頭丟失Nginx
- 關於常用的http請求頭以及響應頭詳解HTTP
- TCP頭部TCP
- 跟我一起動手實現Tomcat(三):解析Request請求引數、請求頭、cookieTomcatCookie
- 自定義的請求頭,你去哪裡了?
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 請求報415的異常,通常都是請求頭Headers的Content-Type沒有配置對Header
- Jmeter —— jmeter設定HTTP資訊頭管理器模擬請求頭JMeterHTTP
- 說說 HTTP 常見的請求頭有哪些? 作用?HTTP
- 基於tcp的http應用,斷點續傳,範圍請求TCPHTTP斷點
- 請求OpenFeign的GET請求時,請求為何失敗?
- JavaScript逆向之iwencai請求頭引數加密過程解析JavaScriptAI加密
- ASP.NET Core - 實現Http自定義請求頭策略ASP.NETHTTP
- 前端獲取不到後端新增的請求頭資訊前端後端
- 大請求、請求超時問題
- Session物件改變請求頭值導致的401錯誤Session物件
- 網路請求優化之取消請求優化
- 一條HTTP請求的生命週期(二)-- TCP, 本文基於 RFC793HTTPTCP