TCP包头

时间:2024-07-09 13:37:44

每发一个包,不论大小协议头会占用一定的空间 TCP头20字节,IP头20字节,MAC头14字节,共54字节

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