zoukankan      html  css  js  c++  java
  • IP头,TCP头,UDP头,MAC帧头定义(转)

    源:IP头,TCP头,UDP头,MAC帧头定义

    一、MAC帧头定义

    /*数据帧定义,头14个字节,尾4个字节*/
    typedef struct _MAC_FRAME_HEADER
    {
        char m_cDstMacAddress[6];    //目的mac地址
        char m_cSrcMacAddress[6];    //源mac地址
        short m_cType;            //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为arp
    }__attribute__((packed))MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;
    
     
    
    typedef struct _MAC_FRAME_TAIL
    {
        unsigned int m_sCheckSum;    //数据帧尾校验和
    }__attribute__((packed))MAC_FRAME_TAIL, *PMAC_FRAME_TAIL;

    二、IP头结构的定义

    /*IP头定义,共20个字节*/
    typedef struct _IP_HEADER 
    {
        char m_cVersionAndHeaderLen;       //版本信息(前4位),头长度(后4位)
        char m_cTypeOfService;            // 服务类型8位
        short m_sTotalLenOfPacket;        //数据包长度
        short m_sPacketID;              //数据包标识
        short m_sSliceinfo;               //分片使用
        char m_cTTL;                  //存活时间
        char m_cTypeOfProtocol;          //协议类型
        short m_sCheckSum;             //校验和
        unsigned int m_uiSourIp;          //源ip
        unsigned int m_uiDestIp;          //目的ip
    } __attribute__((packed))IP_HEADER, *PIP_HEADER ;

    三、tcp头结构定义

    /*TCP头定义,共20个字节*/
    typedef struct _TCP_HEADER 
    {
        short m_sSourPort;              // 源端口号16bit
        short m_sDestPort;              // 目的端口号16bit
        unsigned int m_uiSequNum;         // 序列号32bit
        unsigned int m_uiAcknowledgeNum;  // 确认号32bit
        short m_sHeaderLenAndFlag;        // 前4位:TCP头长度;中6位:保留;后6位:标志位
        short m_sWindowSize;            // 窗口大小16bit
        short m_sCheckSum;              // 检验和16bit
        short m_surgentPointer;           // 紧急数据偏移量16bit
    }__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
    
    
    /*TCP头中的选项定义
    
    kind(8bit)+Length(8bit,整个选项的长度,包含前两部分)+内容(如果有的话)
    
    KIND = 1表示 无操作NOP,无后面的部分
    
      2表示 maximum segment   后面的LENGTH就是maximum segment选项的长度(以byte为单位,1+1+内容部分长度)
    
      3表示 windows scale     后面的LENGTH就是 windows scale选项的长度(以byte为单位,1+1+内容部分长度)
    
      4表示 SACK permitted    LENGTH为2,没有内容部分
    
      5表示这是一个SACK包     LENGTH为2,没有内容部分
    
      8表示时间戳,LENGTH为10,含8个字节的时间戳
    */
    
    typedef struct _TCP_OPTIONS
    {
        char m_ckind;
        char m_cLength;
        char m_cContext[32];
    }__attribute__((packed))TCP_OPTIONS, *PTCP_OPTIONS;


     

    四、UDP头结构的定义

    /*UDP头定义,共8个字节*/
    
    typedef struct _UDP_HEADER 
    {
        unsigned short m_usSourPort;       // 源端口号16bit
        unsigned short m_usDestPort;       // 目的端口号16bit
        unsigned short m_usLength;        // 数据包长度16bit
        unsigned short m_usCheckSum;      // 校验和16bit
    }__attribute__((packed))UDP_HEADER, *PUDP_HEADER;
  • 相关阅读:
    andriod的数据传递方法
    Activity生命周期详解
    android 和主线程有关的小问题
    java解析Excel(xls、xlsx两种格式)
    菜鸟感想一
    springboot 填坑一 springboot java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
    git 第一次提交至仓库
    andriod studio报错 Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration! Emulator: Process finished with exit code 1
    通过以太坊发行代币(token)
    nginx+tomcat 配置负载均衡集群 (转载)
  • 原文地址:https://www.cnblogs.com/LittleTiger/p/4702225.html
Copyright © 2011-2022 走看看