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

LeeReamond 17天前 11

如题,网络底层基础不好

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

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

=====

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

最新回复 (20)
  • cmostuor 14天前
    引用 2
    流量会通过路由器, 子网内的设备必须通过网关去转发数据.
  • Tink 14天前
    引用 3
    经过,流量怎么走,看网关
  • cmostuor 14天前
    引用 4
    想知道经不经过你可以在路由器上用 tcpdump 抓包然后用 wireshark 分析
  • alect 14天前
    引用 5
    NAT 模式可以保证最低延迟,
    而且大多数不上外网的情况下不走路由器,
    然后还可通过共享母机网络方式让你的小鸡上网。
  • noe132 14天前
    引用 6
    hyperv 虚拟机 和 主机 在同一个虚拟交换机下面,理论上到了虚拟交换机,直接走第二层转发,就不会从实际物理网卡发出去了。
  • 楼主 LeeReamond 14天前
    引用 7
    @alect nat 模式下母鸡没法访问小鸡吧?
  • jasonyang9 14天前
    引用 8
    经不经过网关看是各自配的子网掩码,用自己的 IP 和子网掩码算的的网络号,比较对方的网络号(用对方的 IP 和自己的子网掩码计算),是否相同,相同就不经过网关,不同就查找本机路由表发送到对应的下一跳
  • noe132 14天前
    引用 9
    我这是虚拟机在一个内部网络下面
    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 14天前
    引用 10
    你可以设置两个网卡,一个是桥接,用来给虚拟机上网,一个是 host-only,用来与宿主机通信
  • elfive 14天前
    引用 11
    @cmostuor #1 同一交换机下的数据交互,是可以不经过网关的,直接交换机就给你转发出去了。
  • ysc3839 14天前
    引用 12
    理论上桥接模式是虚拟机和主机都接入一个交换机,这个交换机再接入上级网络设备。
    但是我之前用 VMware 测试的时候似乎是类似集线器,虚拟机能抓到主机的包,且主机用 WiFi 时虚拟机跟主机通信的速度也会受 WiFi 速度影响。
  • ysc3839 14天前
    引用 13
    不过用 VMware 的 NAT 模式就没这问题。
  • Osk 14天前
    引用 14
    桥接网络, 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 14天前
    引用 15
    桥接可以的呀,就类似于虚拟机 guest 和 host 在同一子网下
  • ryd994 14天前
    引用 16
    桥接模式下是可以的
    hyper v 的 vmswitch 启用后,vmswitch bind 到网卡( pnic )上。然后创建一个 vnic 给宿主系统。虚拟机绑定的也是 vnic 。
    所以无论是 host os 还是 guest os,流量都会经过 vmswitch 。

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

    强制 vswitch 不本地转发而直接去 router 的,那叫 vepa mode 。vmswitch 是否支持 vepa mode 我不记得了。
  • ryd994 14天前
    引用 17
    1 楼说的是错的。同一网段下不需要路由器。有 arp,有 switch 就行了。也不需要网关。这是计算机网络的基础吧?这也能说错?

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