以太网帧http://blog.csdn.net/guoshaobei/article/details/4768514

Ethernet的帧格式 (转)  http://jiangqiaosun.blog.163.com/blog/static/260981820101022114138277/

数据链路层 http://rabbit.xttc.edu.cn/rabbit/htm/artical/2010831172946.shtml

Ethernet Frame http://www.infocellar.com/networks/ethernet/frame.htm (这是以上四篇中,写的最精炼的文章)

1. Ethernet帧格式的发展

1980 DEC,Intel,Xerox制订了Ethernet I的标准
1982 DEC,Intel,Xerox又制订了Ehternet II的标准
1982 IEEE开始研究Ethernet的国际标准802.3
1983 迫不及待的Novell基于IEEE的802.3的原始版开发了专用的Ethernet帧格式 (因此802.3 Raw 先于 IEEE 802.3 出台.)
1985 IEEE推出IEEE 802.3规范,

后来为解决EthernetII与802.3帧格式的兼容问题,推出折衷的Ethernet SNAP格式

(其中早期的Ethernet I已经完全被其他帧格式取代了 ,所以现在Ethernet只能见到后面几种Ethernet的帧格式,
现在大部分的网络设备都支持这几种Ethernet的帧格式,
如:cisco的路由器再设定Ethernet接口时可以指定不同的以太网的帧格式:arpa,sap,snap,novell-ether)

2. 不同厂商对这几种帧格式通常有不同的叫法,比如:

Frame Type                        Novell公司                  Cisco 公司
Ethernet Version 2              Ethernet_II                arpa
802.3 Raw                          Ethernet_802.3          novell_ether
IEEE 802.3/802.2                Ethernet_802.2          sap
IEEE 802.3/802.2 SNAP       ETHERNET_SNAP        snap

3. Ethernet V2帧与IEEE 802.3帧的比较

因为这两种帧是我们在现在的局域网里最常见的两种帧,因此,我们对它们进行一些比较。

Ethernet V2可以装载的最大数据长度是1500字节,而IEEE 802.3可以装载的最大数据是1492字节(SNAP)或是1497字节; Ethernet V2不提供MAC层的数据填充功能,而IEEE 802.3不仅提供该功能,还具备服务访问点(SAP)和SNAP层,能够提供更有效的数据链路层控制和更好的传输保证。那么我们可以得出这样的结 论:Ethernet V2比IEEE802.3更适合于传输大量的数据,但Ethernet V2缺乏数据链路层的控制,不利于传输需要严格传输控制的数据,这也正是IEEE802.3的优势所在,越需要严格传输控制的应用,越需要用 IEEE802.3或SNAP来封装,但IEEE802.3也不可避免的带来数据装载量的损失,因此该格式的封装往往用在较少数据量承载但又需要严格控制 传输的应用中。

在实际应用中,我们会发现,大多数应用的以太网数据包是Ethernet V2的帧(如HTTP、FTP、SMTP、POP3等应用),而交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3的帧,VLAN Trunk协议如802.1Q和Cisco的CDP(思科发现协议)等则是采用IEEE802.3 SNAP的帧。大家有兴趣的话,可以利用Sniffer等协议分析工具去捕捉数据包,然后解码查看是不是这样的。

4. 如何区分不同的帧格式

Ethernet中存在这四种Frame那些网络设备又是如何识别的呢? 如何区分EthernetII与其他三种格式的Frame.

  Ethernet II (DIX),  IEEE 802.3 (LLC), and SNAP Frames

如果帧头跟随source mac地址的2 bytes的值大于1500,则此Frame为EthernetII格式的; [source  dest  xx_2bytes>1500 ]
接着比较之后紧接着的两bytes如果为0xFFFF则为Ethernet_802.3类型的Frame; [source  dest  xx_2bytes yy_2bytes=0xffff  ]
如果为0xAAAA则为ETHERNET_SNAP格式的Frame; [source  dest  xx_2bytes yy_2bytes=0xaaaa ]
如果都不是则为Ethernet_802.2格式的帧. [source  dest  xx_2bytes yy_2bytes=others]

5. 几种以太网帧结构图解

5.1 Ethernet II  (Ethernet Version 2,  Ethernet_II,  arpa)

Ethernet II类型以太网帧的最小长度为64字节(6+6+2+46+4),最大长度为1518字节(6+6+2+1500+4)。

(1)  前12字节分别标识出发送数据帧的源节点MAC地址和接收数据帧的目标节点MAC地址。

