常见的IP头

<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;   



 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值