TCP 协议报文格式
前言:
前面,我們已經提過TCP 協議屬于傳輸層協議,以及TCP/IP 五層/四層模型
數據從應用層開始,會在每一層都會加上頭信息,進行封裝,再發送到數據接收端
TCP 報文格式
- 端口號
- 序列號
- 確認號
- 數據偏移字段
- 保留字段
- 標志位字段🔺
- 窗口大小字段
- TCP 校驗和字段
- 緊急指針字段
- 可選項字段
TCP UDP 的報頭和 Http 的報頭差別很大;Http 是文本格式的協議 (按照字符串文本的方式處理的),而 TCP / UDP 都是二進制的協議 (以字節 / 比特位為單位進行組織的)
TCP 報文是 TCP 層傳輸的數據單元,也稱為報文段
TCP 報文中每個字段如圖所示:
上圖中 TCP 報文中每個字段的含義如下:
端口號
TCP源端口(Source Port): 源計算機上的應用程序的端口號,占 16 位
TCP目的端口(Destination Port): 目標計算機的應用程序端口號,占 16 位
序列號
CP序列號(Sequence Number): 占 32 位;它表示本報文段所發送數據的第一個字節的編號。在 TCP 連接中,所傳送的字節流的每一個字節都會按順序編號。當SYN標記不為1時,這是當前數據分段第一個字母的序列號;如果SYN的值是1時,這個字段的值就是初始序列值(ISN),用于對序列號進行同步。這時,第一個字節的序列號比這個字段的值大1,也就是ISN加1。
確認號字段
確認號
TCP 確認號(Acknowledgment Number,ACK Number):占 32 位。它表示接收方期望收到發送方下一個報文段的第一個字節數據的編號。其值是接收計算機即將接收到的下一個序列號,也就是下一個接收到的字節的序列號加1。
數據偏移字段
數據偏移字段
TCP 首部長度(Header Length):數據偏移是指數據段中的“數據”部分起始處距離 TCP 數據段起始處的字節偏移量,占 4 位。其實這里的“數據偏移”也是在確定 TCP 數據段頭部分的長度,告訴接收端的應用程序,數據從何處開始。
保留字段
保留(Reserved): 占 4 位;為 TCP 將來的發展預留空間,目前必須全部為 0
標志位字段🔺
| URG | 表示本報文段中發送的數據是否包含緊急數據:URG=1 時表示有緊急數據。當 URG=1 時,后面的緊急指針字段才有效 |
| ACK | 表示前面的確認號字段是否有效:ACK=1 時表示有效;只有當 ACK=1 時,前面的確認號字段才有效;TCP 規定,連接建立后,ACK 必須為 1 |
| PSH | 告訴對方收到該報文段后是否立即把數據推送給上層。如果值為 1,表示應當立即把數據提交給上層,而不是緩存起來 |
| RST | 表示是否重置連接:若 RST=1,說明 TCP 連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,然后再重新建立連接 |
| SYN | 在建立連接時使用,用來同步序號:當 SYN=1,ACK=0 時,表示這是一個請求建立連接的報文段;當 SYN=1,ACK=1 時,表示對方同意建立連接;SYN=1 時,說明這是一個請求建立連接或同意建立連接的報文;只有在前兩次握手中 SYN 才為 1 |
| FIN | 標記數據是否發送完畢:若 FIN=1,表示數據已經發送完成,可以釋放連接 |
窗口大小字段
窗口大小(Window Size): 占 16 位;它表示從 Ack Number 開始還可以接收多少字節的數據量,也表示當前接收端的接收窗口還有多少剩余空間。該字段可以用于 TCP 的流量控制。
TCP 校驗和字段
校驗位(TCP Checksum): 占 16 位;它用于確認傳輸的數據是否有損壞。發送端基于數據內容校驗生成一個數值,接收端根據接收的數據校驗生成一個值。兩個值必須相同,才能證明數據是有效的。如果兩個值不同,則丟掉這個數據包。Checksum 是根據偽頭 + TCP 頭 + TCP 數據三部分進行計算的。
緊急指針字段
緊急指針(Urgent Pointer): 僅當前面的 URG 控制位為 1 時才有意義。它指出本數據段中為緊急數據的字節數,占 16 位;當所有緊急數據處理完后,TCP 就會告訴應用程序恢復到正常操作。即使當前窗口大小為 0,也是可以發送緊急數據的,因為緊急數據無須緩存。
可選項字段
選項(Option): 長度不定,但長度必須是 32bits 的整數倍;選項中的內容不確定,因此就必須使用首部長度來區分選項具體的長度
總結
以上是生活随笔為你收集整理的TCP 协议报文格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《数字图像处理》笔记
- 下一篇: 机器人学导论——操作臂运动学