C/C++ 网络编程: 各类协议数据结构

Posted 只缘心高嫌地窄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ 网络编程: 各类协议数据结构相关的知识,希望对你有一定的参考价值。

宏定义

  • 一些宏定义
#define EPT_IP   0x0800    /* type: IP */
#define EPT_ARP   0x0806    /* type: ARP */
#define EPT_RARP 0x8035    /* type: RARP */
#define ARP_HARDWARE 0x0001    /* Dummy type for 802.3 frames */
#define ARP_REQUEST 0x0001    /* ARP request */
#define ARP_REPLY 0x0002    /* ARP reply */

定义以太网首部

typedef struct ehhdr 

    unsigned char eh_dst[6];   /* destination ethernet addrress */
    unsigned char eh_src[6];   /* source ethernet addresss */
    unsigned short eh_type;   /* ethernet pachet type */
EHHDR, *PEHHDR;

定义以太网arp字段

typedef struct arphdr

    //arp首部
    unsigned short arp_hrd;    /* format of hardware address */
    unsigned short arp_pro;    /* format of protocol address */
    unsigned char arp_hln;    /* length of hardware address */
    unsigned char arp_pln;    /* length of protocol address */
    unsigned short arp_op;     /* ARP/RARP operation */

    unsigned char arp_sha[6];    /* sender hardware address */
    unsigned long arp_spa;    /* sender protocol address */
    unsigned char arp_tha[6];    /* target hardware address */
    unsigned long arp_tpa;    /* target protocol address */
ARPHDR, *PARPHDR;

定义整个arp报文包,总长度42字节

typedef struct arpPacket

    EHHDR ehhdr;
    ARPHDR arphdr;
 ARPPACKET, *PARPPACKET;

定义ip报头数据结构

typedef struct _iphdr

    byte ver_len;  //版本4位,头长度4位,报头长度以32位为一个单位
    byte type;   //类型8位
    byte length[2];  //总长度,16位,指出报文的以字节为单位的总长度
    //报文长度不能超过65536个字节,否则认为报文遭到破坏
    byte id[2];   //报文标示,用于多于一个报文16位
    byte flag_offset[2];//标志,3位 数据块偏移13位
    byte time;   //生存时间,8位
    byte protocol;  //协议,8位
    byte crc_val[2]; //头校验和,16位
    byte src_addr[4]; //源地址,32位
    byte tar_addr[4]; //目标地址,32位
    byte options[4]; //选项和填充,32位
IP_HEADER;

定义TCP报头

typedef struct _tcphdr

    byte source_port[2]; //发送端端口号,16位
    byte dest_port[2];  //接收端端口号,16位
    byte sequence_no[4]; //32位,标示消息端的数据位于全体数据块的某一字节的数字
    byte ack_no[4];   //32位,确认号,标示接收端对于发送端接收到数据块数值
    byte offset_reser_con[2];//数据偏移4位,预留6位,控制位6为
    byte window[2];   //窗口16位
    byte checksum[2];  //校验码,16位
    byte urgen_pointer[2]; //16位,紧急数据指针
    byte options[3];  //选祥和填充,32位
TCP_HEADER;

定义伪首部

struct
    unsigned long saddr;  //源地址
    unsigned long daddr;  //目的地址
    char mbz;   //置空
    char ptcl;    //协议类型
    unsigned short tcpl;  //TCP长度
psd_header;

以上是关于C/C++ 网络编程: 各类协议数据结构的主要内容,如果未能解决你的问题,请参考以下文章

UDP 首部的格式

TCP 首部格式

第7章 网络层协议_网络层首部

TCP首部格式

计算机网络—— 网络层(789):IPv4数据报的首部格式网际控制报文协议ICMP虚拟专用网VPN与网络地址转换NAT

【网络协议笔记】第四层:传输层(Transport)TCP协议简介(1)