上一篇文章《以太網數據包結構》講解了以太網數據包結構,其中牽扯到了802.3,以太網數據包等名詞,本文將詳解講解一下這方面的內容。
在TCP/IP世界中,以太網IP數據報的封裝是在RFC894中定義的,IEEE802網絡的IP數據報封裝是在RFC1042中定義的。最常使用的封裝格式是RFC 894定義的格式。下圖顯示了兩種不同形式的封裝格式。
從上圖看到,兩種幀格式都采用48bit(6字節)的目的地址和源地址。
接下來的2個字節在兩種幀格式中互不相同。
在802標准定義的幀格式中,長度字段是指它后續數據的字節長度,但不包括CRC檢驗碼。
以太網的類型字段定義了后續數據的類型。而在802標准定義的幀格式中,類型字段則由后續的子網接入協議的首部給出。
幸運的是,802定義的有效長度值與以太網的有效類型值無一相同,這樣,就可以對兩種幀格式進行區分。
長度/類型有兩個意義,小於1518,代表后面字段的長度(也就是IEEE802.2/802.3(RFC1042)),大於1518,代表不同的類型(以太網的封裝格式(RFC894))
0800 指IP數據類型
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網絡開發