OVS Learn流表学习

交换机可以进行数据高效转发得益于mac地址表,每当有数据包经过交换机都会有个学习的过程,由于包里面有MAC,VLAN Tag,以及从哪个口进来的这个信息,交换机会记下数据包源mac地址,从交换机哪个口进入,所属vlan,维护了一个表格port –> MAC –> VLAN Tag,当然也会有老化时间,以备设备更新或下线
这样以后如果有需要发给这个MAC的包,不用ARP,交换机知道应该发给哪个port,应该打什么VLAN Tag。

OVS中的learn功能也是这个原理,当收到数据包后都会匹配learn去学习数据包的源mac地址和进入的端口

# 当从编号1口收到数据包,跳转到table1去分析这个包把源mac记录下来ovs-ofctl add-flow br-int 'table=0,in_port=1 actions=goto_table:1'# 已知源mac的数据包经过ovs时要学习源mac地址ovs-ofctl add-flow br-int 'table=1,priority=100,dl_src=xx:xx:xx:xx:xx:xx actions=learn(table=2,hard_timeout=30,priority=100,delete_learned,cookie=0x1,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],OXM_OF_METADATA[],load:NXM_NX_REG1[]->NXM_NX_REG2[],load:0x1->NXM_NX_REG0[31]),resubmit(,3)'# 对于未知单播帧(优先级低)首先到table2中查找learn table entry,如果找不到则到table3
ovs-ofctl add-flow br-int 'table=1, actions=resubmit(,2),resubmit(,3)
  • learn表示这是一个学习的action

  • table 2是一个MAC learning table,学习的结果会放在这个table中。

  • hard_timeout:这是的每个学习结果都会expire,需要重新学习。

  • NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[]这个的意思是当前包里面的MAC Source Address会被放在学习结果的entry里面的dl_dst里面。
    因为每个交换机都是通过Ingress包来学习,某个MAC从某个port进来,交换机就会记住以后发往这个MAC的包要从这个port出去,
    因而MAC source address就被放在了Mac destination address里面

  • load:NXM_NX_REG1[]->NXM_NX_REG2[]:将入接口编号放入出接口编号

  • load:0x1->NXM_NX_REG0[31]:单播标记,learn的流表table2不可以跳转,只能打标记,到table3可以区分

搭建环境验证可行性:

1、原理分析
ns1 -> ns2: table0 -> table1 -> table4 说明:在table1中ovs learn会记录下ns1的mac地址和接口生成table2流表
ns2 -> ns1: table0 -> table1 -> table2 -> table3 说明:在table2中学习到ns1的mac和出接口记录在reg2中,然后从table3转发给ns1

2、创建ns模拟虚拟机

ip netns add ns1
ip l a veth0 type veth peer name ovs-veth0
ip l s veth0 netns ns1
ovs-vsctl add-br br-int
ovs-vsctl add-port br-int ovs-veth0
ip l s ovs-veth0 up
ip netns exec ns1 ip add a 10.0.0.1/24 dev veth0
ip netns exec ns1 ip l s veth0 up
ip netns exec ns1 ifconfig veth0 hw ether fe:fe:fe:fe:fe:aa
ip netns exec ns1 arp -s 10.0.0.2 fe:fe:fe:fe:fe:bbip netns add ns2
ip l a veth0 type veth peer name ovs-veth1
ip l s veth0 netns ns2
ovs-vsctl add-port br-int ovs-veth1
ip l s ovs-veth1 up
ip netns exec ns2 ip add a 10.0.0.2/24 dev veth0
ip netns exec ns2 ip l s veth0 up
ip netns exec ns2 ifconfig veth0 hw ether fe:fe:fe:fe:fe:bb
ip netns exec ns2 arp -s 10.0.0.1 fe:fe:fe:fe:fe:aa

3、下发流表学习mac地址

