网络协议结构体-02

/*********************************************/  
  
    #define ETHER_ADDR_LEN 6 //NIC物理地址占6字节   
    #define MAXDATA 10240   
    /*

数据包中的TCP包头,IP包头,UDP包头,ARP包,Ethernet包等.
    以及各种表.路由寻址表,地址解析协议表DNS表等
    */

#define ETHERTYPE_IP 0x0800   //IP Protocal   
    #define ETHERTYPE_ARP 0x0806   //Address Resolution Protocal   
    #define ETHERTYPE_REVARP 0x0835   //Reverse Address Resolution Protocal 逆地址解析协议   
    /*********************************************/

//ethernet   
    typedef struct ether_header  
    {  
        u_char ether_dhost[ETHER_ADDR_LEN];  
        u_char ether_shost[ETHER_ADDR_LEN];  
        u_short ether_type;  
    }ETH_HEADER;

//arp   
    typedef struct arphdr  
    {  
        u_short ar_hrd;  
        u_short ar_pro;  
        u_char ar_hln;  
        u_char ar_pln;  
        u_short ar_op;  
    }ARP_HEADER;

//IP报头   
    typedef struct ip  
    {  
        u_int ip_v:4; //version(版本)   
        u_int ip_hl:4; //header length(报头长度)   
        u_char ip_tos;  
        u_short ip_len;  
        u_short ip_id;  
        u_short ip_off;  
        u_char ip_ttl;  
        u_char ip_p;  
        u_short ip_sum;  
        struct in_addr ip_src;  
        struct in_addr ip_dst;  
    }IP_HEADER;

//TCP报头结构体   
    typedef struct tcphdr   
    {  
        u_short th_sport;  
        u_short th_dport;  
        u_int th_seq;  
        u_int th_ack;  
        u_int th_off:4;  
        u_int th_x2:4;  
        u_char th_flags;  
        u_short th_win;  
        u_short th_sum;  
        u_short th_urp;  
    }TCP_HEADER;

#define TH_FIN 0x01   
    #define TH_SYN 0x02   
    #define TH_RST 0x04   
    #define TH_PUSH 0x08   
    #define TH_ACK 0x10   
    #define TH_URG 0x20

//UDP报头结构体*/   
    typedef struct udphdr   
    {  
        u_short uh_sport;  
        u_short uh_dport;  
        u_short uh_ulen;  
        u_short uh_sum;  
    }UDP_HEADER;

/*ARP与ETHERNET生成的报头*/  
    typedef struct ether_arp  
    {  
        struct arphdr ea_hdr;  
        u_char arp_sha[ETHER_ADDR_LEN];  
        u_char arp_spa[4];  
        u_char arp_tha[ETHER_ADDR_LEN];  
        u_char arp_tpa[4];  
    }ETH_ARP;

#define arp_hrd ea_hdr.ar_hrd   
    #define arp_pro ea_hdr.ar_pro   
    #define arp_hln ea_hdr.ar_hln   
    #define arp_pln ea_hdr.ar_pln   
    #define arp_op ea_hdr.ar_op   
    #define ARPHRD 1

//tcp与ip生成的报头   
    typedef struct packet_tcp   
    {  
        struct ip ip;  
        struct tcphdr tcp;  
        u_char data[MAXDATA];  
    }TCP_IP;

//udp与ip生成的报头   
    typedef struct packet_udp   
    {  
        struct ip ip;  
        struct udphdr udp;  
    }UDP_IP;

//ICMP的各种形式   
    //icmpx,x==icmp_type;   
    //icmp报文(能到达目的地,响应-请求包)   
    struct icmp8   
    {  
        u_char icmp_type; //type of message(报文类型)   
        u_char icmp_code; //type sub code(报文类型子码)   
        u_short icmp_cksum;  
        u_short icmp_id;  
        u_short icmp_seq;  
        char icmp_data[1];  
    };

//icmp报文(能返回目的地,响应-应答包)   
    struct icmp0   
    {  
        u_char icmp_type; //type of message(报文类型)   
        u_char icmp_code; //type sub code(报文类型子码)   
        u_short icmp_cksum;  
        u_short icmp_id;  
        u_short icmp_seq;  
        char icmp_data[1];  
    };

//icmp报文(不能到达目的地)   
    struct icmp3   
    {  
        u_char icmp_type; //type of message(报文类型)   
        u_char icmp_code; //type sub code(报文类型子码),例如:0网络原因不能到达,1主机原因不能到达...   
        u_short icmp_cksum;  
        u_short icmp_pmvoid;  
        u_short icmp_nextmtu;  
        char icmp_data[1];  
    };

