• 以太网包头介绍(转载) 规格严格


    以太网MAC帧有两种标准,一种是IEEE的802.3标准,另外一种是以太网V2标准(注:来自《计算机网络》)。后者用得比较多。

    不过,国外的书中找不到MAC帧这种说法,只说“以太网封装格式”。下面这张图片就是从《TCP/IP详解》中截图出来的。图片中的数字表示字节。一个IP数据包范围是46字节~1500字节,这是有根据的。

    以太网MAC帧格式

    可以看到,IP包与ARP包是独立的,或者说它们下面的就是以太帧了。传输层(或以上)的各种数据包(报文)就是填充到上面那个图中的第2个框图的“IP数据报”的。

    在Linux中,以太网帧头部的结构体如下:

    /* 10Mb/s ethernet header */
    struct ether_header
    {
      u_int8_t  ether_dhost[ETH_ALEN]; /* destination eth addr */
      u_int8_t  ether_shost[ETH_ALEN]; /* source ether addr */
      u_int16_t ether_type;          /* packet type ID field */
    } __attribute__ ((__packed__));

    其中的ETH_ALEN为6,因为地址为6个字节,共48位——这个地址就是常说的物理地址,或MAC地址。它的第3个成员ether_type是以太帧类型,有如下这些:

    /* Ethernet protocol ID's */
    #define ETHERTYPE_PUP  0x0200          /* Xerox PUP */
    #define ETHERTYPE_SPRITE 0x0500  /* Sprite */
    #define ETHERTYPE_IP  0x0800  /* IP */
    #define ETHERTYPE_ARP  0x0806  /* Address resolution */
    #define ETHERTYPE_REVARP 0x8035  /* Reverse ARP */
    #define ETHERTYPE_AT  0x809B  /* AppleTalk protocol */
    #define ETHERTYPE_AARP  0x80F3  /* AppleTalk ARP */
    #define ETHERTYPE_VLAN  0x8100  /* IEEE 802.1Q VLAN tagging */
    #define ETHERTYPE_IPX  0x8137  /* IPX */
    #define ETHERTYPE_IPV6  0x86dd  /* IP protocol version 6 */
    #define ETHERTYPE_LOOPBACK 0x9000  /* used to test interfaces */

  • 相关阅读:
    Struts2之页面取得当前actionName
    Javascript跳转页面和打开新窗口等方法
    数据集+树的一种最简单高效的算法
    TRzCheckTree的使用
    FASTSCRIPT脚本实现多国语言
    econtrol form designer添加三方控件
    内存管理六
    内存管理五
    程序启动时只显示登录窗体
    多标签主界面使用TRzPageControl
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/2039159.html
Copyright © 2020-2023  润新知