以太网协议实现RFC894规定的功能,能发送和接收采用RFC894封装格式的帧,同时也能够兼容与RFC894混合的RFC1042(IEEE802)封装格式的帧。
Ethernet: 1980年,数字设备公司(DEC)、Intel公司、施乐(Xerox)公司推出了DIX V1.0标准。1982年又推出了DIX V2.0标准,也就是现在通常所说的Ethernet II, 它采用了CSMA/CD(Carrier Sense, Multiple Access with Collision Detection)含冲突检测的载波侦听多路接入。
802.3:1985年,IEEE推出了"802.3 含冲突检测的载波侦听多路访问(CSMA/CD)访问方式和物理层规范",即802.3CSMA/CD标准
以太网上IP包的封装(RFC 894):
Header
...--------+--------+--------+------+
前导码 | 目的地址| 源地址 | 类型 |
...--------+--------+--------+------+
6 6 2
类型:0x0800---IP 0x0806---ARP 等
IEEE802上IP包的封装(RFC 1042):
Header
...--------+--------+--------+
MAC Header | 802.{3/4/5} MAC头
...--------+--------+--------+
+----------+----------+--------+
| DSAP=K1| SSAP=K1 | Control | 802.2 LLC
+----------+----------+--------+
1 1 1
+--------+--------+---------+-------+
|Protocol Id or Org Code =K2| 类型 | 802.2 SNAP
+--------+--------+---------+-------+
1 1 1 2
The K1 value is 170 (decimal) = 0xAA.
The K2 value is 0 (zero).
The control value is 3 (Unnumbered Information) = 0x03.
EtherType (IP = 2048, ARP = 2054) "Assigned Numbers", RFC-1010
IPX包的封装:
IPX有以下四种封装帧格式:
1. Ethernet II
2. IEEE 802.3 with LLC
3. IEEE 802.3 "raw"
4. IEEE 802.3 with SNAP
1. Ethernet II(以太网v2)
...--------+--------+--------+------+--------+-- ... --+----------+
前导码 |目的地址 | 源地址 | 类型 | IPX头 | Data | FCS(校验) |
...--------+--------+--------+------+--------+-- ... --+----------+
6 6 2
IPX类型 = 0x8137
2. IEEE 802.3 with LLC
...--------+--------+--------+------+------+--------+-- ... --+----------+
前导码 | 目的地址| 源地址 | 类型 | LLC | IPX头 | Data | FCS(校验)|
...--------+--------+--------+------+------+--------+-- ... --+----------+
6 6 2 3
LLC:
--------+--------+--------
| DSAP | SSAP | Ctrl |
--------+--------+--------
1 1 1
IPX DSAP=SSAP=0xE0 ctrl=0x03
DSAP=0xE0意味着包的类型是Novell IPX包
3. IEEE 802.3 "raw"
...--------+--------+--------+------+--------+-- ... --+----------+
前导码 |目的地址 | 源地址 | 长度 | IPX头 | Data | FCS(校验)|
...--------+--------+--------+------+--------+-- ... --+----------+
6 6 2
ipx的出现要早于802.2(LLC),因此早先的ipx包直接封装在802.3上,就有了802.3 raw的封装。注意到这种封装模式没有表示类型的字段。
要说明的是IPX头最开始的两个字节是 0xFFFF,这个值与llc中所有的dsap的定义都不同,所以也用这个值来区分ipx包。在内核eth.c的eth_type_trans()函数的处理中,可以看到如下描述:
/*
* This is a magic hack to spot IPX packets. Older Novell breaks
* the protocol design and runs IPX over 802.3 without an 802.2 LLC
* layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This
* won't work for fault tolerant netware but does for the rest.
*/
if (*(unsigned short *)rawp == 0xFFFF)
return htons(ETH_P_802_3);
4. IEEE 802.3 with SNAP
...--------+--------+--------+------+------+------+--------+-- ... --+----------+
前导码 | 目的地址| 源地址 | 类型 | LLC | SNAP | IPX头 | Data | FCS(校验)|
...--------+--------+--------+------+------+------+--------+-- ... --+----------+
6 6 2 3 5
LLC:
--------+--------+--------
| DSAP | SSAP | Ctrl |
--------+--------+--------
1 1 1
DSAP=SSAP=0xAA ctrl=0x03
使用SNAP,必须设置DSAP=SSAP=0xAA
SNAP:
-----------+--------
| Org Code| type |
-----------+--------
3 2
IPX 类型=0x8137
参考文档:
1. Ethernet/IEEE802.3 附件 ethernet.pdf:http://blog.blogchina.com/upload/2005-01-25/200501251721262581.pdf
2. A Brief History of Frame Types.
http://developer.novell.com/research/appnotes/1993/septembe/05/02.htm