1. 程式人生 > >IP頭,TCP頭,UDP頭,MAC幀頭定義

IP頭,TCP頭,UDP頭,MAC幀頭定義

一、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頭定義,共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;