//icmp报文(重发结构体)   
    struct icmp5   
    {  
        u_char icmp_type; //type of message(报文类型)   
        u_char icmp_code; //type sub code(报文类型子码)   
        u_short icmp_cksum;  
        struct in_addr icmp_gwaddr;  
        char icmp_data[1];  
    };

struct icmp11   
    {  
        u_char icmp_type; //type of message(报文类型)   
        u_char icmp_code; //type sub code(报文类型子码)   
        u_short icmp_cksum;  
        u_int icmp_void;  
        char icmp_data[1];  
    };

时间: 2024-10-11 01:47:07

网络协议结构体-02的相关文章

网络协议结构体

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

网络协议结构

TCP/IP的运输层 TCP/IP这一层提供了两个主要的协议:传输控制协议(冗P)和用户数据报协议(UDP),另外还有一些别的协议,例如用于传送数字化语音的NTCP/IP的运输层 VP协议. 1.传输控制协议TCP TCP提供的是一种可靠的数据流服务.当传送受差错干扰的数据,或基础网络故障,或网络负荷太重而使网际基本传输系统(元连接报文递交系统)不能正常工作时,就需要通过其它的协议来保证通信的可靠.TCP就是这样的协议,它对应于OSI模型的运输层,它在IP协议的基础上,提供端到端的面向连接的可靠

编程思想:如何设计一个好的通信网络协议

当网络中两个进程需要通信时,我们往往会使用 Socket 来实现.Socket 都不陌生.当三次握手成功后,客户端与服务端就能通信,并且,彼此之间通信的数据包格式都是二进制,由 TCP/IP 协议负责传输. 当客户端和服务端取得了二进制数据包后,我们往往需要『萃取』出想要的数据,这样才能更好的执行业务逻辑.所以,我们需要定义好数据结构来描述这些二进制数据的格式,这就是通信网络协议.简单讲,就是需要约定好二进制数据包中每一段字节的含义,比如从第 n 字节开始的 m 长度是核心数据,有了这样的约定后

NetBios 的结构体详解(网络控制块NCB)

对之前网络基础编程用到控制块NCB进行介绍(补充): 在Win32环境下,使用VC++6.0进行NetBIOS程序开发时, 需要用到nb30.h文件和netapi32.lib静态链接库.前者定义了NetBIOS的所有函数声明和常数定义,后者定义了NetBIOS应用. Ncb的结构在nb30.h文件中定义.Ncb结构的定义:Ncb有64个字符,分为14个域(或称为字段)和一个10字节的保留域,表2.1显示了Ncb和它的域. 域名及字节偏移量说明. 各个命令详细说明: 1. 命令 NetBIOS命令

Linux网络编程之socket相关结构体

Linux中的网络编程是通过 Socket (套接字)实现. Socket有三种类型: 流式套接字(SOCK_STREAM) 流式套接字可以提供可靠的.面向连接的通讯流,它使用TCP协议.TCP保证了数据传输的正确性和顺序性. 数据报套接字(SOCK_DGRAM) 数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP. 原始套接字(SOCK_RAM) 原始套接字允许使用IP协议,主要用于新的网络协议的测试等. Socket

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

Swift -- 结构体、类、枚举继承protocol协议

protocol Example{ var simpleDescription:String{get} mutating func adjust() } // 类继承协议 class Simple:Example{ var simpleDescription = "Sing" func adjust(){ println("description: \(simpleDescription)") } } var simple = Simple() simple.sim

【Linux 网络编程】网络IP地址结构体

(1)IPv4套接口地址结构通常也称为"网际套接字地址结构",它以"sockaddr_in"命名,        定义在<netinet/in.h>        struct sockaddr_in{            uint8_t sin_len; //整个sockaddr_in结构体的长度            sa_family sin_family; //指定该地址家族,在这里必须设置为AF_INET            in_port

制作新网络框架快速自动生成消息结构体的编辑器

这两天制作了一个自动生成代码脚本的窗体编辑器 目前还没有做过第一行可以选择生成的脚本类型,分请求消息和回应消息两种结构体脚本 第二行可以手动输入命名空间,第三行手动输入文件的名称,类名与文件名称相同 后面两个ID是消息的ID 下面的Popon的列表根据第一行选择脚本类型不同是变化的 选中string或者数组时会出现长度的输入框 输入好一条字段后点击Add New Field按钮可以添加下一条 当有大于一条字段的时候就可以生成脚本了,选一个路径将其保存 这行代码可以刷新Project文件夹,自动生