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 */

  • 相关阅读:
    zookeeper基本知识
    kafka常见问题
    模板设计模式
    Zookeeper的未授权访问漏洞解决
    Kubernetes准入控制器PodNodeSelector、PodTolerationRestriction
    Kubernetes 基于 Namespace 的物理队列实现,即Namespace下的Pod和Node的强绑定
    银行卡LUHM校验算法(C++)(转)
    银行卡LUHM校验算法(C++)(转)
    Unity导弹自动追踪算法(转)
    基于MicroChip ATmega4808的阿里云IOT连接开发套件方案(转)
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/2039159.html
Copyright © 2011-2022 走看看