ETHERNET帧结构
以太网帧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 II和Ethernet_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地址"字段到"数据"字段的数据进行校验。
目标地址:此数据包的目标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帧结构的更多相关文章
- Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)
Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...
- CAN总线学习记录之二:系统结构与帧结构
CAN总线系统结构 CAN 控制器 接收控制单元中微处理器发出的数据,处理数据并传给 CAN 收发器 CAN 收发器 将数据传到总线 or 从总线接收数据给 CAN 控制器 CAN 数据传递终端 避 ...
- CAN协议,系统结构和帧结构
CAN:Controller Area Network,控制器局域网 是一种能有效支持分布式控制和实时控制的串行通讯网络. CAN-bus: Controller Area Network-bus,控 ...
- 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. ...
- 深入理解java虚拟机(十) Java 虚拟机运行时栈帧结构
运行时栈帧结构 栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素.每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程. 每一个栈帧在编 ...
- C语言函数调用及栈帧结构
source:http://blog.csdn.net/qq_29403077/article/details/53205010 一.地址空间与物理内存 (1)地址空间与物理内存是两个完全不同的概念, ...
- 5G/NR 帧结构
原文链接:http://www.sharetechnote.com/html/5G/5G_FrameStructure.html 在学术界和3GPP中对帧结构进行了长时间的讨论,现在我们就NR(5G) ...
- 分析Ethernet标准和Ieee802.3标准规定的MAC层帧结构
分析所用软件下载:Wireshark-win32-1.10.2.exe 阅读导览 1. 学习Wireshark的安装与使用 2. 熟悉Wireshark的操作界面与功能 3. 设计应用以获取以太网链路 ...
- 图解JVM字节码执行引擎之栈帧结构
一.执行引擎 “虚拟机”的概念是相对于“物理机”而言的,这两种“机器”都有执行代码的能力.物理机的执行引擎是直接建立在硬件处理器.物理寄存器.指令集和操作系统层面的:而“虚拟机”的执行引擎是 ...
随机推荐
- AC自动机妙用
理解题意之后,很自然的想到了用AC自动机搞,结果网上一搜,全是暴搜,按照自己的思想,AC自动机搞起,果然在提交了数次之后,看到了Accept. AC自动机需要三个步骤: 第一步:建立字典树: 第二步: ...
- Java学习之异常处理
在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出),Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性. Throwabl ...
- HDU3535-AreYouBusy
描述: As having become a junior, xiaoA recognizes that there is not much time for her to AC problems, ...
- java 去除数组重复数据,并输出重复数据值
/** * 去除重复数据 * @author Sunqinbo */ public class RemoveDuplicateData { public static void main(String ...
- shell学习-读取输入
功能:读取输入,打印:如果长度小于MINLEN,那么输出空格. #!/bin/bash # paragraph-space.sh # Insert a blank line between parag ...
- poj 2398 计算几何
#include <iostream> #include<cstdio> #include<cstring> #include <algorithm> ...
- asp.net mvc重写RequestValidator
/// <summary> /// <httpRuntime requestValidationType="xxx.CustomRequestValidator" ...
- rsync、ssh备份
Linux系统需求 为了实现这个备份程序,需要准备一个外部驱动器.您可以将备份写到一个外部USB磁盘,但这样做效率不高.因此,我假设您将备份写到位于网络某处的服务器中.这台服务器要为带有SSH和rsy ...
- 【网络协议】TCP中的四大定时器
前言 对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器.坚持定时器.保活定时器.2MSL定时器. 重传定时器 非常明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间 ...
- js中的setTimeout和setInterval
在html页面中要使用自动刷新功能时,可以是使用js中setTimeout和setInterval: 一.使用方法 setTimeout的使用setTimeout('要调用的Js方法', 调用的延迟时 ...