Mininet无控制器场景下h1无法ping通h2的原因咨询
为啥无控制器Mininet里h1 ping不通h2?
嘿,我来帮你拆解这个问题,你遇到的ping不通情况,主要是两个关键细节没处理对:
1. dpctl命令没指定要操作的交换机
当你直接敲dpctl add-flow的时候,这个工具根本不知道你要给哪台交换机加流表!毕竟Mininet里可能有多台交换机,你得明确告诉它要操作s1才行。
正确的做法是在Mininet的CLI里,给命令加上交换机前缀:
s1 dpctl add-flow in_port=1,action=flood s1 dpctl add-flow in_port=2,action=flood
要是你在系统shell里执行的话,就得指定交换机的管理套接字路径:
sudo dpctl add-flow unix:/var/run/openvswitch/s1.mgmt in_port=1,action=flood sudo dpctl add-flow unix:/var/run/openvswitch/s1.mgmt in_port=2,action=flood
2. 流表项的匹配规则写错了
你用的in_port=all是不合法的——OpenFlow的in_port字段只能匹配具体的端口号(比如1、2),或者像LOCAL这种特殊端口值,根本没有all这个选项。
另外补充个小提示:虽然泛洪流会自动处理ARP请求,但如果还是有问题,可以手动给两台主机加ARP条目验证:
# 在h1里执行 arp -s 10.0.0.2 <h2的MAC地址> # 在h2里执行 arp -s 10.0.0.1 <h1的MAC地址>
正确操作流程走一遍
- 先启动无控制器的Mininet:
sudo mn --controller none
- 在Mininet CLI里给s1加正确的流表(最好加上优先级,避免被默认流覆盖):
s1 dpctl add-flow priority=1,in_port=1,action=flood s1 dpctl add-flow priority=1,in_port=2,action=flood
这时候再让h1 ping h2,应该就能通了。
内容的提问来源于stack exchange,提问作者lucky yang
相关产品推荐
相关产品推荐

