使用桥接模式连接网络的虚拟机,其流量是否会经过路由器转发?

2021-04-05 20:32:14 +08:00
 LeeReamond

如题,网络底层基础不好

应用场景是目前 PC 上有一个 hyperV 虚拟机里面跑了一个 redis,应该是使用了桥接模式连接网络,我不是很确定。总之连接到同一个路由器,本机 IP 是 192.168.0.100 ,虚拟机是 192.168.0.101 这样,目前主机和虚拟机网络都可以互通,并且都能访问互联网。

一个好奇是这种模式构建的网络,如果从主机向虚拟机发东西,或者反过来,流量是否需要经过路由,还是说在本地某一种虚拟网卡层面就能解决?我不知道如何模拟一个测试,直接来问老哥们了。

=====

另外一个好奇是,redis 虚拟机的使用场景,大多数时候不太需要单独使用互联网,大多数时候能保证与主机双向正常通讯就可以,有没有一种虚拟网络结构可以做到这种效果?这样既提高了通讯效率,又提高了安全性。只需要装机的时候下载东西时连接到互联网,之后稳定运行切换到这种网络就可以了

2446 次点击
所在节点    问与答
20 条回复
cmostuor
2021-04-05 20:41:06 +08:00
流量会通过路由器, 子网内的设备必须通过网关去转发数据.
Tink
2021-04-05 20:42:16 +08:00
经过,流量怎么走,看网关
cmostuor
2021-04-05 20:43:17 +08:00
想知道经不经过你可以在路由器上用 tcpdump 抓包然后用 wireshark 分析
alect
2021-04-05 20:44:17 +08:00
NAT 模式可以保证最低延迟,
而且大多数不上外网的情况下不走路由器,
然后还可通过共享母机网络方式让你的小鸡上网。
noe132
2021-04-05 20:45:56 +08:00
hyperv 虚拟机 和 主机 在同一个虚拟交换机下面,理论上到了虚拟交换机,直接走第二层转发,就不会从实际物理网卡发出去了。
LeeReamond
2021-04-05 20:48:31 +08:00
@alect nat 模式下母鸡没法访问小鸡吧?
jasonyang9
2021-04-05 20:52:40 +08:00
经不经过网关看是各自配的子网掩码,用自己的 IP 和子网掩码算的的网络号,比较对方的网络号(用对方的 IP 和自己的子网掩码计算),是否相同,相同就不经过网关,不同就查找本机路由表发送到对应的下一跳
noe132
2021-04-05 20:56:37 +08:00
我这是虚拟机在一个内部网络下面
vm: 192.168.3.58(vm bridge)
host: 192.168.3.1(vm bridge), 192.168.1.9(host nic)
从 vm 往 192.168.1.9 发数据,192.168.3.1 所在的 nic 会有数据,192.168.1.9 的 nic 则没有动静。
不确定直接桥接是不是也是这样,不过我猜测应该是类似的。可以用 iperf 测一下虚拟机到主机的带宽就明白了。
just1
2021-04-05 21:00:55 +08:00
你可以设置两个网卡,一个是桥接,用来给虚拟机上网,一个是 host-only,用来与宿主机通信
elfive
2021-04-05 21:01:44 +08:00
@cmostuor #1 同一交换机下的数据交互,是可以不经过网关的,直接交换机就给你转发出去了。
ysc3839
2021-04-05 21:15:13 +08:00
理论上桥接模式是虚拟机和主机都接入一个交换机,这个交换机再接入上级网络设备。
但是我之前用 VMware 测试的时候似乎是类似集线器,虚拟机能抓到主机的包,且主机用 WiFi 时虚拟机跟主机通信的速度也会受 WiFi 速度影响。
ysc3839
2021-04-05 21:16:35 +08:00
不过用 VMware 的 NAT 模式就没这问题。
Osk
2021-04-05 21:49:02 +08:00
桥接网络, hv 中叫外部网络(?),guest 和 host 在同一子网内,相互通信是不用经过路由器转发的,除非像 dns 找对方等特殊的情况需要一丁点流量。
这个通讯的转发应该是由 hv 的虚拟交换机软件实现的。有一个缺点:拔了网线后,guest 和 host 之间的通讯也好像会断。


问题二:你可以创建 NAT 网络 + hv 的内部网络交换机,这样,guest 和 host 的通信全部走那张虚拟内部网卡,路由器的子网和它没任何关系了,而且速度是 10gbps 。
192.168.0.0/24 这个子网内的设备无法访问 guest,guest 倒可以访问它们(nat),给 guest 配上 192.168.0.1 的 dns 就能实现:上网走路由器,与 host 通信不出虚拟网卡。

顺便:手动创建的 nat 网络无 dns 与 dhcp 服务,guest 需要手动配置 ip 和 dns (不是 host 的 ip 哦)。Win 10 自动创建的 default switch 也是 nat ,且有 dns 和 fhcp 服务,server 上手动创建的好像就没有。。。
Zien
2021-04-05 22:34:47 +08:00
桥接可以的呀,就类似于虚拟机 guest 和 host 在同一子网下
ryd994
2021-04-05 23:57:58 +08:00
桥接模式下是可以的
hyper v 的 vmswitch 启用后,vmswitch bind 到网卡( pnic )上。然后创建一个 vnic 给宿主系统。虚拟机绑定的也是 vnic 。
所以无论是 host os 还是 guest os,流量都会经过 vmswitch 。

有这个前提,那么你的问题就很容易解答了。这两个 IP 都在同一网段,所以不需要经过路由器,直接 vmswitch 转发就行。

强制 vswitch 不本地转发而直接去 router 的,那叫 vepa mode 。vmswitch 是否支持 vepa mode 我不记得了。
ryd994
2021-04-06 00:04:21 +08:00
1 楼说的是错的。同一网段下不需要路由器。有 arp,有 switch 就行了。也不需要网关。这是计算机网络的基础吧?这也能说错?

如果你想要降低开销,internal switch 是个比较好的选择。还可以启用 jumbo frame 减少网络栈的开销。如果想要极致降低开销,https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service
这是直通,不走网络,自然也就没有网络栈的开销。内存直接传输数据。
alphatoad
2021-04-06 00:09:04 +08:00
@ryd994 本帖最正确的回答。一楼看的我头皮发麻
deorth
2021-04-06 09:21:53 +08:00
此贴是程序员不一定都懂网络的证明,CS EE 还是要分家的
cubecube
2021-04-06 16:15:47 +08:00
@ryd994 一楼的确把我看懵了,主要是还有点赞的。
不跨广播域就不用到三层
LeeReamond
2021-04-06 20:54:49 +08:00
@cubecube 我点的赞,我又不明白,看一楼回复还说你可以抓包验证,就以为是正确答案了。不过现在说来,似乎抓发出的包也不能分析路由路线。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/768166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX