在上述拓扑中,实现多径。
在环路解决实验的基础上,利用组表实现。
在原arp代理的代码中添加如下代码:
从port4接收,则转发给其他port 1 2 3
1 def send_group_mod(self, datapath): 2 ofproto = datapath.ofproto 3 parser = datapath.ofproto_parser 4 5 actions1 = [parser.OFPActionOutput(1)] 6 actions2 = [parser.OFPActionOutput(2)] 7 actions3 = [parser.OFPActionOutput(3)] 8 9 buckets = [parser.OFPBucket(actions=actions1), 10 parser.OFPBucket(actions=actions2), 11 parser.OFPBucket(actions=actions3)] 12 13 req = parser.OFPGroupMod(datapath, ofproto.OFPGC_ADD, ofproto.OFPGT_ALL, 50, buckets) 14 15 datapath.send_msg(req)
同时开启S1的接口终端,eth1, eth2, eth3
在mininet中进行连通测试:
出现了dupliacte报文
在各终端端口,都可以捕捉到:
查看h1 h2的ip信息:
1 mininet> h1 ip a 2 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 3 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 4 inet 127.0.0.1/8 scope host lo 5 valid_lft forever preferred_lft forever 6 inet6 ::1/128 scope host 7 valid_lft forever preferred_lft forever 8 2: h1-eth0@if47: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 9 link/ether 82:55:f0:86:fb:43 brd ff:ff:ff:ff:ff:ff link-netnsid 0 10 inet 10.0.0.1/8 brd 10.255.255.255 scope global h1-eth0 11 valid_lft forever preferred_lft forever 12 inet6 fe80::8055:f0ff:fe86:fb43/64 scope link 13 valid_lft forever preferred_lft forever 14 mininet> h2 ip a 15 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 16 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 17 inet 127.0.0.1/8 scope host lo 18 valid_lft forever preferred_lft forever 19 inet6 ::1/128 scope host 20 valid_lft forever preferred_lft forever 21 2: h2-eth0@if54: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 22 link/ether fa:86:b9:ac:94:db brd ff:ff:ff:ff:ff:ff link-netnsid 0 23 inet 10.0.0.2/8 brd 10.255.255.255 scope global h2-eth0 24 valid_lft forever preferred_lft forever 25 inet6 fe80::f886:b9ff:feac:94db/64 scope link 26 valid_lft forever preferred_lft forever
查看交换机的流表:
1 mininet> sh ovs-ofctl dump-flows s1 2 NXST_FLOW reply (xid=0x4): 3 cookie=0x0, duration=1843.442s, table=0, n_packets=108, n_bytes=14937, idle_age=554, priority=1,ipv6 actions=drop 4 cookie=0x0, duration=1828.364s, table=0, n_packets=47, n_bytes=4214, idle_age=826, priority=1,in_port=1,dl_dst=82:55:f0:86:fb:43 actions=output:4 5 cookie=0x0, duration=1828.362s, table=0, n_packets=46, n_bytes=4116, idle_age=826, priority=1,in_port=4,dl_dst=fa:86:b9:ac:94:db actions=output:1 6 cookie=0x0, duration=1623.076s, table=0, n_packets=70, n_bytes=6356, idle_age=362, priority=1,in_port=3,dl_dst=82:55:f0:86:fb:43 actions=output:4 7 cookie=0x0, duration=1623.074s, table=0, n_packets=35, n_bytes=3150, idle_age=362, priority=1,in_port=4,dl_dst=1a:fd:60:af:a0:b0 actions=output:3 8 cookie=0x0, duration=1843.484s, table=0, n_packets=21, n_bytes=1598, idle_age=813, priority=0 actions=CONTROLLER:65535 9 mininet> sh ovs-ofctl dump-flows s2 10 NXST_FLOW reply (xid=0x4): 11 cookie=0x0, duration=2064.896s, table=0, n_packets=66, n_bytes=9744, idle_age=16, priority=1,ipv6 actions=drop 12 cookie=0x0, duration=2050.093s, table=0, n_packets=47, n_bytes=4214, idle_age=1048, priority=1,in_port=2,dl_dst=82:55:f0:86:fb:43 actions=output:1 13 cookie=0x0, duration=2050.088s, table=0, n_packets=46, n_bytes=4116, idle_age=1048, priority=1,in_port=1,dl_dst=fa:86:b9:ac:94:db actions=output:2 14 cookie=0x0, duration=2065.210s, table=0, n_packets=21, n_bytes=1546, idle_age=1035, priority=0 actions=CONTROLLER:65535 15 mininet> sh ovs-ofctl dump-flows s3 16 NXST_FLOW reply (xid=0x4): 17 cookie=0x0, duration=2069.160s, table=0, n_packets=66, n_bytes=9744, idle_age=20, priority=1,ipv6 actions=drop 18 cookie=0x0, duration=2069.242s, table=0, n_packets=19, n_bytes=1358, idle_age=1039, priority=0 actions=CONTROLLER:65535 19 mininet> sh ovs-ofctl dump-flows s4 20 NXST_FLOW reply (xid=0x4): 21 cookie=0x0, duration=2071.492s, table=0, n_packets=65, n_bytes=9674, idle_age=22, priority=1,ipv6 actions=drop 22 cookie=0x0, duration=1851.181s, table=0, n_packets=70, n_bytes=6356, idle_age=590, priority=1,in_port=2,dl_dst=82:55:f0:86:fb:43 actions=output:1 23 cookie=0x0, duration=1851.175s, table=0, n_packets=35, n_bytes=3150, idle_age=590, priority=1,in_port=1,dl_dst=1a:fd:60:af:a0:b0 actions=output:2 24 cookie=0x0, duration=2071.586s, table=0, n_packets=20, n_bytes=1504, idle_age=1041, priority=0 actions=CONTROLLER:65535 25 mininet> sh ovs-ofctl dump-flows s5 26 NXST_FLOW reply (xid=0x4): 27 cookie=0x0, duration=2075.400s, table=0, n_packets=140, n_bytes=17712, idle_age=26, priority=1,ipv6 actions=drop 28 cookie=0x0, duration=2060.288s, table=0, n_packets=47, n_bytes=4214, idle_age=1058, priority=1,in_port=4,dl_dst=82:55:f0:86:fb:43 actions=output:1 29 cookie=0x0, duration=2060.279s, table=0, n_packets=46, n_bytes=4116, idle_age=1058, priority=1,in_port=1,dl_dst=fa:86:b9:ac:94:db actions=output:4 30 cookie=0x0, duration=1855s, table=0, n_packets=36, n_bytes=3248, idle_age=594, priority=1,in_port=6,dl_dst=82:55:f0:86:fb:43 actions=output:3 31 cookie=0x0, duration=1854.990s, table=0, n_packets=35, n_bytes=3150, idle_age=594, priority=1,in_port=3,dl_dst=1a:fd:60:af:a0:b0 actions=output:6 32 cookie=0x0, duration=1819.533s, table=0, n_packets=33, n_bytes=3066, idle_age=1045, priority=1,in_port=5,dl_dst=82:55:f0:86:fb:43 actions=output:3 33 cookie=0x0, duration=1819.526s, table=0, n_packets=12, n_bytes=1008, idle_age=1045, priority=1,in_port=1,dl_dst=ee:1c:26:6a:2c:89 actions=output:5 34 cookie=0x0, duration=1819.524s, table=0, n_packets=12, n_bytes=1008, idle_age=1045, priority=1,in_port=3,dl_dst=ee:1c:26:6a:2c:89 actions=output:5 35 cookie=0x0, duration=1819.524s, table=0, n_packets=12, n_bytes=1008, idle_age=1045, priority=1,in_port=2,dl_dst=ee:1c:26:6a:2c:89 actions=output:5 36 cookie=0x0, duration=2075.403s, table=0, n_packets=18, n_bytes=1080, idle_age=1819, priority=0 actions=CONTROLLER:65535
查看h1的ip netns:
控制器如下:
arp learning中,只学到arp request的src_ip和in_port,没有学习arp reply的src_ip和in_port,所以dst_mac到哪里仍然不知道,只能Flood
定义以下流规则,安装到s1上,将1 2 3口加入到组中,从组转发:
在s5上,安装如下规则:所有访问h1的报文,都从1端口转发
此时,h1 ping h2只能在s1-eh1上抓取报文。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南