zoukankan      html  css  js  c++  java
  • 以太网包头介绍(转载) 规格严格

    以太网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 */

  • 相关阅读:
    重置mysql数据库密码
    windows下IIS+PHP解决大文件上传500错问题
    ecmobile中IOS版本中界面文字不显示的解决
    linux下重置mysql的root密码
    nginx下rewrite参数超过9个的解决方法
    android模拟器停在Waiting for HOME解决方案
    android模拟器没法通过localhost访问本地服务器的解决
    zend studio导入svn项目后不能代码提示的解决
    排序(1)

  • 原文地址:https://www.cnblogs.com/diyunpeng/p/2039159.html
Copyright © 2011-2022 走看看