虚拟网卡、网络模式造成的tcp并发量的问题

这篇具有很好参考价值的文章主要介绍了虚拟网卡、网络模式造成的tcp并发量的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

课程中的项目:

4 台虚拟机,1 台作为服务器接收 TCP 连接,3 台作为客户端发起连接,在服务器端达到 100 w 的并发连接量

已排查的问题:

  1. 进程 fd 数量的限制

每个进程的 fd 数量默认限制是1024,修改为了1048576(2 ^ 20)

  1. 服务器端 socket 五元组耗尽

服务器端:1 个监听端口 --> 20 个监听端口

客户端:更改可用端口,默认可用端口为 32768 - 60999 也就是20000多个 – > 更改为 1024 - 65535 也就是60000多个

修改后一个客户端就可以创建 120 w 个 socket,解决了五元组耗尽的问题

  1. tcp_mem / tcp_rmem / tcp_wmem 参数修改
  • tcp_mem: 三元组,表示TCP内存管理的全局参数。三个元素分别代表最小内存限制(low)、压力模式的内存限制(pressure)、最大内存限制(high)。这些值影响系统在不同内存压力下分配和回收TCP缓冲区的方式。当系统内存不足时,它将根据这些参数来调整TCP缓冲区的大小。单位是页(page,一般是 4 kB)
  • tcp_wmem: 三元组,表示TCP发送缓冲区的大小参数。它包含了最小大小(low)、默认大小(default)和最大大小(high)。这些值影响TCP发送缓冲区的大小,从而影响发送数据时的性能和行为。
  • tcp_rmem: 三元组,表示TCP接收缓冲区的大小参数。它包含了最小大小(low)、默认大小(default)和最大大小(high)。这些值影响TCP接收缓冲区的大小,从而影响接收数据时的性能和行为。

虚拟网卡、网络模式造成的tcp并发量的问题,网络,tcp/ip,笔记

以上问题排查后在 UTM 虚拟机中,能够达到 100w 的连接量,但是在 连接断开 的时候,也就是在一个客户端 ctrl + c 之后,服务器端会直接卡死,ssh 也会断掉

一般性原因

针对大量连接同时断开时,服务器 CPU 和内存使用飙升是正常情况,一般性原因有以下:

  1. 资源清理和垃圾回收:当连接关闭时,服务器需要清理和回收分配给这些连接的资源。这个过程可能涉及内存释放、缓存清理和数据结构更新,这些操作可能会暂时增加 CPU 和内存使用。
  2. 并发处理高峰:在处理大量并发断开连接的情况下,服务器可能需要同时执行多个资源清理操作,这会导致 CPU 使用率上升。
  3. 网络堆栈压力:大量的连接和断开事件可能会对服务器的网络堆栈造成压力,特别是如果这些连接在很短的时间内快速建立和断开。
  4. 同步和锁争用:在多线程环境中,线程可能需要等待锁释放才能访问或修改共享资源,这可能导致 CPU 等待时间增加,特别是在高并发情况下。
  5. 异常检测和处理:服务器可能需要检测并处理断开连接时的任何异常情况,这可能包括日志记录、错误检查等,这些操作可能占用额外的 CPU 和内存资源。
  6. 内存泄漏:如果服务器代码在处理连接断开时没有正确管理内存(如未能释放不再需要的内存),可能会发生内存泄漏,导致内存使用不断增加。
  7. 操作系统和网络队列:操作系统层面的网络队列可能在大量连接断开时积压,处理这些队列可能会增加 CPU 负载。
  8. 数据库和磁盘 I/O:如果服务器在连接断开时需要更新数据库或执行磁盘 I/O 操作,这也可能导致资源使用的增加。

我的情况是在 Windows 平台上不会出现卡死,而 mac 上出现断连卡死,判断是虚拟机的问题,因此排查了虚拟机网络模式和虚拟网卡,同时通过更换虚拟机软件,也发现有不同的情况出现

虚拟机网络模式(不是致命原因,但有一定影响)

虚拟网卡、网络模式造成的tcp并发量的问题,网络,tcp/ip,笔记

UTM 中调整网络模式

虚拟网卡、网络模式造成的tcp并发量的问题,网络,tcp/ip,笔记

VMware Fusion 调整网络模式

一般的虚拟机软件中可以选择虚拟机与主机之间的网络模式,UTM 和 VMware Fusion都有:桥接和共享模式,这是两种常用的网络模式,先上结论:NAT 模式的隔离程度更低,桥接模式下每个虚拟机有独立的 IP,隔离程度更高,因此桥接模式比 NAT 模式能够承载的并发断开连接能力更强

