2011-10-27 27 views
5

有可能使用一些以太網卡的很大的幀。一種情況是9k幀或巨型幀,其他情況是超巨型幀(據我所知,高達64k)。巨型以太網幀和超大型幀的標頭

什麼是用於這種巨大數據包的幀格式?

據我所知,爲正常幀兩種格式廣泛用於:

Preamble Start_byte dest_mac src_mac  Ethertype/length Payload  CRC  Interframe gap 
10101010x7 10101011 6 bytes  6 bytes  2 bytes   46–1500 bytes 4 bytes 12 bytes 

在一種情況下,以太網類型用於長度,和在第二 - 用於數據包類型。如果這個字段是< 0x0600(十進制1536字節),這是一個長度;如果> = 0x0600 - 它是一種類型。

因此,看起來不可能在這個字段中存儲9000作爲長度。巨型和超巨型幀的長度如何存儲?

回答

5

用於jumbos的格式是相同的。儘管有這個描述,但Ethertype字段通常不用於存儲長度。通常在Ethertype字段中,您不會看到長度;你會看到一個類型。類型由IANA指定的位置:

http://www.iana.org/assignments/ethernet-numbers

通常你會看到下面的類型從表中的一個:

Ethertype   Exp. Ethernet Description   References 
---------------- -------------- -------------------- ---------- 
    2054 0806  -  -  ARP      [IANA] 
    2048 0800  513 1001 Internet IP (IPv4)  [IANA] 
     86DD      IPv6      [IANA] 

有兩個原因,該工作原理:

  • 發送數據包的硬件不依賴於長度字段Layer 2以瞭解Layer 1長度。
  • 某些Layer 3數據包(如ARP)具有已知大小(至少對於硬件/協議地址長度的已知組合,例如通常使用的以太網/ IP)。 IPv4/IPv6數據包在其自己的頭中有一個長度字段。
+0

所以,巨型幀只能用於L3協議有長度字段或具有固定大小? – osgx

+2

@osgx,沒有什麼能阻止你在L1上創建一個大於Ethertype/length域中指定的以太網幀。但是網絡堆棧不一定會將其解釋爲一個大包。所以基本上,是的,您需要使用支持大型數據包(如IPv4/IPv6)的L3協議。 (ARP會很小)。一個簡單的方法可以做到這一點,假設你正確設置你的接口MTU(並且你的網絡驅動程序配置爲較大的幀),可以使用帶'packetsize'參數的'ping'。 – mpontillo