首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

以太網核心協議深度解析:乙太網幀、IP、TCP、UDP 封包結構

     編輯:關於VC++

網絡封包分析是網路除錯與安全審計的基礎技能。本文系統梳理以太網幀格式及上層 IP、TCP、UDP 協議頭部結構,並對照 RFC 標準說明關鍵欄位含義,為開發封包分析工具提供參考。

1. 以太網幀結構

資料在以太網以「幀」為單位傳輸,標準幀格式(不含前導碼與幀定界符):

欄位長度說明
目的 MAC48 bits接收端實體位址
來源 MAC48 bits發送端實體位址
類型/長度16 bits上層協議標識 (參見下表)
資料載荷46-1500 bytesIP 封包等上層資料
FCS32 bits幀檢查序列 (CRC32)

常見 EtherType 值 (RFC 1700)

十六進制協議
0x0800IPv4
0x0806ARP
0x8035RARP
0x809BAppleTalk
0x8137-0x8138Novell IPX
0x814CSNMP
0x86DDIPv6

2. IPv4 資料報頭部

當 EtherType = 0x0800 時,載荷為 IPv4 封包。頭部最小 20 bytes:

欄位位數說明
版本4固定為 4
頭部長度 (IHL)432-bit 字為單位,最小 5 (20 bytes)
服務類型 (TOS)8QoS 優先級/可靠性等
總長度16整個 IP 封包長度 (bytes)
識別16分片重組標識
標誌3DF(不分片)、MF(更多片段)
片段偏移13分片相對原始資料位移 (8 bytes 為單位)
生存時間 (TTL)8路由躍點上限,防止迴路
協議8上層協議:6=TCP, 17=UDP, 1=ICMP
頭部檢查和16僅驗證頭部完整性
來源 IP32發送端 IPv4 位址
目的 IP32接收端 IPv4 位址
選項/填充變動罕見,對齊至 32-bit

3. TCP 區段頭部

IP 協議欄位 = 6 時,載荷為 TCP 區段。頭部最小 20 bytes:

欄位位數說明
來源埠16發送端應用埠號
目的埠16接收端應用埠號
序號32本區段首字節在資料流中的絕對位置
確認號32期望收到的下一字節序號 (ACK 標誌置 1 時有效)
資料偏移4頭部長度 (32-bit 字單位),最小 5
保留6必為 0
控制旗標6URG/ACK/PSH/RST/SYN/FIN
視窗大小16接收緩衝區剩餘容量 (bytes),流控關鍵
檢查和16含偽頭部、頭部、資料
緊急指標16URG=1 時,指示緊急資料結束位置
選項變動MSS、Window Scale、SACK、Timestamp 等

4. UDP 資料報頭部

IP 協議欄位 = 17 時,載荷為 UDP。固定 8 bytes 頭部:

欄位位數說明
來源埠16
目的埠16
長度16UDP 頭部+資料總長度 (最小 8)
檢查和16含偽頭部、頭部、資料,可選 (0 表不計算)

5. 封包分析工具開發提示

  • 位元組序:網路序為大端序,x86 主機需 ntohs()/ntohl() 轉換
  • 對齊陷阱:直接結構體映射可能導致對齊錯誤,建議用 memcpy 逐欄位提取
  • 分片重組:IP 分片需依識別+偏移+MF 標誌重組後再解析上層
  • 校驗和驗證:TCP/UDP 校驗和包含偽頭部 (來源/目的 IP、協議、長度)

掌握上述協議結構,配合 WinPcap/libpcap 或原始 Socket (SOCK_RAW),即可開發出功能完整的網絡監聽與分析工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved