写在开篇帧帧假假智慧不假。帧里帧外快递一脉。41岁的CPU夜深人静时总爱跟自己过不去。比如我又翻出老问题开始盘“类型字段”这俩字节到底藏在帧的哪个犄角旮旯0x0800、0x0806、0x8100……这些神秘数字难道是”红花会“的暗号没VLAN时它在where有VLAN时它又跑去where了如果你也对着帧结构图发过呆那这篇就是又totally for you这句话我用不腻。一、类型字段在帧里的什么位置先回忆一下帧结构。不带VLAN的帧目标MAC源MAC类型数据校验带VLAN的帧目标MAC源MACVLAN标签类型数据校验关键点不管有没有VLAN标签类型字段都在“数据”前面。它紧跟在源MAC或VLAN标签后面占2个字节。二、类型字段里写的是什么类型字段里写的是一个16位的数字十六进制。常见的值类型值十六进制对应协议通俗说法0x0800IPv4“里面装的是IP包”0x0806ARP“里面装的是ARP包”0x8100VLAN“这是一个带VLAN标签的帧”0x86DDIPv6“里面装的是IPv6包”0x88DDDoIP“里面装的是车载诊断包”一个例子摄像头发了一个IP包给网关类型字段填0x0800。网关收到后看到0x0800就知道“数据区里装的是IP包”于是把数据交给IP协议栈处理。IP协议栈再拆出UDP/TCP最后把图像数据交给应用。没有这个类型字段操作系统拿到数据都不知道该交给谁。三、类型字段是谁定的谁说了算这些数字不是随便编的是IEEE统一分配的。IEEE有一个“以太网类型字段”的注册表谁想用一个新的类型得去IEEE申请。比如0x0800IPv4分配给互联网工程任务组0x0806ARP也是分配给IETF0x8100VLAN分配给IEEE 802.1Q工作组类比就像电话号码的区号。010是北京021是上海不是你想用就能用的。IEEE就是那个“通信管理局”。我就想问我能自己定一个吗能但只能在我自己的小范围网络里用。出了我的网络没人认识我的那个值。四、类型和长度的“分身术”早期的以太网Ethernet II用“类型字段”。后来IEEE 802.3标准把这两个字节改成了“长度字段”。怎么区分类型值 ≥ 15360x0600表示“类型”告诉上层怎么解析数据长度值 ≤ 15000x05DC表示“长度”告诉接收端数据区有多少字节那现在用的Ethernet II里到底是类型还是长度绝大多数情况下是类型。因为1536以上的值足够用了长度字段只在老式网络里才出现。一个简单的判断方法你抓个包看到0x0800那肯定是类型因为0x08002048远大于1536。五、有VLAN标签时类型字段在哪这个问题我也迷糊。VLAN标签4字节插在源MAC和类型之间。所以类型字段的位置变了但它本身没变。不带VLAN源MAC6字节 → 类型2字节 → 数据带VLAN源MAC6字节 → VLAN标签4字节 → 类型2字节 → 数据关键点VLAN标签里的TPID0x8100本身也是一个“类型值”。交换机看到0x8100就知道“后面还有2字节TCI再后面才是真正的类型字段”。这就像快递单上贴了个“转交”标签。快递员看到“转交”知道要再拆一层才能看到真正的货物类型。六、类型字段在车上有什么特殊用法车载以太网里除了常见的IP、ARP还有一个车载专用的类型0x88DDDoIP。DoIPDiagnostic over IP是4S店诊断升级用的协议。场景你把车开到4S店技师把诊断仪插到OBD口诊断仪通过以太网和车里的ECU通信。类型字段就是0x88DD。车上其他常见类型0x88F7PTP精确时间协议用于时间同步0x88B8AVBTP音视频桥接用于流媒体传输这些数字你不用全记住知道“不同数字代表不同协议”就行后面再搞定他们又吹NB了哎改不掉这个优点。七、我踩过的坑希望你一个也别踩坑1以前我以为“类型字段就是0x0800其他值没见过”。后来才知道ARP是0x0806VLAN是0x8100DoIP是0x88DD……每种协议都有自己的“身份证号”。坑2以前我以为“有VLAN标签时类型字段被覆盖了”。后来才知道VLAN标签里的0x8100不是类型字段它只是告诉交换机“后面还有东西”。真正的类型字段在VLAN标签后面。坑3以前我以为“类型字段的值是设备自己随便定的”。后来才知道是IEEE统一分配的不是你想写啥就写啥。想通那一刻我觉得自己又行了原来这2个字节是帧里的“货物标签”告诉操作系统“里面装的是啥”。没有它数据就是个黑盒子。八、下步目标类型字段拆完了。但欠的账太多了——ARP还没讲、IP头还没拆、DHCP还没聊……先不瞎预告了想到哪学到哪吧。下期预告看心情看时间看缘分。九、写在最后这一篇最大的收获终于搞懂了类型字段是啥、谁定的、有VLAN时它跑哪去了。类型字段就是帧里的“货物标签”——2个字节告诉上层“数据区里装的是IP还是ARP还是DoIP”。没有它操作系统拿到数据都不知道该交给谁。夜深人静把一个问题盘透了比睡一觉还踏实。慢即是快快即是慢持续奋斗加油就对了。今天到此为止吧886。