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

  • 相关阅读:
    C++ 什么是多态
    *和&的使用
    静态链接库与动态链接库
    利尔达CC3200模块烧写程序笔记
    创龙TMS320C6748开发找不到 tl.dsp.evm6748的问题研究
    RTSC和XDCTool的理解
    创龙DSP6748开发板SYS/BIOS的LED闪烁-第2篇
    Coap协议学习笔记-第一篇
    linux进程的学习笔记(未完)
    创龙DSP6748开发板LED闪烁-第一篇
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/2039159.html
Copyright © 2011-2022 走看看