ovs-ofctl add-flow br-int 'table=0,in_port=1 actions=load:0x1->NXM_NX_REG1[],goto_table:1'
ovs-ofctl add-flow br-int 'table=0,in_port=2 actions=load:0x2->NXM_NX_REG1[],goto_table:1'ovs-ofctl add-flow br-int 'table=1,priority=100,dl_src=fe:fe:fe:fe:fe:aa actions=learn(table=2,hard_timeout=30,priority=100,delete_learned,cookie=0x1,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_NX_REG1[]->NXM_NX_REG2[],load:0x1->NXM_NX_REG0[31]),resubmit(,4)'
ovs-ofctl add-flow br-int 'table=1,priority=100 actions=resubmit(,2),resubmit(,3)'
ovs-ofctl add-flow br-int 'table=3,priority=100 actions=output:NXM_NX_REG2[]'
ovs-ofctl add-flow br-int 'table=3,priority=10 actions=drop'
ovs-ofctl add-flow br-int 'table=4,priority=100 actions=output:2'

4、连通性验证

# ip netns exec ns1 ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.542 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.062 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.064 ms

5、在ns2抓包结果

# ip netns exec ns2 tcpdump -i veth0 -nn -vv -e
tcpdump: listening on veth0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:11:38.572847 fe:fe:fe:fe:fe:aa > fe:fe:fe:fe:fe:bb, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 55186, offset 0, flags [DF], proto ICMP (1), length 84)10.0.0.1 > 10.0.0.2: ICMP echo request, id 19457, seq 1, length 64
19:11:38.572899 fe:fe:fe:fe:fe:bb > fe:fe:fe:fe:fe:aa, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 31625, offset 0, flags [none], proto ICMP (1), length 84)10.0.0.2 > 10.0.0.1: ICMP echo reply, id 19457, seq 1, length 64

6、流表匹配

ovs-ofctl dump-flows br-intcookie=0x0, duration=102.846s, table=0, n_packets=3, n_bytes=294, in_port="ovs-veth0" actions=load:0x1->NXM_NX_REG1[],resubmit(,1)cookie=0x0, duration=102.841s, table=0, n_packets=3, n_bytes=294, in_port="ovs-veth1" actions=load:0x2->NXM_NX_REG1[],resubmit(,1)cookie=0x0, duration=134.827s, table=0, n_packets=0, n_bytes=0, priority=0 actions=NORMALcookie=0x0, duration=102.835s, table=1, n_packets=3, n_bytes=294, priority=100,dl_src=fe:fe:fe:fe:fe:aa actions=learn(table=2,hard_timeout=30,priority=100,delete_learned,cookie=0x1010000000001,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_NX_REG1[]->NXM_NX_REG2[],load:0x1->NXM_NX_REG0[31]),resubmit(,4)cookie=0x0, duration=68s, table=1, n_packets=3, n_bytes=294, priority=100 actions=resubmit(,2),resubmit(,3)cookie=0x1, duration=15.764s, table=2, n_packets=3, n_bytes=294, hard_timeout=30, priority=100,dl_dst=fe:fe:fe:fe:fe:aa actions=load:0x1->NXM_NX_REG2[],load:0x1->NXM_NX_REG0[31]cookie=0x0, duration=67.996s, table=3, n_packets=3, n_bytes=294, priority=100 actions=output:NXM_NX_REG2[]cookie=0x0, duration=67.992s, table=3, n_packets=0, n_bytes=0, priority=10 actions=dropcookie=0x0, duration=67.124s, table=4, n_packets=3, n_bytes=294, priority=100 actions=output:"ovs-veth1"

7、结论
可以看到新生成的table2流表,抓包发现符合预期

