<netinet / ip.h>
struct ip {
unsigned int ip_hl :4 ;
unsigned int ip_v :4 ;
//Internet协议 版本 通用默认值:通常4(IPv4)或6(IPv6)
uint8_t ip_tos ;
//服务类型 控制数据包的优先级。前3位代表路由优先级,后4位代表服务类型
//(延迟,吞吐量,可靠性和成本)。
//通用默认值:0x00(正常)
uint16_t ip_len ;
//总长度必须包含IP 数据报的总长度 。这包括IP, ICMP, TCP 或 UDP 报头和有效负载大小(以字节为单位)。
uint16_t ip_id ;
//ID序列号主要用于重组分段的IP数据报。
//通用默认值:单个数据报 - 任意ID,多个数据报 - 顺序ID。
uint16_t ip_off ;
//片段偏移量用于重新分割碎片数据报
uint8_t ip_ttl ;
//生存时间是丢弃数据包之前跳过的路由器的数量,并返回ICMP错误消息。
uint8_t ip_p ;
//传输层协议。可以是tcp(6),udp(17),icmp(1),
//或IP标头后面的任何协议。查看更多/ etc / protocols。
uint16_t ip_sum ;
//标题校验和。
struct in_addr ip_src ;
//源IP
struct in_addr ip_dst ;
//目的IP
};
/usr/src/linux-2.6.19/include/linux/tcp.h
struct tcphdr {
__be16 source; //源端口
__be16 dest; //目的端口号
__be32 seq; //序列号
__be32 ack_seq; //确认序列号
#if defined(__LITTLE_ENDIAN_BITFIELD)
__u16 res1:4,
doff:4,
fin:1,
syn:1,
rst:1,
psh:1,
ack:1,
urg:1,
ece:1,
cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD)
__u16 doff:4,
res1:4,
cwr:1,
ece:1,
urg:1,
ack:1,
psh:1,
rst:1,
syn:1,
fin:1;
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
__be16 window;
__be16 check;
__be16 urg_ptr;
};
//Mac头部
typedef struct _eth_hdr
{
unsigned char dstmac[6]; //目标mac地址
unsigned char srcmac[6]; //源mac地址
unsigned short eth_type; //以太网类型
}eth_hdr;
//IP头部
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头部
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头部
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头部
typedef struct _icmp_hdr
{
unsigned char icmp_type; //类型
unsigned char code; //代码
unsigned short chk_sum; //16位检验和
}icmp_hdr;