NAT 模式

  1. 定义:在 NAT 模式下,虚拟机共享宿主机的 IP 地址。宿主机上运行的 NAT 服务为虚拟机提供网络访问,并处理虚拟机与外部网络之间的网络地址转换。
  2. 工作原理:虚拟机发送的所有网络请求都经过宿主机,由宿主机转发到外部网络。从外部网络返回的数据也同样经过宿主机再转发给虚拟机。
    • 虚拟机拥有一个私有(内部)网络地址 192.168.64.2。
    • 宿主机在这个私有网络中通常有一个固定的 IP 地址, 192.168.64.1,它充当虚拟机的网关。
    • 向外发送
    • 当虚拟机发送数据到外部网络时(比如访问互联网),数据包首先发送到宿主机(网关)。
    • 宿主机接收到这些数据包后,将它们的源地址(虚拟机的私有地址)转换为宿主机的公共 IP 地址。
    • 数据包被发送到互联网上,外部服务器看到的是宿主机的公共 IP 地址作为请求的源地址。
    • 接收外部数据包
    • 当外部服务器响应请求时,它将数据发送回宿主机的公共 IP 地址。
    • 宿主机接收到响应后,根据之前建立的 NAT 表,将数据包的目标地址从宿主机的公共 IP 地址转换回虚拟机的私有 IP 地址。
    • 数据包最终被发送到虚拟机。
  3. 端口转发
    • 不开启端口转发:虚拟机可以向外发送数据 ,但虚拟机上运行的服务(如网页服务器、FTP 服务器等)将无法从外部网络直接访问。
      • 假设你在虚拟机上运行了一个 web 服务器,监听在 80 端口。
      • 从虚拟机内部,你可以通过 http://localhost 或 http://192.168.64.2 访问这个 web 服务器。
      • 但是,从外部网络(如另一台电脑或互联网)尝试访问这个 web 服务器将会失败,因为宿主机的 NAT 设置阻止了直接访问虚拟机的内部服务。
    • 开启端口转发:指定宿主机的某个端口来转发到虚拟机的特定端口。这样,当从外部网络向宿主机的该端口发送请求时,请求会被转发到虚拟机上的相应服务。
      • 你在宿主机上设置了端口转发,将宿主机的 8080 端口转发到虚拟机的 80 端口。
      • 从外部网络,你现在可以通过访问 http://宿主机的公共IP地址:8080 来访问虚拟机上的 web 服务器。
      • 宿主机接收到端口 8080 上的请求后,会自动将其转发到虚拟机的 80 端口。
  4. 优点:
    • 安全性较高:虚拟机不直接暴露在外部网络上。
    • 无需额外的 IP 地址:所有虚拟机共享宿主机的 IP 地址。
  5. 缺点:
    • 网络配置复杂:可能需要在宿主机上设置端口转发规则才能从外部网络访问虚拟机的特定服务。
    • 性能开销:由于额外的地址转换步骤,可能会有轻微的性能影响。

桥接模式

  1. 定义:在桥接模式下,虚拟机直接连接到宿主机所在的物理网络,就像网络上的另一台独立计算机一样。
  2. 工作原理:虚拟机通过宿主机的网络适配器获取自己的 IP 地址,并直接与外部网络通信,无需经过宿主机的网络地址转换。
  3. 优点:
    • 直接网络访问:虚拟机可以像宿主机一样直接访问网络,易于设置和管理。
    • 性能:通常提供比 NAT 更好的网络性能。
  4. 缺点:
    • 安全风险:虚拟机直接暴露在网络上,可能面临更多的安全威胁。
    • IP 地址需求:每台虚拟机需要一个独立的 IP 地址。

虚拟网卡

只在 UTM 上找到了网卡的配置选择,没有在 VMware Fusion 中找到网卡选择。针对 UTM 的虚拟网卡选择,有如下的选项

虚拟网卡、网络模式造成的tcp并发量的问题,网络,tcp/ip,笔记

先上结论:vmxnet3 网卡隔离水平高于 virtio-net-pci 网卡的隔离水平,因此使用 vmxnet3 网卡能达到更好的并发断连能力