(2)  接下来的2个字节标识出以太网帧所携带的上层数据类型,类型字段的最小值是0x0600[大于1500, 根据这一点可以区分Ethernet IIEthernet_802.3].

0x0800   IP协议数据,

0x86dd   IPv6协议数据,

0x809B   AppleTalk协议数据,

0x8138   Novell类型协议数据等。

0x0806   ARP

0x0600   XNS (Xerox)

0x6003   DECNET

(3)  在不定长的数据字段后是4个字节的帧校验序列(Frame. Check Sequence,FCS),采用32位CRC循环冗余校验对从"目标MAC地址"字段到"数据"字段的数据进行校验。

 
以太网最小发送帧长为64字节,按照标准,10Mbps以太网采用中继器时,连接的最大长度是2500米,最多经过4个中继器,因此规定对10Mbps以太网一帧的最小发送时间为51.2微秒。这段时间所能传输的数据为512位,因此也称该时间为512位时。这个时间定义为以太网时隙,或冲突时槽。512 位=64字节,这就是以太网帧最小64字节的原因。现在基本上都是交换机或路由器直接连接计算机,集线器连接很少存在了,在交换机或路由器直接连接计算机时每个计算机与设备之间都是一个独立的冲突域,是不会产生冲突的,因此,此时发送长度小于64字节的帧理论上是可以的,但为了遵循原有标准,考虑到有些集线器设备依旧在使用,因此保持最小帧长64字节不变。
 
 
5.2 Ethernet_802.3  (802.3 Raw ,  Ethernet_802.3,  novell_ether)

目标地址:此数据包的目标MAC地址。
源地址:此数据包的源MAC地址。
长度:帧包含的数量必须或等于1500。(在Ethernet 802.3 raw类型以太网帧中,原来Ethernet II类型以太网帧中的类型字段被"总长度"字段所取代,它指明其后数据域的长度,其取值范围为:46-1500。)
数据:高层协议(IPX/SPX)、数据和填充符,范围在46~1500字节。(长度紧跟着的接下来的2个字节是固定不变的16进制数0xFFFF,它标识此帧为Novell以太类型数据帧。)

   FCS:数据帧校验序列,用于确定数据包在传输过程中是否损坏

5.3 Ethernet_802.2 (IEEE 802.3/802.2, Ethernet_802.2, sap)

Ethernet 802.2协议是IEEE正式的802.3标准,它由Ethernet II发展而来。

Ethernet 802.2将Ethernet II帧头的协议类型字段替换为帧长度字段和LLC-802.2头(用以标记上层协议)。LLC头包含目的服务访问点(DSAP)、源服务访问点 (SSAP)和控制(Control)字段。

目标地址:此数据包的目标mac地址;
源地址:此数据包的源mac地址;
长度:帧包含的数据量必须小于或等于1500(16进制的05DC);
DSAP:目标服务存取点(Destination  Service Access Point);
SSAP:源服务存取点(Source Service Access  Point);

常见SAP值:
0:Null LSAP[IEEE] 
4:SNA Path Control[IEEE] 
6:DOD IP[79,JBP] 
AA:SNAP[IEEE] 
FE:ISO DIS 8473[52,JXJ] 
FF:Global DSAP[IEEE]

控制:无连接或面向连接的C;
数据:高层协议、数据和填充符;
FCS:数据帧校验序列,用于确定数据包在传输过程中是否损坏。

5.4 ETHERNET_SNAP (IEEE 802.3/802.2 SNAP, ETHERNET_SNAP,    snap)

目标地址:.
源地址:.
长度:帧包含的数据量必须小于或等于1500(16进制的05DC);
DSAP:目标服务存取点(Destination  Service Access Point) = 0xAA;
SSAP:源服务存取点(Source Service Access  Point)= 0xAA;
控制:无连接或面向连接的C;
厂商代码:.
协议类型: 封装在 IEEE 802 网络中的协议.

IP    =  0x0800
ARP =  0x0806

数据:高层协议、数据和填充符;
FCS:数据帧校验序列,用于确定数据包在传输过程中是否损坏。

========================

洗脑图:

SNAP(Sub Network Access Prototol)

