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),就認為接收數據開始。