网卡(Network Interface Card,NIC)

  • 网卡,也称为网络接口卡或网络适配器,是一种硬件设备,用于连接计算机到计算机网络。网卡的功能是作为物理层和数据链路层的接口,实现计算机与网络的物理连接,以及在计算机和网络之间传输数据。
  • 物理网卡:在物理计算机中,网卡通常是一个插在主板上的扩展卡,或者是集成在主板上的芯片组。
  • 虚拟网卡:在虚拟机中,网卡表现为一个虚拟的网络接口,由虚拟化软件模拟,允许虚拟机连接到虚拟网络或实际网络。

网卡驱动

  • 网卡驱动是软件组件,允许操作系统和网卡硬件进行交互。驱动程序负责控制和管理硬件设备的操作,包括发送和接收数据、处理网络数据包、以及执行其他与网络相关的功能。网卡驱动通常是操作系统的一部分,或者由硬件制造商提供,需要在操作系统中安装。
  • 物理网卡驱动:用于控制物理硬件网卡的操作。
  • 虚拟网卡驱动:用于控制虚拟机中模拟的网络接口,例如 VirtIOvmxnet3 驱动。

两种虚拟网卡驱动在并发上表现的区别:

  • TCP 协议栈实现:
    • 不同的网卡驱动可能会以不同的方式与虚拟机内的 TCP/IP 协议栈交互。这可能影响到网络堆栈在极端情况下的表现,例如大量并发连接的建立和断开。
  • 资源管理:
    • 驱动程序如何管理和分配网络资源(如缓冲区、队列等),在高负载时可能会显著影响性能和稳定性。
    • vmxnet3 可能在这方面进行了更多的优化,以适应高并发连接的需求。

测试结果

virtio-net-pci

  • 桥接 / NAT:2k 连接量就会卡死

vmxnet3

  • 桥接:
    • 5w 不会卡死;
    • 10w 不会卡死;
    • 20w 不会卡死;
    • 60w ssh会很卡,但是等待半分钟左右,并没有卡死,正常运行;
    • 100w 同样不会卡死;
    • 断开连接的时候可以看到cpu的负载飙升
      虚拟网卡、网络模式造成的tcp并发量的问题,网络,tcp/ip,笔记
  • NAT:
    • 10w 不会卡死;
    • 20w 竟然卡死了,broken pipe(好像是个意外事件),但虚拟机没卡死,可以重新ssh连接;
    • 60w / 100w 没卡死,但ssh卡出去了,报错信息与virtio网卡的报错信息不同(virtio是broken pipe,且卡死)
    • 60w / 100w 断开时: 虚拟网卡、网络模式造成的tcp并发量的问题,网络,tcp/ip,笔记 ssh断掉了,虚拟机内部还可以正常运行,过一段时间重新连接ssh还是可以连上的,也就是虚拟机并没有卡死

理解与思考

在 UTM 中:

  • virtIO:相当于水管。虚拟机与宿主机之间通信,virtIO 把虚拟机当成一个大的进程,虚拟机之间的通信相当于宿主机之间的进程通信,底层使用的本地 socket 通信(通知),使用共享内存进行通信。当一个客户端fd关闭的时候,virtIO 会有两次通知, 一次是socket 通知虚拟机有数据来了,另一次是共享内存 读取具体的数据
  • vmxnet3:相当于开了一个水池。通过软件模拟的物理网卡的方式
  • NAT:在 mac 上构建一个网关,虚拟机是这个网关下的节点。虚拟机与宿主机共享一块网卡
  • 桥接:虚拟机与 mac 是平级的
  • vmxnet 与 桥接/共享 的关系。 vmxnet3相当于水池,桥接/共享是水池的位置。virtio是水管供水
  • 处理并发断连量:vmxnet+桥接 > vmxnet+共享 > virtIO+桥接/共享(只要用virtIO驱动就1k 级别的断连直接死机) ==> 差别在于隔离的级别

在 VMware Fusion 中:文章来源地址https://www.toymoban.com/news/detail-792714.html

  • 桥接 / 共享 断连时都不会卡死
  • 说明 VMWare Fusion 在隔离程度上比 UTM 更好

