1. 以太网帧格式
以太网数据帧格式由于技术发展的历史原因有5种格式,归类整理,以便学习工作使用。
1、Ethernet II 的以太网帧格式(RFC 894 1984): 以太网Ⅱ Ethernet II RFC 894 1984
帧间隙
每个以太帧之间都要有帧间隙(Interframe Gap),即每发完一个帧后要等待一段时间才能再发另外一个帧,以便让帧接收者对接收的帧作必要的处理(如调整缓存的指针、更新计数、通知对报文进行处理等)。 在以太网标准中规定最小帧间隙是12个字节,其数据为全1 。对于个别的接口,可减少到64(GE)或40比特(10GE),其他的接口都不应该小于12字节。
前导码 (7B)
以太网标准中规定前导码为10101010 10101010 10101010 10101010 10101010 10101010 10101010(二进制),共7字节;
帧开始定界符目 (1B)
帧开始定界符为10101011,共1字节。
目的MAC (6B)
源MAC (6B)
协议类型
负荷
PAD
FCS
注意:
如果PIC卡实际收到的帧间隙、前导码、帧开始界定符,如果跟协议规定的不一样,是不是这个数据帧也会被丢弃?答案是,PIC卡在处理帧间隙时,帧间隙一般可以容忍跟协议规定的不一样(比如不是全1);但前导码、帧开始界定符必须符合协议规定的值,否则当做帧间隙处理,也就是帧被丢弃了。
以太网标准中规定如下帧为无效帧:
a.帧的长度不是整数个字节;
b.用收到的帧检验序列FCS(Frame Check Sequence)查出有错误;
c.收到的帧的负荷长度不在46~1500字节之间。
对于检查出的无效帧就简单的丢弃,以太网不负责重传丢弃的帧。而这些检查,是在接口卡上执行的。
8 0 2 . 3标准定义的帧和以太网的帧都有最小长度要求。 8 0 2 . 3规定数据部分必须至少为3 8字节,而对于以太网,则要求最少要有 4 6字节。(卷一.p16)
Ethernet II以太网帧无LLC子层。
2、Ethernet 802.3 raw帧格式:1983
1983年Novell以当时尚未正式发布的802.3标准为基础,发布其划时代的Netware/86网络套件时采用的私有以太网帧格式;
当两年以后IEEE正式发布802.3标准时情况发生了变化—IEEE在802.3帧头中又加入了802.2 LLC(Logical Link Control)头,这使得Novell的RAW 802.3格式跟正式的IEEE 802.3标准互不兼容;
在Novell的RAW 802.3帧结构中没有标志协议类型的字段,而只有Length 字段(2bytes,取值为0000-05dc,即十进制的0-1500),因此RAW 802.3帧只支持IPX/SPX一种协议;
Ethernet 802.3 raw帧格式 (NOVELL Ethernet 802.3):
目标MAC 6字节
源MAC 6字节
总长度 2字节
0xFFFF 2字节
数据 44-1498字节
FCS 4字节
最小帧长:6+6+2+2+44+4 = 64
最大帧长:6+6+2+2+1498+4 = 1518。
3. Ethernet 802.3 SAP帧格式(IEEE 802.3/802.2 LLC帧格式):1985
这是IEEE 正式的802.3标准,它由Ethernet V2发展而来。它将Ethernet V2帧头的协议类型字段替换为帧长度字段(取值为0000-05dc;十进制的1500 );并加入802.2 LLC头用以标志上层协议,LLC头中包含DSAP,SSAP以及Crontrol字段;
802.2SAP
为了区别802.3数据帧中所封装的数据类型, IEEE引入了802.2SAP和SNAP的标准。它们工作在数据链路层的LLC(逻辑链路控制)子层。
通过在802.3帧的数据字段中划分出被称为服务访问点(SAP)的新区域来解决识别上层协议的问题,这就是802.2SAP。
LLC标准
LLC标准包括两个服务访问点,源服务访问点(SSAP)和目标服务访问点(DSAP)。每个SAP只有1字节长,而其中仅保留了6比特用于标识上层协议,所能标识的协议数有限。因此,又开发出另外一种解决方案,在802.2SAP的基础上又新添加了一个2字节长的类型域(同时将SAP的值置为AA),使其可以标识更多的上层协议类型,这就是802.2SNAP。
常见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]
Ethernet 802.3 SAP帧
在Ethernet 802.3 SAP帧中,将原Ethernet 802.3 raw帧中2个字节的0xFFFF变为各1个字节的DSAP和SSAP,同时增加了1个字节的"控制"字段,构成了802.2逻辑链路控制(LLC)的首部。LLC提供了无连接(LLC类型1)和面向连接(LLC类型2)的网络服务。LLC1是应用于以太网中,而LLC2应用在IBM SNA网络环境中。
目MAC 6字节
源MAC 6字节
总长 2字节
DSAP 1字节
SSAP 1字节
控制 1字节
数据 43-1497字节
FCS 4字节
最小帧长:6+6+2+1+1+1+43+4 = 64。
最大帧长:6+6+2+1+1+1+1497+4 = 1518。
4、802.3标准的以太网帧格式 (RFC1042 1988):
协议标准802.3 SNAP
长度:包含他之后除了CRC的部分。
DSAP:0XAA (固定值)
SSAP:0XAA (固定值)
control:全0 (固定值)
type:上层协议类型
Ethernet 802.3 SNAP帧格式: 标准以太网 802.3 RFC 1042 1988
目标MAC 源MAC 总长 0xAA 0xAA 0x03 OUI_ID 类型 数据 FCS
6字节 6字节 2字节 1字节 1字节 1字节 3字节 2字节 38-1492字节 4字节
最小:6+6+2+1+1+1+3+2+38+4 = 64
最大:6+6+2+1+1+1+3+2+1492+4 = 1518
Ethernet V2 比 IEEE802.3 更适合于传输大量的数据,但Ethernet V2缺乏数据链路层的控制,不利于传输需要严格传输控制的数据,这也正是IEEE802.3的优势所在,越需要严格传输控制的应用,越需要用 IEEE802.3或SNAP来封装,但IEEE802.3也不可避免的带来数据装载量的损失,因此该格式的封装往往用在较少数据量承载但又需要严格控制传输的应用中。
在实际应用中,我们会发现,大多数应用的以太网数据包是EthernetV2的帧(如HTTP、FTP、SMTP、POP3等应用),而交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3的帧,VLANTrunk协议如802.1Q和Cisco的CDP(思科发现协议)等则是采用IEEE802.3 SNAP的帧。如STP对应的帧如下,抓包格式为IEEE 802.3,LLC中的DSAP=SSAP=0X42普通的TCP报文如下,抓包显示为ETHERNET II格式,其实LLC中DSAP=0X06
5、Ethernet 1 帧格式和EthernetⅡ是一样的。只是EthernetⅡ物理接口和电器特性在EthernetⅠ上有所更改。
以太网历史:
对于以太网的帧格式种类多达5中有其历史原因:
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
1985 IEEE推出IEEE 802.3规范SAP后来为解决EthernetII与802.3帧格式的兼容问题推出折衷的Ethernet SNAP格式。
DATE 2019-06-13
2. 51单片机接入以太网的几种方案
1、MAC+PHY方案
所谓的TCP/IP协议栈是一系列网络协议的统称,不仅包括我们熟知的TCP协议和IP协议。
还有网络层的ICMP(Internet控制报文)协议、IGMP(Internet组管理)协议、ARP(地址解析)协议,传输层的UDP(用户数据包)协议,应用层的HTTP(超文本传输)协议、DNS(域名解析)协议、FTP(文件传送)协议、SMTP(简单邮件管理)协议等等。
传统的以太网接入方案由MCU+MAC+PHY再加入网络接口实现以太网的物理连接,通过在主控芯片中植入TCP/IP协议代码实现通信及上层应用。
应用这种软件TCP/IP协议栈方式实现的比较成熟方案有ENC28J60,CS8900A,DM9000,当然也有像STM32F107这类(内部自带MAC)+PHY等方案。
2、硬件协议栈芯片方案
由MCU+硬件协议栈芯片(内含MAC和PHY)直接加网络接口,便可方便的实现单片机联网,所有的处理TCP/IP协议的工作都是通过这位MCU的“小秘书”——硬件协议栈芯片来完成。
以太网芯片的内核由传输层的TCP、UDP、ICMP、IGMP等协议、网络层的IP、ARP、PPPoE等协议以及链路层的MAC构成,再加上物理层的PHY和外围的寄存器、内存、SPI接口组成了这一整套硬件化的以太网解决方案。
这套硬件TCP/IP协议栈代替了以往的MCU来处理这些中断请求,即MCU只需要处理面向用户的应用层数据即可,传输层、网络层、链路层及物理层全部由外围WIZnet的芯片完成。
这套方案从硬件开销和软件开发两个方面来简化前面所述的五层网络模型,简化产品开发方案。这样一来,工程师们就不必再面对繁琐的通信协议代码,只需要了解简单的寄存器功能以及Socket编程便能完成产品开发工作的的网络功能开发部分。
(2)以太网fcs生成工具扩展阅读
以太网协议:
一个标准的以太网物理传输帧由七部分组成。
PR SD DA SA TYPE DATA FCS
同步位 分隔位 目的地址 源地址 类型字段 数据段 帧校验序列 7 1 6 6 2 46~1500 4
除了数据段的长度不定外,其他部分的长度固定不变。数据段为46~1500字节。以太网规定整个传输包的最大长度不能超过1514字节(14字节为DA、SA、TYPE),最小不能小于60字节。
除去DA、SA、TYPE14字节,还必须传输46字节的数据,当数据段的数据不足46字节时需填充,填充字符的个数不包括在长度字段里;超过1500字节时,需拆成多个帧传送。
事实上,发送数据时,PR、SD、FCS及填充字段这几个数据段由以太网控制器自动产生;而接收数据时,PR、SD被跳过,控制器一旦检测到有效的前序字段(即PR、SD),就认为接收数据开始。