我刚刚开始学习如何在项目中使用 Qemu。我试图使用桥接网络来运行 Qemu,并且想知道网络选项、tap 和bridge 之间有什么区别。
我阅读了 Qemu 文档中的网络选项部分,但无法理解其中的区别。该文档提到“-netdev tap”用于配置具有 ID id 的主机 TAP 网络后端,而“-netdevbridge”用于将主机 TAP 网络接口连接到主机桥接设备。我还查看了这个网站: https: //wiki.archlinux.org/title/QEMU#Tap_networking_with_QEMU,但仍然无法理解使用“-netdev tap”与“-netdevbridge”之间的区别。
任何人都可以帮助我解释 Qemu 使用“-netdev tap”和“-netdevbridge”之间的区别吗?
谢谢。
我正在构建一个 SDN 测试床,其中包含安装在 Linux Ubuntu 18.04 上的 OpenvSwitch 交换机和在 VirtualBox 上运行的 5 个虚拟机(Linux Ubuntu 16.04 服务器)。OVS 由 OpenDaylight Boron 管理。
ip tuntap add mode tap tapN创建水龙头将虚拟机链接到 OVS 时,一切正常,我可以在“同一子网内”的虚拟机之间进行 ping 操作。但是,当我尝试: 时ovs-ofctl -O OpenFlow13 dump-ports br0,(rx pkts 和 tx pkts)等统计信息仅显示除本地端口之外的所有端口上的零。
但是,当我用来ovs-vsctl add-port br0 vnet0 -- set Interface tapN type=internal创建水龙头时,即使只有一台设备对另一台设备执行 ping 操作,我也可以看到所有端口的统计信息。
我的问题:
为什么 (dump-ports) 在第一种情况下不显示统计信息?
可以按照第二种情况所述在我的测试台中继续使用(ovs 内部水龙头)吗?
下面是完整的OVS配置案例1:
ovs-vsctl add-br br0
ip tuntap add mode tap vnet0
ip tuntap add mode tap vnet1
ip tuntap …Run Code Online (Sandbox Code Playgroud) 我需要通过 TCP 连接创建一个虚拟 IP 网络。托管系统是Linux,带有TUN/TAP内核驱动,很容易接收和重新注入虚拟网络的IP包。
困难的部分是将接收到的 IP 数据包传输到另一台主机。由于一些非技术原因,我只能通过 TCP 协议而不是 UDP 传输数据包。通过 UDP 传输 IP 数据包很容易,但使用 TCP 就变得很棘手,原因如下:
UDP协议不支持重传/重排序,就像IP一样。因此,如果为每个接收到的虚拟 IP 数据包发送一个 UDP 数据包,内核 TCP/IP 协议栈仍会看到虚拟 IP 数据包丢失/重复/重新排序(这些是 TCP/IP 正常工作所必需的,如果这些“特性”丢失,虚拟网络上的 TCP 连接速度会受到影响)。如果 IP 数据包通过 TCP 传输,则所有必需的“功能”都将丢失,除非它们以某种方式进行模拟。
看来我必须在 TCP 连接上伪造某种数据包重复/丢失/重新排序,或者修补内核 TCP/IP 协议堆栈。这两种选择都不容易。
我的问题还有其他更简单的解决方案吗?还是我只是进入了一个完全错误的方向?我都是耳朵。
==== 更新 ====
我正在考虑使用原始 IP 套接字(它可以在仍然使用 TCP 数据包的同时轻松摆脱物理网络上的所有 TCP 重传/重新排序内容)来传输接收到的虚拟网络 IP 数据包。但是在接收主机上,如何只接收我感兴趣的数据包并将所有其他 IP 数据包返回到内核 TCP/IP 堆栈?
tun-tap ×3
bridge ×1
linux ×1
networking ×1
opendaylight ×1
openvswitch ×1
qemu ×1
sdn ×1
tcp ×1
virtualbox ×1
vpn ×1