TCP報文段首部結構
TCP雖然是面向字節(jié)流的,但TCP傳送的數據單元卻是報文段。
TCP報文段如APR報文、IP數據報一樣,也是由首部與數據區(qū)域組成,TCP首部內容很豐富,各個字段都有特定的含義,一般來說TCP首部只有20個字節(jié),TCP報文段首部的前20個字節(jié)是固定的,后面有4N字節(jié)是根據需要而增加的選項字段(N是整數)。因此TCP首部的最小長度是20字節(jié)。
在LwIP中,TCP首部采用一個名字叫tcp_hdr的結構體進行描述,此處用PACK_STRUCT_BEGIN與PACK_STRUCT_END宏定義禁止編譯器對齊,因為在tcp首部中存在某些字段是以1字節(jié)對齊的。
1PACK_STRUCT_BEGIN
2struct tcp_hdr {
3 PACK_STRUCT_FIELD(u16_t src); /* 源端口 */
4 PACK_STRUCT_FIELD(u16_t dest); /* 目的端口 */
5 PACK_STRUCT_FIELD(u32_t seqno); /* 序號 */
6 PACK_STRUCT_FIELD(u32_t ackno); /* 確認序號 */
7 PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); /* 首部長度+保留位+標志位 */
8 PACK_STRUCT_FIELD(u16_t wnd); /* 窗口大小 */
9 PACK_STRUCT_FIELD(u16_t chksum); /* 校驗和 */
10 PACK_STRUCT_FIELD(u16_t urgp); /* 緊急指針 */
11} PACK_STRUCT_STRUCT;
12PACK_STRUCT_END

TCP報文段首部(圖片來源《計算機網絡》-謝希仁)
首部固定部分各字段的意義如下:* 每個TCP報文段都包含源主機和目標主機的端口號,各占2個字節(jié),用于尋找發(fā)送端和接收端應用線程,這兩個值加上I P首部中的源I P地址和目標I P地址就能確定唯一一個TCP連接。
- 序號字段占
4字節(jié),序號范圍是[0,4294967295],序號增加到4284967295后,下一個序號就又回到0,主要是用來標識從TCP發(fā)送端向TCP接收端發(fā)送的數據字節(jié)流,它的值表示在這個報文段中的第一個數據字節(jié)所處位置嗎,根據接收到的數據區(qū)域長度,就能計算出報文最后一個數據所處的序號,因為TCP會對發(fā)送或者接收的數據進行編號(按字節(jié)流的形式),那么使用序號對每個字節(jié)進行計數,就能很輕易管理這些數據。TCP報文段的初始序列號(ISN)是隨機的,可能是0~4294967295之間的任意值. - 既然
TCP給每個傳輸的字節(jié)都了編號,那么確認序號就包含接收端所期望收到的下一個序號,因此,確認序號應當是上次已成功收到數據的最后一個字節(jié)序號加1。當然,只有ACK標志為1時確認序號字段才有效,TCP為應用層提供全雙工服務,這意味數據能在兩個方向上獨立地進行傳輸,因此確認序號通常會與反向數據(即接收端傳輸給發(fā)送端的數據)封裝在同一個報文中(即捎帶),所以連接的每一端都必須保持每個方向上的傳輸數據序號準確性。 - 首部長度字段占據
4bit空間(或者稱數據偏移字段),它指出了TCP報文段首部長度,以字節(jié)為單位,最大能記錄15*4=60字節(jié)的首部長度,因此,TCP報文段首部最大長度為60字節(jié)。在首部長度字段后接下來有6bit空間是保留未用的。 TCP報文段首部的標志字段:URG:首部中的緊急指針字段標志,如果是1表示緊急指針字段有效。ACK:首部中的確認序號字段標志,如果是1表示確認序號字段有效。PSH:該字段置1表示接收方應該盡快將這個報文段交給應用層。RST:重新建立TCP連接。SYN:握手,發(fā)起連接。FIN:結束連接。- TCP的流量控制由連接的每一端通過
聲明的窗口大小來提供,窗口大小為字節(jié)數,起始于確認序號字段指明的值,這個值是接收端正期望接收的數據序號,發(fā)送方根據窗口大小調整發(fā)送數據,以實現流量控制。窗口大小是一個占據16 bit空間的字段,因而窗口最大為65535字節(jié),當接收方告訴發(fā)送方一個大小為0的窗口時,將完全阻止發(fā)送方的數據發(fā)送。 - 只有當
URG標志置1時緊急指針才有效,緊急指針是一個正的偏移量,和序號字段中的值相加表示緊急數據最后一個字節(jié)的序號。簡單來說,本TCP報文段的緊急數據在報文段數據區(qū)域中,從序號字段開始,偏移緊急指針的值結束。
抓包分析
使用wireshark抓包工具分析:

-
TCP
+關注
關注
8文章
1417瀏覽量
82868 -
字節(jié)
+關注
關注
0文章
42瀏覽量
14318 -
apr
+關注
關注
0文章
11瀏覽量
6689
發(fā)布評論請先 登錄
SYN Flood攻擊的原理是什么?如何實現呢
LWIP TCP報文基礎知識及其LWIP中TCP協議的實現
無線鏈路的TCP性能問題及其改善
icmp報文和ip報文分析
tcp報文格式詳解
基于網絡編碼的TCP協議傳輸系統(tǒng)
淺析C++基礎語法之計算機網絡中傳輸層(TCP&UDP)

tcp報文段首部的結構分析
評論