上一篇文章《以太網數據包結構》講解了以太網數據包結構,其中牽扯到了802.3,以太網數據包等名詞,本文將詳解講解一下這方面的內容。網絡
在TCP/IP世界中,以太網IP數據報的封裝是在RFC894中定義的,IEEE802網絡的IP數據報封裝是在RFC1042中定義的。最常使用的封裝格式是RFC 894定義的格式。下圖顯示了兩種不一樣形式的封裝格式。app
從上圖看到,兩種幀格式都採用48bit(6字節)的目的地址和源地址。blog
接下來的2個字節在兩種幀格式中互不相同。接口
在802標準定義的幀格式中,長度字段是指它後續數據的字節長度,但不包括CRC檢驗碼。隊列
以太網的類型字段定義了後續數據的類型。而在802標準定義的幀格式中,類型字段則由後續的子網接入協議的首部給出。開發
幸運的是,802定義的有效長度值與以太網的有效類型值無一相同,這樣,就能夠對兩種幀格式進行區分。get
長度/類型有兩個意義,小於1518,表明後面字段的長度(也就是IEEE802.2/802.3(RFC1042)),大於1518,表明不一樣的類型(以太網的封裝格式(RFC894))it
0800 指IP數據類型io
0806 指ARP協議,經過IP地址得到對應的MAC地址,稱爲地址解析協議數據類型
8035 指RARP協議,經過MAC地址來得到對應的IP地址,稱爲逆向地址解析協議
在以太網幀格式中,類型字段以後就是數據。而在802幀格式中,後面是3字節的802.2LLC,它是由目的服務訪問點(DestinationService Access Point,DSAP)、源服務訪問點(SourceService Access Point,SSAP)和Ctrl字段組成,DSAP和SSAP默認值是0xaa,Ctrl默認是3。再接下來的2個字節類型字段和以太網幀格式同樣。
802.3標準定義的幀和以太網的幀都有最小長度要求。802.3規定數據部分必須至少爲38字節,而對於以太網,則要求最少要有46字節。爲了保證這一點,必須在不足的空間插入填充(pad)字節。
下面只講最經常使用的以太網的封裝格式(RFC894)
特別說明:上面的目的地址和源地址是MAC,不是IP!!!!
MAC地址解析
MAC地址前3個字節:組織身份標記 後3個字節:組織自行分配
第1個字節
b0:0表示單播,1表示組播
b1:0表示被某個組織使用,1表示我的使用
例子:
02-00-00-00-00-01:本地分配
00-50-C2-xx-xx-xx:ST的MAC地址
01-00-5E-xx-xx-xx:IPv4的多播地址
FF-FF-FF-FF-FF-FF:廣播地址
上文說到,以太網和802.3對數據幀的長度都有一個限制,其最大值分別是1500和1492字節。鏈路層的這個特性稱做MTU,最大傳輸單元。不一樣類型的網絡大多數都有一個上限。若是IP層有一個數據包要傳,並且數據的長度比鏈路層的MTU還大,那麼IP層就須要進行分片,把數據包分紅若干片,這樣每一片都小於MTU,IP分片的問題會在講解IP協議的時候講解。下圖列出了一些典型的MTU值。
咱們將用netstat命令打印出網絡接口的MTU。
- i參數將打印出接口信息,- n參數則打印出IP地址,而不是主機名字。
這個命令打印出每一個接口的MTU、輸入分組數、輸入錯誤、輸出分組數、輸出錯誤、衝突以及當前的輸出隊列長度。
點擊查看本文所在的專輯,STM32F207網絡開發