在802.11中经常看到MSDU(MAC service Data Unit)这样一个名词,它其实指的就是网络层发来的包。然后加以MAC层的包头就构成一个MPDU,再加PHY层的包头以及前导码构成PPDU。
而有线网络以太网的包格式也是类似的。
现在的802.3 SNAP以太网格式包是长这么样的:
字段: 前导码 SFD 目的地址 源地址 长度 目的服务访问入口 源服务访问入口 控制 厂商标识 以太网类型 数据 帧检查序列
长度: 7 1 6 6 2 1 1 1 3 2 38-1492 4
含义:
Destination Address Source Address Length Destinamtion Service Access Point Source Service Access Point SubNetwork Access Protocol Data Frame Check Sequence
其中前导码是1,0序列,SFD是start of frame delimiter, 10101011。表示frame马上就要开始。有时也算入前导码之内。前导码设计这么长,那是因为以前怕PHY处理不过来,可能会丢失,那多一点,丢了就丢了。现在的话,一般14个bits就能同步下来了。
橘色部分是数据链路层包头(Data link Layer Header),这个非常好理解,因为数据来自网络层,数据链路层的上一层,因此需要加上本层的包头。
绿色部分是逻辑链路层的包头(LLC头),这个是做什么用的呢?实际上这是为上层的网络提供了以一个和数据链路层通信的接口。蓝色部分(SNAP)又是什么呢?在正式版的协议之后再做了一次修补,兼容以太网II,而蓝色部分正式那次修补的产物。
因为更早以前的以太网II没有LLC头,但是数据链路层头的LENGTH部分却是Ethertype,为了兼容这一点,SNAP加入了SNAP,其中的第二个字段就是Ethertype。
Novell公司在Ethernet II(extended ethernet)以及802.3正式推出之前自己出了一个版本,它没有LLC头,但是有FFFF开头的一个厂家标识符(应该是3各字节,因为这样它的数据才是1497字节),FFFF标识的是不使用checksum。这个版本称为Novell或者802.3 Raw版本。和802.3的区别在于没有LLC头。
所以现在802.11处理的包是最大1492长度呢,还是1497长度呢?还是1500长度呢?或者说是不是包含了LLC头以及/或SNAP头呢