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获取:
Open vSwitch相关字段详解之L3:IPv4&IPv6
由于历史原因,在ARP和RARP流中,OVS该字段实际匹配的是ARP TPA。

ipv6_src、ipv6_dst

这两个字段的值分别从以下报文头IPv6部分的src、dst获取:
Open vSwitch相关字段详解之L3:IPv4&IPv6
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,如下:
Open vSwitch相关字段详解之L3:IPv4&IPv6
只用到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。