TCP/IP協議頭部結構體(轉)

// i386 is little_endian.
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN   (1)   //BYTE ORDER
#else
#error Redefine LITTLE_ORDER
#endif

 

 

//Mac頭部,總長度14字節
typedef struct _eth_hdr
{
unsigned char dstmac[6]; //目標mac地址
unsigned char srcmac[6]; //源mac地址
unsigned short eth_type; //以太網類型
}eth_hdr;

 

 

//IP頭部,總長度20字節
typedef struct _ip_hdr
{
#if LITTLE_ENDIAN
unsigned char ihl:4;   //首部長度
unsigned char version:4, //版本
#else
unsigned char version:4, //版本
unsigned char ihl:4;   //首部長度
#endif
unsigned char tos;   //服務類型
unsigned short tot_len; //總長度
unsigned short id;    //標誌
unsigned short frag_off; //分片偏移
unsigned char ttl;   //生存時間
unsigned char protocol; //協議
unsigned short chk_sum; //檢驗和
struct in_addr srcaddr; //源IP地址
struct in_addr dstaddr; //目的IP地址
}ip_hdr;

 

 

//TCP頭部,總長度20字節
typedef struct _tcp_hdr
{
unsigned short src_port;   //源端口號
unsigned short dst_port;   //目的端口號
unsigned int seq_no;    //序列號
unsigned int ack_no;    //確認號
#if LITTLE_ENDIAN
unsigned char reserved_1:4; //保留6位中的4位首部長度
unsigned char thl:4;    //tcp頭部長度
unsigned char flag:6;    //6位標誌
unsigned char reseverd_2:2; //保留6位中的2位
#else
unsigned char thl:4;    //tcp頭部長度
unsigned char reserved_1:4; //保留6位中的4位首部長度
unsigned char reseverd_2:2; //保留6位中的2位
unsigned char flag:6;    //6位標誌
#endif
unsigned short wnd_size;   //16位窗口大小
unsigned short chk_sum;   //16位TCP檢驗和
unsigned short urgt_p;    //16爲緊急指針
}tcp_hdr;

 

 

 

//UDP頭部,總長度8字節
typedef struct _udp_hdr
{
unsigned short src_port; //遠端口號
unsigned short dst_port; //目的端口號
unsigned short uhl;   //udp頭部長度
unsigned short chk_sum; //16位udp檢驗和
}udp_hdr;

 

 

//ICMP頭部,總長度4字節
typedef struct _icmp_hdr
{
unsigned char icmp_type;   //類型
unsigned char code;    //代碼
unsigned short chk_sum;   //16位檢驗和
}icmp_hdr; 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章