ETHERNET帧结构的更多相关文章

  1. Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)

    Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...

  2. CAN总线学习记录之二:系统结构与帧结构

    CAN总线系统结构 CAN 控制器  接收控制单元中微处理器发出的数据,处理数据并传给 CAN 收发器 CAN 收发器 将数据传到总线 or 从总线接收数据给 CAN 控制器 CAN 数据传递终端 避 ...

  3. CAN协议,系统结构和帧结构

    CAN:Controller Area Network,控制器局域网 是一种能有效支持分布式控制和实时控制的串行通讯网络. CAN-bus: Controller Area Network-bus,控 ...

  4. H.264帧结构详解

    6.1.2.源码简单浏览 6.1.3.重点1:h.264帧结构6.1.4.重点2:帧结构分析软件的使用6.1.5.重点3:rtsp网络编程6.1.6.重点4:wireshark网络抓包工具的使用 6. ...

  5. 深入理解java虚拟机(十) Java 虚拟机运行时栈帧结构

    运行时栈帧结构 栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素.每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程. 每一个栈帧在编 ...

  6. C语言函数调用及栈帧结构

    source:http://blog.csdn.net/qq_29403077/article/details/53205010 一.地址空间与物理内存 (1)地址空间与物理内存是两个完全不同的概念, ...

  7. 5G/NR 帧结构

    原文链接:http://www.sharetechnote.com/html/5G/5G_FrameStructure.html 在学术界和3GPP中对帧结构进行了长时间的讨论,现在我们就NR(5G) ...

  8. 分析Ethernet标准和Ieee802.3标准规定的MAC层帧结构

    分析所用软件下载:Wireshark-win32-1.10.2.exe 阅读导览 1. 学习Wireshark的安装与使用 2. 熟悉Wireshark的操作界面与功能 3. 设计应用以获取以太网链路 ...

  9. 图解JVM字节码执行引擎之栈帧结构

    一.执行引擎      “虚拟机”的概念是相对于“物理机”而言的,这两种“机器”都有执行代码的能力.物理机的执行引擎是直接建立在硬件处理器.物理寄存器.指令集和操作系统层面的:而“虚拟机”的执行引擎是 ...

随机推荐

  1. Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socke ...

  2. BZOJ 3444: 最后的晚餐( )

    把暗恋关系看成无向边, 那某个点度数超过2就无解.存在环也是无解.有解的话对连通分量进行排列就行了. ------------------------------------------------- ...

  3. MFC 简单实现 DES 算法

    前言 徐旭东老师说过学者就应该对知识抱有敬畏之心,所以我的博客的标题总喜欢加上"简单"二字,就是为了提醒自己,自己所学知识只是皮毛,离真理还远矣. DES 算法 DES算法是密码体 ...

  4. Windows10笔记本双显卡导致的启动黑屏解决办法之一

    参考链接:http://www.zhihu.com/question/33662311 大概就是关掉ulps. ulps,显卡的多核心超低功率状态,节能用的,AMD出的双显卡的一种节能方案.不过,与某 ...

  5. viewpager的layout_width="wrap_content"无效问题

    在viewpager当中直接使用layout_width="wrap_content"是无效的,扩展了一下.解决这个问题. package com.soulagou.ui; imp ...

  6. TableLayoutPanel 的使用

    VS自带控件TableLayoutPanel的功能应用网上都有资料.下面是使用中的一些问题. 1.动态加载控件时使用SetRowSpan.SetColumnSpan方法会使得界面响应缓慢 解决方案: ...

  7. 一张图比較 Docker 和 Git:镜像管理设计理念

    Docker 的镜像管理设计中大量借鉴了 Git 的理念. 以下这张图将对两者的核心概念和操作进行比較,有助于大家高速掌握管理 Docker 镜像的正确方式. watermark/2/text/aHR ...

  8. C++设计模式实现--组合(Composite)模式

    一. 举例 这个样例是书上的,如果有一个公司的组结结构例如以下: 它的结构非常像一棵树,当中人力资源部和財务部是没有子结点的,详细公司才有子结点. 并且最关健的是,它的每一层结构非常相似. 代码实现例 ...

  9. 【Java】【Fulme】Flume-NG源代码阅读之SpoolDirectorySource

    org.apache.flume.source.SpoolDirectorySource是flume的一个经常使用的source,这个源支持从磁盘中某目录获取文件数据.不同于其它异步源,这个源可以避免 ...

  10. c基础知识复习

    C的发展历程 C原本是为了开发UNIX操作系统而设计的语言:如此说,应该C比UNIX更早问世,而事实并非如此,最早的UNIX是由汇编写的: C语言本来是美国人开发的,解读C的声明,最好还是用英语来读: ...