请教虚拟机网络 nat 和桥接的区别 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
plko345
V2EX    程序员

请教虚拟机网络 nat 和桥接的区别

  •  
      plko345 2021-08-27 12:07:07 +08:00 via Android 5891 次点击
    这是一个创建于 1575 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境:win10,vmware workstation

    使用 nat, 传大文件宿主机到虚拟机(或反向传),速率 100MB/s 左右,cpu 占用 90 左右。

    使用桥接情况类似。

    明显桥接下 cpu 也干了网卡的活,想问下大致原理。

    有什么办法能减轻 cpu 负载,同时提升速度。

    26 条回复    2022-03-29 07:15:51 +08:00
    pupboss
        1
    pupboss  
       2021-08-27 12:12:18 +08:00   2
    NAT 是在你的本机上再虚拟一个子网,虚拟机之间平级,你的电脑充当路由器

    桥接是从你的网卡上虚拟一个新的网卡,虚拟机和你电脑平级,共用家里的路由器

    虚拟机传文件负载本身就大,可能跟网卡没关系,等后面大佬回答吧
    noe132
        2
    noe132  
       2021-08-27 12:31:35 +08:00 via Android
    无论是 nat 还是桥接都有一个虚拟交换机,主机和虚拟机都接在这个虚拟交换机上面。这个交换机是软件实现的,所以包多当然占 cpu 。
    Tink
        3
    Tink  
    PRO
       2021-08-27 12:44:55 +08:00 via Android   1
    桥接就是跟你主机一个 IP 段,nat 是主机的下级
    littlewey
        4
    littlewey  
       2021-08-27 13:46:24 +08:00   2
    - NAT 时候,Host 里好像有一个家用路由器,WAN 是 Host 的网卡,LAN 插向你的 VM,VMware 搞了一个 L3 设备

    - Bridged 的时候,Host 里好像有一个交换机,Host 的网卡和你 VM 网卡 都插在上边,VMware 搞了一个 L2 设备

    https://superuser.com/questions/227505/what-is-the-difference-between-nat-bridged-host-only-networking
    ryd994
        5
    ryd994  
       2021-08-27 13:55:16 +08:00   17
    nat: 虚拟机之间组成内网,而且使用私有地址,无法直接对外通信。宿主机会提供虚拟 nat 网关的功能,不仅转发包,还提供地址转换服务。NAT 是有状态的,所以开销很大。而且 NAT 工作在 4 层,需要了解每一个 TCP 连接的状态。

    桥接:虚拟机之间组成内网,但使用“公网”地址。因为你家只有路由器有真正的公网 IP (甚至路由器也没有,这也是论坛上讨论关于开公网 IP 的问题),家里的所有机器其实只有内网 IP 。这时,宿主机仍然需要提供私有网关服务,但不需要提供 NAT,所以开销较小。这时只是提供路由器或交换机的功能。工作在 3 层或 2 层。

    然而计算开销较小并不代表性能就会好很多。肯定是更好的。但是实际在网络处理中,难点是对大量的包进行处理,单个包的处理很简单,但包的数量很大,需要迅速处理完。CPU 并不适合这种工作。这种工作适合硬件。所以软路由的性能的极限比起硬件来说低很多。而且加钱买更好的 CPU 也没用。

    硬件加速是网络处理很重要的一部分。非虚拟机的连接,其实大部分工作依赖硬件加速。比如 RSS,TSO,LSO,LRO 。这都不是新技术,几乎所有的网卡都支持。

    虚拟化网络硬件加速则是商业应用的重要课题。宿主机可以直接下放路由功能或者交换机功能给硬件。低端的,硬件可以执行简单的筛选分类,把虚拟机的包放到独立的缓冲队列里。CPU 只需要简单的处理就可以把数据转发给虚拟机。而且可以提供虚拟 RSS 功能,让虚拟机也可以多线程处理网络。
    高级的就是 SRIOV,虚拟机网络数据完全不经过宿主机软件。PCIE 直通给虚拟机。PCIE 直通由主板 /CPU 硬件加速,使用中开销几乎为零。虚拟机直接制硬件吗,也就可以享受到和非虚拟机一样的硬件加速功能。性能也完全不损失。没有 SRIOV 也能用 PCIE 直通,但是只能物理硬件一一对应,无法在虚拟机之间共享。
    各大云厂商的高性能网络大部分就是 SRIOV 再加上 SoC 或 FPGA 来处理虚拟网络流量。

    如果你的 CPU 有 VT-d,而且有富余的 pcie 槽,那最简单的就是再买一块网卡做直通。组 NAS 时这个方法很常用,直通网卡和 HBA 。不然的话,配置开启 VMQ 其实性能也还行。从你的描述来看你应该已经在用类似的功能了,否则所有的虚拟机负载都会打在一个核上,不会做到 CPU 占用 90%

    如果没有 pcie 直通的条件,但你的目标只是内网性能。那么也可以在全部设备上启用 jumbo frame 。之前说了,网络的难点在于包的数量。LSO LRO 技术实际上就是通过硬件切割组合包,CPU 实际上只看到硬件处理后的大包。jumbo frame 启用之后,线路上传输的就是更大但更少的包。自然也就不用耗费那么多 CPU 资源了。但是问题在于网络上的每一个节点都要有 jumbo frame 的支持,所以实质上仅限内网使用。
    jim9606
        6
    jim9606  
       2021-08-27 14:07:55 +08:00
    100MB/s 相当于 800Mbps,算是个比较高吞吐量的需求了。

    vmware workstation 默认使用的虚拟网络都是纯软件实现,桥接的工作量相对于 NAT 少些依然有。另外虚拟机的网卡也是在 cpu 实现的。

    你可以试试更改 vmx 文件,将虚拟网卡型号由 e1000 改为 vmxnet3,可能可以减少虚拟网卡的开销。

    还不够估计就得换支持 PCI 直通的虚拟机方案和支持 SR-IOV 的网卡了,例如 Hyper-V/VMware ESXi/LinuxKVM 和 Intel I350 。
    fkmc
        7
    fkmc  
       2021-08-27 14:16:13 +08:00
    网卡直通 或者 virtio-net window 需要额外驱动
    chenjies
        8
    chenjies  
       2021-08-27 15:09:51 +08:00
    100MB/s 是不是千兆网卡的速度?提升传输速度只有不走网卡,文件共享可以试试。
    newmlp
        9
    newmlp  
       2021-08-27 16:46:51 +08:00
    nat=路由器,桥接=交换机
    haikouwang
        10
    haikouwang  
       2021-08-27 16:59:16 +08:00
    hyperv 可以明显降低 cpu 占用,降低很多
    plko345
        11
    plko345  
    OP
       2021-08-27 18:20:18 +08:00 via Android
    @ryd994 谢谢大佬的分享,内容我得消化下
    littlewey
        12
    littlewey  
       2021-08-27 19:12:09 +08:00   1
    网络虚拟化比 PCI Passthrough/SR-IOV / Smart NIC 更轻量级的有高性能的方案是用基于 user space /PMD 的软件交换机。

    在 KVM 虚拟化的情况下通常是 OpenVSwitch + DPDK 。

    在 ESXi/VSphere 的情况下也可以用 VMWare 的等价于 OpenVSwitch 的技术 + DPDK 。

    在 VMware Workstation 这样的场景下就不需要了吧,本身就不是生产服务器级别的虚拟环境,有要求就多一个网卡直通给 VM 另外插线,交换路由都不在 Host OS 上。
    traderlqm
        13
    traderlqm  
       2021-08-27 19:22:28 +08:00
    @ryd994 大佬一下子透漏了云计算的主流技术。
    traderlqm
        14
    traderlqm  
       2021-08-27 19:29:52 +08:00
    @littlewey 感觉应该是 PCI Passthrough/SR-IOV + Smart NIC 这种关系,不是或者。
    plko345
        15
    plko345  
    OP
       2021-08-27 20:59:15 +08:00
    @haikouwang 谢谢推荐, 使用 hyperv 网络设置有什么注意点吗, 之前用过一次, 虚拟交换机配置挺麻烦的, 体验不太友好, 但性能确实比 vmware workstation 要强大很多
    desdouble
        16
    desdouble  
    PRO
       2021-08-27 21:30:32 +08:00 via Android
    你确定虚拟机和宿主机这样拷贝文件是通过 nat 或桥的网络传输的?

    即使通过网络传输,也不太可能出现网络传输让 cpu 满负荷吧。cpu 满负荷可能是因为虚拟机的磁盘管理机制是文件拆分,自动扩容。大文件需要临时分配更大的磁盘空间,对磁盘的操作和程序本身的读写操作占用了大量 cpu 。同时,如果你物理内存不够大,开虚拟机很容易要用磁盘做虚拟内存,前面大量的磁盘操作还在继续,会让虚拟内存的效率急剧恶化,累及整个操作系统的运行。
    littlewey
        17
    littlewey  
       2021-08-27 22:34:44 +08:00 via iPhone
    @plko345 我们用过非 smart nic 的 SR-IOV 的哈。
    aru
        18
    aru  
       2021-08-27 23:26:41 +08:00
    是不是加密传输了?
    用 iperf 测试下
    flynaj
        19
    flynaj  
       2021-08-28 01:46:27 +08:00 via Android
    理论上桥接比 nat 更节省资源,不过要看虚拟机软件的实现,vbox 网卡配置成 virt 是非常快的。
    cassyfar
        20
    cassyfar  
       2021-08-28 02:24:52 +08:00
    @ryd994 nat 在 osi 3 层因为是修改 packet 的 IP header 。。并不负责 routing
    ryd994
        21
    ryd994  
       2021-08-28 04:16:43 +08:00 via Android
    @cassyfar 一般虚拟机的 nat 网络需要做 tcp/udp 的端口分配,而不是简单的 IP 地址翻译,否则就和宿主的通讯冲突了
    涉及到 TCP 就需要检查和改写 4 层 header 。不需要提供完整的 TCP 功能,比如重传。但是还是要有基本的 TCP 状态机,否则端口池回收只能靠超时。

    routing 是 vswitch 在做
    plko345
        22
    plko345  
    OP
       2021-08-28 08:32:14 +08:00 via Android
    @desdouble 电脑 40G 内存,虚拟机分配 6G,占用 50 左右,可能和你说的磁盘原因也有关系,我试试完整分配磁盘容量,代替动态的
    powerman
        23
    powerman  
       2021-08-28 16:51:25 +08:00
    @plko345 直通一条网卡走硬件虚拟机
    powerman
        24
    powerman  
       2021-08-28 16:51:37 +08:00
    @plko345 直通一条网卡走硬件交换机
    barathrum
        25
    barathrum  
       2021-08-30 12:03:10 +08:00
    是用什么软件传输的呢? 90% 的 CPU 很可能是加密解密的操作,纯网络也不是小包的话,不应该消耗这么大。
    haikouwang
        26
    haikouwang  
       2022-03-29 07:15:51 +08:00 via Android
    @plko345 没啥需要特别注意到 hyperv 能给你的配置的东西其实也不多
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1298 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 17:08 PVG 01:08 LAX 09:08 JFK 12:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86