TCP報文頭
報文頭詳解
1.SourcePort-源端口
發起請求的端口,佔兩個字節
2.DestinationProt-目的端口
被請求的端口,佔兩個字節
3.SequenceNumber-Seq序列號
佔四個字節
Seq隱式的爲報文段中攜帶的所有數據字節,標記了序號
舉例:
傳輸一段報文
報文的序列號是101,那麼報文所攜帶的數據,其中第一個字節的序列號就是101
報文攜帶的數據長度是100字節,那麼每一個字節的隱式序列號爲(101,102…199,200—共100個字節)
那麼下一段報文的序列號就是201
4.AcknowledgementNumber-Ack確認號
佔四個字節
通知對方,下一個報文的第一個字節的序列號應該是什麼
只是通知無法強制(請看舉例2)
舉例1:
C 向 S 發起請求,要下載一個 1073741824KB(1G) 的毛BT
傳輸過程中,C已經收到了數據 0KB-100KB,101KB-200KB ,201KB-300KB,301KB-400KB
那麼接下來C發出的ACK確認號,就應該是 401
舉例2:
C 向 S 發起請求,要下載一個 1073741824KB(1G) 的毛BT
傳輸過程中,C已經收到了數據 0KB-100KB,(這塊沒收到) ,201KB-300KB,301KB-400KB
S就是不給 101KB-200KB
此時面對這種失序到達的情況,有兩種處理方法
1.丟棄失序報文
2.保留失序報文,並等待剩餘報文傳輸完成 (應該用這個方法)
5.Offset-數據偏移
報文攜帶的數據,距離報文起始處有多遠
6.Reserved-保留域
目前來看,都是0
7.TCP Flags-狀態
SYN 同步序號,用於建立連接過程
ACK 確認序號標誌(0-忽略)(1-有效)
FIN finish標誌 用於釋放連接(1-發送方已經沒有數據了,本方可以關閉)
URG 緊急指針標誌(0-忽略)(1-有效)
PSH push標誌,告知接收方接到數據後,應該儘快交給應用程序,而不是在緩衝區排隊
RST 重置連接標誌
8.window-滑動窗口
基於窗口大小控制數據的發送速率
9.Checksum-校驗和
發送端 對報文執行計算後傳遞
接收端 進行接收時校驗
10.UrgentPointer-緊急指針
指出報文段中緊急數據的字節數
只有當 TCP Flags 中的URG=1時生效
11.TCP Options-可選項
長度可變,用來定義一些可選參數
《TCP詳解》
《TCP的三次握手詳解》
白嫖不點贊嗎.........