當我們使用raw socket的時候,可以完全自定義ip包,一切形式的包都可以"製造"出來。因此,本文事先必須對tcp/ip所涉及ip包結構進行必要的交待。
目前,ipv4的報頭結構為常用的icmp報文包括echo-request(響應請求訊息)、echo-reply(響應應答訊息)、destination unreachable(目標不可到達訊息)、time exceeded(超時訊息)、parameter problems(引數錯誤訊息)、source quenchs(源抑制訊息)、redirects(重定向訊息)、timestamps(時間戳訊息)、timestamp replies(時間戳響應訊息)、address masks(位址掩碼請求訊息)、address mask replies(位址掩碼響應訊息)等,是internet上十分重要的訊息。後面章節中所涉及到的ping命令、icmp拒絕服務攻擊、路由欺騙都與 icmp協議息息相關。
版本號(4)
包頭長(4)
服務型別(8)
資料報長度(16)
標識(16)
偏移量(16)
生存時間(8)
傳輸協議(8)
校驗和(16)
源位址(32)
目的位址(32)
選項(8)
......... 填充
對其進行資料結構封裝:
typedef struct _iphdr //定義ip報頭
ip_header;
或者將上述定義中的第一位元組按位拆分:
typedef struct _iphdr //定義ip報頭
ip_header;
更加嚴格地講,上述定義中h_len、ver欄位的記憶體存放順序還與具體cpu的endian有關,因此,更加嚴格的ip_header可定義為:
typedef struct _iphdr //定義ip報頭
ip_header;
tcp報頭結構為:
源埠(16)
目的埠(16)
序列號(32)
確認號(32)
tcp偏移量(4)
保留(6)
標誌(6)
視窗(16)
校驗和(16)
緊急(16)
選項(0或32)
資料(可變)
對應資料結構:
typedef struct psd_hdr //定義tcp偽報頭
psd_header;
typedef struct _tcphdr //定義tcp報頭
tcp_header;
同樣地,tcp頭的定義也可以將位域拆分:
typedef struct _tcphdr
tcp_header;
udp報頭為:
源埠(16)
目的埠(16)
報文長(16)
校驗和(16)
對應的資料結構為:
typedef struct _udphdr //定義udp報頭
udp_header;
icmp協議是網路層中乙個非常重要的協議,其全稱為internet control message protocol(網際網路控制報文協議),icmp協議彌補了ip的缺限,它使用ip協議進行資訊傳遞,向資料報中的源端節點提供發生在網路層的錯誤資訊 反饋。icmp報頭為:
型別(8)
**(8)
校驗和(16)
訊息內容
常用的回送與或回送響應icmp訊息對應資料結構為:
typedef struct _icmphdr //定義icmp報頭(回送與或回送響應)
icmp_header;
報頭壓縮 ROHC報頭壓縮程式改進
改進後的rohc程式實現的功能如下 示例程式中使用到的函式功能總結如下 rohc init buf empty 將rohc buf結構體資料部分初始化 rohc comp new2 建立壓縮器 rohc comp enable profile 壓縮類設定profile enable rohc buf...
IPV6報頭和擴充套件報頭
ipv6頭部 版本 指明當前ip協議的版本。流量分類 相當於ipv4中的tos欄位,但考慮到tos近些年的發展,主要是用於做區分服務等級,所以將該字段的命名改的更貼近現在的用途。流標籤 這是ipv6中特有的乙個字段,這個字段設定的目的主要是為特定的業務流打上標籤。暫保留 有效負載長度 描述了ipv6...
http請求報頭和響應報頭(1)
1.web端不可避免的http快取機制,要理解快取機制,先來了解下http的請求報文和響應報文的內容 2.請求報文 2.1請求行 請求行三部分組成 請求方法 url以及版本協議 請求的方法有get head put post trace options delete以及擴充套件方法.2.2請求頭部 ...