以太网帧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. 浏览器 窗口 scrollTop 的兼容性问题

    window.pageYOffset 被所有浏览器支持除了 IE 6, IE 7, IE 8, 不关doctype的事, 注IE9 开始支持此属性. window.scrollY 被Firefox, ...

  2. javascriptDOM编程艺术_学习笔记_知识点 DOM

    第三章   getElementById    返回一个与那个有着给定id属性值的元素节点对应的对象. document.getElementById(id) 下面一个例子: document.get ...

  3. codeforces 616E. Sum of Remainders 数学

    题目链接 给两个数n, m. 求n%1+n%2+.......+n%m的值. 首先, n%i = n-n/i*i, 那么原式转化为n*m-sigma(i:1 to m)(n/i*i). 然后我们可以发 ...

  4. python初探-collections容器数据类型

    collections容器数据类型是对基本数据类型的补充,简单介绍下计数器.有序字典.默认字典.可命名元祖.队列. 计数器(Counter) Counter是对字典类型的补充,用于追踪值得出现次数 c ...

  5. 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)

    申明:此文为转载(非原创),文章分析十分透彻,已添加原文链接,如有任何侵权问题,请告知,我会立即删除. 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大 ...

  6. ASP.NET MVC进阶之路:依赖注入(Di)和Ninject

    0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点.在程序运行过程中,客户 ...

  7. html常用标签有哪些?

    html看似复杂,其实常用的标签并不多,这里总共介绍一些html的常用标签 文字处理: ①标题:<h1> to <h6> ②段落:<p>文字段落</p> ...

  8. Qt官方开发环境生成的exe发布方式--使用windeployqt(windeployqt是单独的程序,放在低版本qt4目录下也可以运行的)

    Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里自带了一个 ...

  9. block 解析 - 局部变量

    局部变量 block内使用局部变量,一般都是截获变量(只读),截获离block初始化最近的一次的值. 引用官方文档: Stack (non-static) variables local to the ...

  10. poj1077 Eight【爆搜+Hash(脸题-_-b)】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4298840.html   ---by 墨染之樱花 题目链接:http://poj.org/pr ...