Open vSwitch相关字段详解之L3:IPv4&IPv6
文章目录
字段概览
备注:由于历史原因,某些字段会有多个名字,如下表,/后面表示该字段的其他名字
字段名 | 长度 | 格式 | Masking | 前置项 | 访问权限 | OpenFlow 1.0 | OpenFlow 1.1 | NXM/OXM Support | 描述 |
---|---|---|---|---|---|---|---|---|---|
ip_src/nw_src | 32位 | IPv4地址 | 按任意位掩码 | IPv4 | 读/写 | CIDR match only | yes | OF 1.2+ and OVS 1.1+ | 源IPv4地址 |
ip_dst/nw_dst | 32位 | IPv4地址 | 按任意位掩码 | IPv4 | 读/写 | CIDR match only | yes | OF 1.2+ and OVS 1.1+ | 目的IPv4地址 |
ipv6_src | 128位 | IPv6地址 | 按任意位掩码(OVS 1.8+) | IPv6 | 读/写 | 不支持 | 不支持 | OF 1.2+ and OVS 1.1+ | 源IPv6地址 |
ipv6_dst | 128位 | IPv6地址 | 按任意位掩码(OVS 1.8+) | IPv6 | 读/写 | 不支持 | 不支持 | OF 1.2+ and OVS 1.1+ | 目的IPv6地址 |
ipv6_label | 32位 | 十六进制 | 按任意位掩码 | IPv6 | 读/写 | 不支持 | 不支持 | OF 1.2+ and OVS 1.4+ | |
nw_proto/ip_proto | 8位 | 十进制 | 不支持 | IPv4/IPv6 | 只读 | exact match only | exact match only | OF 1.2+ and OVS 1.1+ | 上层协议的类型 |
nw_ttl | 8位 | 十进制 | 不支持 | IPv4/IPv6 | 读/写 | 不支持 | 不支持 | OVS 1.4+ | 数据包的TTL |
ip_frag/nw_frag | 8位 | 按任意位掩码 | IPv4/IPv6 | 只读 | 不支持 | 不支持 | OVS 1.3+ | 和IP分片相关 | |
nw_tos | 8位 | 十进制 | 不支持 | IPv4/IPv6 | 读/写 | exact match only | exact match only | OVS 1.1+ | |
ip_dscp | 8位 | 十进制 | 不支持 | Pv4/IPv6 | 读/写 | exact match only | exact match only | OF 1.2+ and OVS 1.7+ | |
nw_ecn/ip_ecn | 8位 | 十进制 | 不支持 | Pv4/IPv6 | 读/写 | exact match only | exact match only | OF 1.2+ and OVS 1.4+ |
字段详解
Pv4相关字段仅在Ethertype(即dl_type或eth_type)为0x0800时才有效,IPv6相关字段仅在Ethertype为0x86dd时才有效。
ip_src/nw_src、ip_dst/nw_dst
这两个字段的值分别从以下报文头IPv4部分的src、dst获取:
由于历史原因,在ARP和RARP流中,OVS该字段实际匹配的是ARP TPA。
ipv6_src、ipv6_dst
这两个字段的值分别从以下报文头IPv6部分的src、dst获取:
OVS 1.8增加了按任意位掩码的支持,在此之前只支持CIDR掩码。
nw_proto/ip_proto
表示上层协议类型,常用类型如下:
nw_proto/ip_proto | 上层协议 |
---|---|
6 | TCP |
17 | UDP |
132 | SCTP |
由于历史原因,在ARP和RARP流中,OVS该字段实际匹配的是ARP code。
nw_ttl
OVS设置这个字段的目的是为了检测dec_ttl操作会不会因为TTL超时而失败。
ip_frag/nw_frag
指明匹配哪种分片(fragment)类型的数据包,该字段只用到最后两位,其他位固定为0,如下:
只用到3个值:
- 0x00:不分片
- 0x01:分片,并且offset为0,即第一个分片
- 0x03:分片,且offset不为0
该字段配合不同分片模式,会有以下几种场景:
- OFPC_FRAG_DROP模式:OpenFlow交换机会在IP分片的数据包到达流表前就把它们丢弃掉,所以进入流表的数据包该字段的值只会是0
- OFPC_FRAG_REASM模式:IP分片的包会在进入流表前被重新组装起来,因此该字段的值也会是0。(OVS没有实现该模式)
- OFPC_FRAG_NORMAL模式:三个值都可能出现,但在OpenFlow 1.0中,分片数据包的传输层端口固定为0
- FPC_FRAG_NX_MATCH模式:三个值都可能出现,对于分片的第一个数据包,OVS会提供L4的头信息
因为,当OVS配置成OFPC_FRAG_NX_MATCH模式时,这个字段会很有用。
另外为了方便,该字段的值常常使用如下表示:
- no:只匹配不分片的数据包
- yes:匹配所有分片的数据包
- first:仅匹配分片数据包的第一个分片
- later:仅匹配除第一个分片以后的分片
- not_later:匹配不分片数据包和分片数据包的第一个分片
nw_tos
tos:type of service。