到了这里,关于虚拟网卡、网络模式造成的tcp并发量的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决虚拟网卡无法连接到 Internet 问题(之一)

    虚拟网卡无法连接到 Internet 的可能情况之一是:网络连接中存在不支持网络连接共享(ICS)的网络连接,可以在 \\\"控制面板网络和 Internet网络连接\\\" 中查看是否存在不支持 ICS 的网络连接。 我遇到的情况是我电脑中存在一个名为 “传入的连接” 的网络连接,我不知道这是否

    2024年04月08日
    浏览(27)
  • 解决VMware安装完成后没有虚拟网卡的问题

    问题描述 windows10首次安装VMware,安装完成后,没有出现如下图所示的两个虚拟网卡(VMnet1和VMnet8)。   检验位置 在哪查看虚拟网卡? ①电脑左下角windows开始-设置-状态-更改适配器选项  ②文件夹-右键网络-属性-更改适配器选项  ③控制面板-网络和共享中心-更改适配器选项

    2024年02月13日
    浏览(31)
  • VMware虚拟机三种网络模式(桥接、nat、host-only)解释及相应小问题解决方法(一):桥接模式

    使用了一段时间VMware,打算整理一下VMware三种网络模式(桥接、nat、独立主机)每一种的原理及用法,并且分享一下我使用VMware时遇到的问题及相应的处理方法。本篇文章单独说说桥接模式,nat与独立主机将会在下一篇文章。 设备: 物理机:Windows11 虚拟机:centos7 在虚拟机

    2024年02月15日
    浏览(34)
  • 11. TCP并发网络编程

    本文主要介绍TCP并发网络的编程,重点介绍io多路复用的epoll实现 要完成一个完整的 TCP/IP 网络通信过程,需要使用一系列函数来实现。这些函数包括 bind、listen、accept 和 recv/send 等。下面是它们的配合流程: 创建套接字(socket):使用 socket 函数创建一个套接字,指定协议族和

    2024年02月07日
    浏览(28)
  • 高并发应用:TCP网络编程

    Socket 很多系统都提供Socket作为TCP网络连接的抽象 Linux- internet domain socket - SOCK_STREAM Linux中Socket以“文件描述符”FD作为标识。 IO模型 IO模型指的是同时操作Socket的方案。 阻塞 非阻塞 多路复用 阻塞IO 同步读写Socket时,线程陷入内核态。 当读写成功后,切换回用户态,继续执行

    2024年03月14日
    浏览(35)
  • 解决VMware安装完成后没有虚拟网卡的问题(卸载清除)

    ​ 问题描述: 解决方案: Windows+R调出运行窗口,输入services.msc;开启以下两个服务 1.直接添加 2. 恢复默认 3. 卸载后并清理注册表 清除后,重新安装就可以了。大部分人都是这样解决的,我是死活解决不了,下面是我解决的办法,耗时较长。 4. 同样是卸载VMware,卸载后的清

    2024年02月12日
    浏览(34)
  • 网络编程(8.14)TCP并发服务器模型

    作业: 1. 多线程中的newfd,能否修改成全局,不行,为什么? 2. 多线程中分支线程的newfd能否不另存,直接用指针间接访问主线程中的newfd,不行,为什么? 多线程并发服务器模型原代码: 1.将newfd改成全局变量效果:  答:不行,因为newfd是全局变量的话,客户端连接后生成

    2024年02月13日
    浏览(32)
  • VMware workstation 中centos7虚拟机在nat模式下怎么配置网卡,指定我想要的IP并且可以联网

    1、首先打开我们的虚拟网络编辑器 2、查看我们的网关 3、查看IP池,根据需求自己设置 4、打开centos7虚拟机 编辑网卡配置 同理配置多台我想要的地址是192.168.115.148  、192.168.115.149、 192.168.115.151 5、验证 互相之间也可以ping通

    2024年02月07日
    浏览(38)
  • 《TCP/IP网络编程》阅读笔记--并发多进程服务端的使用

    目录 1--并发服务器端 2--进程 2-1--进程的相关概念 2-2--fork()创建进程 2-3--僵尸进程 2-4--wait()和waitpid()销毁僵尸进程 3--信号处理 3-1--signal()函数 3-2--sigaction()函数 3--3--利用信号处理技术消灭僵尸进程 4--基于多任务的并发服务器 5--分割 TCP 的 I/O 程序 并发服务器端主要有以下三类

    2024年02月09日
    浏览(28)
  • vmware网卡(网络适配器)桥接、NAT、仅主机3种模式解析

    Windows系统安装好vmware后,在网络连接中会生成 VMnet1 和 VMnet8 两个虚拟网卡。 VMnet1作用于仅主机模式,VMnet8作用于NAT模式。           虚拟机网卡选用桥接模式,虚拟机和安装虚拟机的物理机(主机或母机)IP地址在同一个网段,虚拟机和母机可以相互访问。如果局域网物理

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包