You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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地址>

正确操作流程走一遍

  1. 先启动无控制器的Mininet:
sudo mn --controller none
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:10:24