Open vSwitch L2(ETHERNET)相关字段详解(eth_src/dl_src、eth_dst/dl_dst、eth_type/dl_type)
文章目录
字段概览
备注:由于历史原因,某些字段会有多个名字,如下表,/后面表示该字段的其他名字
字段名 | 长度 | 格式 | Masking | 前置项 | 访问权限 | OpenFlow 1.0 | OpenFlow 1.1 | NXM/OXM Support | 描述 |
---|---|---|---|---|---|---|---|---|---|
eth_src/dl_src | 48位 | 以太网地址 | 支持任意位掩码 | Ethernet | 读/写 | exact match only | yes | OF 1.2+ and OVS 1.1+ | 以太网帧的源MAC地址 |
eth_dst/dl_dst | 48位 | 以太网地址 | 支持任意位掩码 | Ethernet | 读/写 | exact match only | yes | OF 1.2+ and OVS 1.1+ | 以太网帧的目的MAC地址 |
eth_type/dl_type | 16位 | 十六进制 | 不支持 | Ethernet | 只读 | exact match only | exact match only | OF 1.2+ and OVS 1.1+ | 表示装在这个以太网帧里的数据的类型 |
字段详解
以太网是Open vSwitch唯一一个支持的2层网络协议。eth_src/dl_src、eth_dst/dl_dst比较简单,分别匹配数据包的源MAC地址和目的MAC地址,以下重点解释eth_type/dl_type这个字段。
eth_type/dl_type
最常见的以太网帧的报文头格式为“Ethernet II”,如下:
在这种格式中,最后两个字节表示以太网的类型,并且值大于等于0x600 (1536),用于表示装在这个Frame里面数据的类型,此时eth_type/dl_type的值就取自这两个字节。
当最后两个字节<0x600时,则表示该帧不是Ethernet II格式,此时在Ethernet头后面一般会有一个802.2 LLC的头,OpenFlow和Open vSwitch只支持IEEE 802.3 SNAP格式的LLC头,即DSAP=0xaa、SSAP=0xaa、cntl=0x03,LLC后面会跟一个5个字节大小的SNAP,OpenFlow和OVS只支持org=0x000000的SNAP,在这个格式的以太网帧中,eth_type/dl_type的值取自SNAP的后两个字节的值。
当一个802.1Q头插入到Ethernet之后时,如下:
eth_type/dl_type取自Ethertype。
当在802.3 SNAP格式中插入802.1Q头时,如下:
此时eth_type/dl_type也取自Ethertype。
当一个数据包的报文头不满足上述格式时,OVS和OpenFlow把eth_type/dl_type设为0x5ff(OFP_DL_TYPE_NOT_ETH_TYPE)。
eth_type/dl_type各个取值的含义参考:EtherType
参考资料: