您的位置:首页 > 理论基础 > 计算机网络

TCP/IP协议头部结构体(转)

2012-02-29 09:25 246 查看
/ 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; 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct tcp dst