TCP/IP包格式詳解


文章參考地址:http://blog.chinaunix.net/uid-20698826-id-4700710.html http://blog.csdn.net/mrwangwang/article/details/8537775

一、MAC幀頭定義

/*數據幀定義,頭14個字節,尾4個字節*/
 typedef struct _MAC_FRAME_HEADER
 {
  char m_cDstMacAddress[6];    //目的mac地址
  char m_cSrcMacAddress[6];    //源mac地址
  short m_cType;            //上一層協議類型,如0x0800代表上一層是IP協議,0x0806為arp
 }__attribute__((packed))MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;

 

typedef struct _MAC_FRAME_TAIL
 {
  unsigned int m_sCheckSum;    //數據幀尾校驗和
 }__attribute__((packed))MAC_FRAME_TAIL, *PMAC_FRAME_TAIL;

二、IP頭結構的定義

/*IP頭定義,共20個字節*/
 typedef struct _IP_HEADER 
 {
  char m_cVersionAndHeaderLen;       //版本信息(前4位),頭長度(后4位)
  char m_cTypeOfService;            // 服務類型8位
  short m_sTotalLenOfPacket;        //數據包長度
  short m_sPacketID;              //數據包標識
  short m_sSliceinfo;               //分片使用
  char m_cTTL;                  //存活時間
  char m_cTypeOfProtocol;          //協議類型
  short m_sCheckSum;             //校驗和
  unsigned int m_uiSourIp;          //源ip
  unsigned int m_uiDestIp;          //目的ip
 } __attribute__((packed))IP_HEADER, *PIP_HEADER ;

三、tcp頭結構定義

*TCP頭定義,共20個字節*/
 typedef struct _TCP_HEADER 
 {
  short m_sSourPort;              // 源端口號16bit
  short m_sDestPort;              // 目的端口號16bit
  unsigned int m_uiSequNum;         // 序列號32bit
  unsigned int m_uiAcknowledgeNum;  // 確認號32bit
  short m_sHeaderLenAndFlag;        // 前4位:TCP頭長度;中6位:保留;后6位:標志位
  short m_sWindowSize;            // 窗口大小16bit
  short m_sCheckSum;              // 檢驗和16bit
  short m_surgentPointer;           // 緊急數據偏移量16bit
 }__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
/*TCP頭中的選項定義

kind(8bit)+Length(8bit,整個選項的長度,包含前兩部分)+內容(如果有的話)

KIND = 1表示 無操作NOP,無后面的部分

  2表示 maximum segment   后面的LENGTH就是maximum segment選項的長度(以byte為單位,1+1+內容部分長度)

  3表示 windows scale     后面的LENGTH就是 windows scale選項的長度(以byte為單位,1+1+內容部分長度)

  4表示 SACK permitted    LENGTH為2,沒有內容部分

  5表示這是一個SACK包     LENGTH為2,沒有內容部分

  8表示時間戳,LENGTH為10,含8個字節的時間戳
 */
typedef struct _TCP_OPTIONS
 {
  char m_ckind;
  char m_cLength;
  char m_cContext[32];
 }__attribute__((packed))TCP_OPTIONS, *PTCP_OPTIONS;

四、UDP頭結構的定義

UDP在IP報文中的位置如圖所示

image

UDP報頭由4個域組成,其中每個域各占用2個字節,具體如下:

image

*UDP頭定義,共8個字節*/

typedef struct _UDP_HEADER 
{
 unsigned short m_usSourPort;       // 源端口號16bit
 unsigned short m_usDestPort;       // 目的端口號16bit
 unsigned short m_usLength;        // 數據包長度16bit
 unsigned short m_usCheckSum;      // 校驗和16bit
}__attribute__((packed))UDP_HEADER, *PUDP_HEADER;

五、TCP/IP報文格式

 

圖中括號中的數字代表的是當前域所占的空間大小,單位是bit位。

黃色的是數據鏈路層的頭部,一共14字節

綠色的部分是IP頭部,一般是20字節

紫色部分是TCP頭部,一般是20字節


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM