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

  • 相关阅读:
    无线网络的切换bat
    远程桌面远程服务器拷贝失灵 解决方法
    不能将 Null 值赋给类型为 (不可为 null 的值类型)的成员。解决方法
    应该改变面向对象的说法
    Windows 2012 装 Remote Desktop Organizer 无法连接到其他远程服务器
    JavaScript 运行时错误: 无法获取未定义或 null 一种解决方案
    ssd硬盘u盘装win7扩展文件时0x80070570错误
    swfit-小知识Demo
    ios-简单算法
    swfit-扩展语法
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/2039159.html
Copyright © 2011-2022 走看看