OVS learn学习相关推荐

  1. 技术达人“创造营”官宣:Microsoft Learn 学习平台C位出道

    真的大神敢于直面随时更新的IT技术 你是要做一个平平无奇的"合格员工"? 还是要做一个博古通今的"江湖百晓生"? 转型变化,是时代的氛围 面对日新月异的技术更新 ...

  2. ovs learn action

    本文主要记录下 learn action的操作,learn action用来动态添加openflow流表,包括匹配域,action和其他属性. 主要还是参考源码和ovs-action,也可参考官网的例 ...

  3. 机器学习与Scikit Learn学习库

    摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...

  4. ovs ovn 学习资料

    0.A Primer on OVN http://blog.spinhirne.com/2016/09/a-primer-on-ovn.html 1.Open Virtual Networking W ...

  5. MS Learn 宝藏资源库 - 学习经验分享

    点击蓝字 关注我们 作者:刘轶民 大家好,我是东北电力大学的一名在校学生,我叫刘轶民,很高兴能以 MS Learn 的受益者的身份,来分享一些经验与看法.作为正在上学的我来讲,很多时候我可能更多的去面 ...

  6. TLD(Tracking-Learning-Detection)学习与源码理解之(六)

    TLD(Tracking-Learning-Detection)学习与源码理解之(六) zouxy09@qq.com http://blog.csdn.net/zouxy09 下面是自己在看论文和这些 ...

  7. 分享云及人工智能的一些学习资源和学习心得

    很久没写新的东西了.这段时间除了适应新的工作,其他时间都献给了各种学习~ 在这个提倡终身学习的年代,面对急剧更新的IT行业,不学点云计算和人工智能啥的,总感觉会被时代抛弃. 所以,终于找到个空闲时间, ...

  8. 机器学习与分布式机器学习_我将如何再次开始学习机器学习(3年以上)

    机器学习与分布式机器学习 重点 (Top highlight) I'm underground, back where it all started. Sitting at the hidden ca ...

  9. 【MSLearn 学习模块】Hi ! ⼀起来学Python

    随着大数据.人工智能.物联网的兴起,Python越来越受到大家的关注.不论你是⼀位学生,是一位传统的码农,还是非计算机领域的从业人员都离不开Python.当然大家的角度不⼀样,作为学生是以学为主,码农 ...

最新文章

  1. Open3D o3dtut怎么导入才不报错
  2. 怎样使用fastJson发送数组格式的Json数据
  3. 设计模式----工厂模式
  4. Ext JS 6学习文档-第6章-高级组件
  5. 云服务器选ssd还是hdd_云服务器应该怎么选择?
  6. 20.第一个Netcat的实现
  7. PowerShell说“此系统上的脚本执行被禁用。”
  8. django关闭debug后,报400错误
  9. filter以及reduce的用法
  10. 【手写数字识别】基于matlab GUI知识库手写数字识别(写字板+图片)【含Matlab源码 1227期】
  11. ssh公钥的生成、查看以及config的配置
  12. 02_行销(Marketing)里用逻辑回归来找寻顾客参与度后面的原因
  13. SRS学习-配置DVR
  14. iOS打包失败的可能情况
  15. 主动学习(Active Learning)概述及最新研究
  16. 【投资】如何绘制期权收益图
  17. 如何对CAD图纸上的图形进行单独保存起来
  18. 函数式编程扫盲 - 转载系列1
  19. 修改mysql密码报错_mysql修改/设置密码报错:ERROR 1819 (HY000): Your password does not satisf...
  20. dd命令(dd命令制作镜像)

热门文章

  1. java jmenu 监听_MenuItem添加监听器
  2. 【虚幻】清理缓存文件(C盘占用过大)
  3. iOS——UIActivityIndicatorView活动指示器
  4. IBM与美国伊利诺伊大学共建认知计算研究中心
  5. 互联网时代危机公关的传播特点
  6. 【数据库考试】数据库是存储在计算机内结构化的数据的集合
  7. 小白的网络安全数据可视化笔记(一)
  8. c语言线性表顺序存储结构详解
  9. qq android远程协助,Android 实现远程控制(类似QQ的远程协助)
  10. 案例-基于自动节点树的数据异常原因下探分析