问题

网卡是硬件设备,那为什么安装了linux虚拟机,会自带网卡呢,安装虚拟机不是完完全全的软件操作吗?

回答
你这个问题问得特别好,触及到了虚拟机技术的一个核心点!很多人都会有这个疑问:网卡明明是实实在在的硬件,怎么安装个虚拟机,它就好像自己长出了一块网卡似的?而且安装虚拟机不是纯粹的软件操作吗?

咱们得从几个层面来剖析这件事,把这层“云里雾里”的软件和硬件关系给掰扯清楚。

1. 现实世界的网卡:硬件的“实体”

首先,咱们得承认,你电脑主板上插的那块网卡,或者集成在主板上的那个网卡接口,是实实在在的物理硬件。它有电路、有芯片、有接口(比如RJ45接口),能够处理电信号,把它转换成数字信号,让你的电脑能跟外部的网络世界交流。没有它,你的电脑就成了“孤岛”。

2. 虚拟机的“魔法”:软件的“模拟”

而虚拟机,就像它的名字一样,“虚拟”出来的机器。它并不是真的在你的电脑里又变出了一块新的物理网卡。它是靠软件来实现的。

想象一下,你的电脑就像一个大房子,里面住着你的操作系统(比如Windows或macOS,这就是你的“宿主”操作系统)。虚拟机软件(比如VMware、VirtualBox、HyperV)就像是房子的一个“隔间”,或者是一个“窗户”。它在这个大房子里面,用软件的手段,模拟出一套完整的电脑硬件环境。

所以,当你在虚拟机软件里安装Linux时,虚拟机软件会“告诉”Linux:“嘿,你有一块网卡!” 但这块网卡,并不是真实存在的物理硬件,而是虚拟机软件在Linux的操作系统看来,模拟出来的、看起来像一块网卡的东西。

3. 虚拟机网卡的“工作原理”:软件的“桥接”与“转换”

那么,这个“模拟出来的网卡”是怎么工作的呢?它又是如何连接到真实的网络的呢?这就要说到虚拟机软件的关键本领了——网络虚拟化。

虚拟机软件扮演了一个“翻译官”和“调度员”的角色,它和宿主操作系统的网络功能紧密配合,让虚拟机里的Linux能够上网。主要有几种常见的联网模式,你可以理解为几种不同的“连接方式”:

桥接模式 (Bridged Networking):
这是最直观的一种模式。在桥接模式下,虚拟机里的网卡会“冒充”一个独立的、与你物理网卡在同一个网络段的设备。
打个比方,就像你家新搬来一个房客(虚拟机),这个房客也想要一个自己的门牌号(IP地址)。在桥接模式下,房客(虚拟机)会直接从你家路由器那里“申请”一个独立的门牌号(IP地址),就像你家另一个孩子一样。
虚拟机的网卡会直接“连接”到你的物理网卡上,然后通过物理网卡去连接你的路由器。宿主机的网络配置(比如IP地址、子网掩码、网关)是独立于虚拟机应用的,它们都跟物理网卡共用同一个网络。
这就像是虚拟机软件把真实的物理网卡“借”给你,让Linux去用,但Linux看到的不是你实实在在的物理网卡,而是虚拟机软件给它“包装”的一个虚拟网卡,这个虚拟网卡指向了真实的物理网卡。

NAT模式 (Network Address Translation):
这种模式下,虚拟机里的网卡不会直接出现在你的局域网里。它更像是一个“代理”。
虚拟机内部的网络和外部的网络是隔离的。虚拟机上的Linux会有一个私有的IP地址(通常是虚拟机软件自己分配的,比如192.168.x.x)。当Linux要访问外部网络时,虚拟机软件会充当一个“翻译官”,把Linux发出的请求,经过宿主机的网络接口发送出去,并且把返回的数据包也“翻译”回给Linux。
这就好比你让你的孩子(虚拟机)在家里面玩(内部网络),当他想给外面写信(访问互联网)时,你(宿主机)会帮他把信寄出去,并且把回信收回来,再转交给孩子。孩子看到的只是你在帮他处理对外通信,他自己并不直接面对外面的世界。

仅主机模式 (HostOnly Networking):
这种模式下,虚拟机只能和宿主机以及同一宿主机上的其他虚拟机进行通信,完全不能访问外部网络。
就像是你在一个房间里(宿主机),里面还隔出了一个小的独立空间(虚拟机),这个小空间里的人(Linux)只能和房间里(宿主机)的人交流,不能出去。

4. 为什么会“自带”?

“自带”这个说法,其实更准确地说是“虚拟机软件提供”。当你安装虚拟机软件时,这个软件本身就包含了模拟各种硬件的功能。当你创建并启动一个虚拟机时,虚拟机软件就会根据你的设置,在虚拟机的硬件清单中“添加”一个虚拟网卡。

这个虚拟网卡,它是虚拟机软件自己设计的一套抽象层。它定义了一套接口和行为,让操作系统(Linux)认为它是在和一块真实的网卡打交道。当Linux向这个虚拟网卡发送数据时,虚拟机软件就会截获这些数据,然后根据它自己的网络配置(桥接、NAT等)来处理,最终将数据通过宿主机的真实网卡发送出去。

总结一下:

网卡是硬件,这是毋庸置疑的。
虚拟机里的网卡,是虚拟机的软件在模拟硬件。 它不是凭空出现的,而是虚拟机软件通过精巧的设计,在操作系统看来,提供了一块功能齐全的网卡。
“自带”是因为虚拟机软件本身就提供了这些虚拟硬件的创建和管理能力。 你创建虚拟机时,就相当于在“组装”一台虚拟电脑,而网卡是这台虚拟电脑必不可少的一部分,所以虚拟机软件就负责“组装”好它。

所以,安装Linux虚拟机时,它“自带”网卡,这就像你买了一个可以组装电脑的机箱,机箱里虽然没有实际的CPU和内存,但它已经为你预留了接口,准备好了安装它们的“空间”和“可能性”。虚拟机的网卡,就是这种“可能性”被软件实现出来的结果。它让Linux能够进行网络通信,就像真实硬件一样,但其本质是软件层面的模拟和桥接。

网友意见

user avatar

想搞明白这个问题,你首先要知道“在数字信号层面,硬件设备究竟是什么样子”。


这是一颗典型的台式机CPU:

可以看到,CPU的屁股下面是一片片整整齐齐的铜刺。


这些刺的作用主要是给猫梳毛,用了那是人好猫也好:

谁用谁知道。


当然,这是CPU退休后的主要工作。

退休之前,这些刺的作用是插入这些洞洞:

我们可以看到,CPU的宝座下方,印刷电路板上有密密麻麻无数条细线一样的东西,就好像蜗牛爬出的痕迹一样。CPU那些“铜刺”实际上就连接在这些“细线”上面。


这些细线就是所谓的“印刷电路”,它的作用主要是给CPU上电刑。

这玩意儿你不严刑拷打,它就不乖乖干活……


咳咳。

好吧,说正经的。

CPU引脚的作用,一个是接受主板供电;另一个就是和形形色色的外部设备通讯:电信号通过印刷电路板,连通到线路板上大大小小方方正正的集成电路,指挥南桥北桥、集成网卡、声卡之类芯片工作;同时也接受它们发来的各种信号,针对性的解决外设们提出的问题。

CPU电信号并不仅仅和焊在主板上的芯片通讯;实际上,信号也会直接或间接的联通到旁边那些黑色蓝色的插槽里(在上面照片你看不见的地方,还会有白色褐色的各种插槽),管理你插在上面的各种东西。


这些引脚的作用都是事先规定好的。较新的台式机CPU引脚实在太多,我找了个老古董:

标红的那些引脚就可以和外设(以及内存)通讯。


现代CPU的引脚当然要多得多,但基本功能大同小异——除了换汤不换药的几百点差别之外,都是一回事。

嗯,大概就好像你玩的烟花和登月飞船的差别一样,大差不差。哈哈。


你可能马上会意识到一件事:

我买的主板可能来自很多很多不同的厂商,上面PCI/PCI-E插槽的数量、位置各不相同,将来用户插什么更是随心所欲——甚至,哪怕主板上用的声卡芯片本身,光小螃蟹一家都可能有alc882、883、887等等区别;再加上创旧啥的……


这么多五花八门的硬件,CPU怎么知道它们在哪里?怎么知道哪条线上连着哪种硬件?


简单说,当你按下电源键时,将会触发一个“自检”程序;这个程序会遍历总线上的所有硬件,把它们的信息搜集起来、存入BIOS指定区域(或其他平台规范的指定区域)。


在Linux下,这个表格的其中一部分(PCI总线上的设备)可以用lspci命令查看(这个说法并不准确,lspci可能并非简单的读取smbios数据;不过这里就不深入探讨了):


上面的信息含义如下:

对第一行:
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)

其中:
00:00.0 - The bus number, device number, and function number, in that order.
依次分别是总线号、设备号和功能号;这相当于设备地址。
Host bridge: - Device class.
设备类型;它实际上另外的一串十六进制数字,这里做了转换,显示成了更用户友好的文本。
Intel Corporation - Device vendor.
设备提供商
440FX - 82441FX PMC - Device name.
设备名称
[Natoma] - Mode of operation.
操作(控制?)类型
(rev 02) - Revision number.
版本号

如果改用lspci -n,我们就能看到它的数字形式了:


在Linux下,如果你有个设备无法被正确驱动;那么用lspci看一下上面的型号信息,然后上网搜索驱动,多半就能解决问题了。


事实上,Linux内核也是用类似方式搜索磁盘上和每个硬件相匹配的设备驱动、然后用insmod相关调用自动加载的。


我们可以用lspci -k看到PCI总线上每个设备对应的驱动:

红线标出的内核模块可以用lsmod命令查看,也可以用rmmod命令从内核卸载、然后再用insmod加载(想玩的话,可以在本地机上拿声卡、网卡练练手;但别折腾显示器、硬盘等关键设备的驱动,会把系统搞死的)。


有了设备驱动之后,操作系统终于可以骄傲的宣布,我有打印机支持!我有网卡支持!

然后,我们的程序就可以把自己的工作转交给设备驱动程序,让它帮我们完成任务了。


这个我之前写过文章,这里就不再啰嗦了:


前面提到了,我们的程序需要委托设备驱动和设备打交道;那么,设备驱动又是什么样子呢?


很简单,它是一组等待操作系内核调用的、由操作系统统一定义了接口界面规范的标准函数;这些函数内部会把我们的请求翻译成设备自己能够识别的“命令字”,通过CPU引脚发送到对应总线地址上——当设备收到了某个数字(命令字)时,它就知道自己该做什么了。


知道了这个之后,我们是不是马上就可以起很多“坏心思”了?


比如,机器上并没有显卡;但我们在机器自检过程中往SMBIOS写个:

00.0f.0 0300:15ad:0405

是不是就可以“欺骗”操作系统,让它以为总线00、设备号0f、功能号0对应的设备就是一块显卡?


然后,既然识别到了显卡,操作系统是不是就会傻呵呵的尝试为它加载一个驱动?

好了,驱动加载了,现在我们可以有两个办法“整活”。


办法一,驱动是我们自己写的;那么,当需要“把内容显示到屏幕”时,我不执行out指令(intel CPU上,in/out指令转门用来和外设通讯)——因为显卡就不存在,我能out到哪里?——而是搞一个vnc服务端,把屏幕内容转发到网卡或别的什么地方。

实际上,某些驱动甚至都不需要和SMBIOS中的信息对应。我说有,它就有。反正你想要显示什么,找我!

网卡也是类似路数。不过,Linux/Windows下,标准做法是搞一个假的“tun/tap设备”,它将被识别为网卡;而这个设备会把用户调用socket之类接口发来的网络报文给它(也就是我们写的程序);我们再把这个报文转发给物理网卡、USB或者声卡(比如把信号调制在音频中);反过来也对,我们可以把物理网卡、USB、声卡的mic接口传来的信息解码,再通过tun/tap设备发给用户,这就成功制造了一块虚拟网卡。


办法二,驱动就用标准的intel/nVidia自己的驱动;但我把驱动程序最终输出的IN/OUT指令都截掉,别让它真的发出去(因为设备并不在那个地址,或者虽然在,但不能让它用,否则会把宿主机的状态搞乱)——比如,可以利用AMD/intel的硬件虚拟化功能,这种功能会把最外层的、物理机上的操作系统置于ring -1,虚拟机程序则位于ring 0;当ring 0想执行特权指令时,CPU不会直接执行,而是触发一个中断,交给位于ring -1的物理机操作系统决定是否放行(或者是否需要改写,比如把本应传给物理网卡的数据传递到tun/tap设备)。这样一来,物理机操作系统就可以阻止或者重定向这些操作,既允许虚拟机执行各种动作、又避免它访问到敏感区域造成破坏了。

当然,很多设备,比如显卡,它的具体控制指令字以及详细参数是商业秘密,因此蹲在IN/OUT层面是没法有效模拟的。

那么,VMware等虚拟机就需要搞一个自己的虚拟显卡(或其他设备),直接从驱动层面就把用户请求截下来、然后渲染到自己的窗口里(或转发给其他设备)——驱动接口是标准化的,在这里截,动作就是可理解、可转发、可模拟的;不然到了IN/OUT水平,你都没人家的spec,还怎么搞?这也是为什么绝大多数虚拟机没法支持显卡物理加速的根本原因(当然,可以从openGL/DX 3D层面转发,不过技术上仍然存在很多麻烦,总之很难做到功能完整、性能不打折扣)。


而通讯协议有成文标准的,比如标准网卡、硬盘之类无需特殊驱动的设备,就可以在更低的层面(可以是IN/OUT指令,也可以是块设备层面;或者像网卡一样,专门搞出一个tun/tap设备来)拦下相关访问,从而搞出一个性能几乎不打折扣的、功能完整的虚拟设备——实际上,对于显卡,如果不使用它的2d/3d加速功能、仅仅当一块标准的VGA兼容显卡用的话,也是可以在较低层次兼容的。

原因很简单,这些东西有标准,任何厂商做都一个样,那么自然就可以“指令级模拟”它;相应的,没有统一标准、一家一个样的,那自然就没法“指令级模拟”,这种就必须装人家自带的驱动、我们也至多能模拟到“标准驱动接口”水平。


当然,如你所见,我这里很“糊涂”的把Windows/Linux以及虚拟/半虚拟混在一块乱说。

原因很简单,这些东西基本原理就这么个样子;但具体实现各家都不一样;甚至同一家在不同设备上都各有不同。因此这里只泛泛的讲一下基本思路,故意让你没法对号入座——前面就提到过,请学会看本质,不要纠结于细节。

除非你现在就有个任务,比如在Windows平台上实现一个半虚拟化的虚拟机、且要求你实现一个支持OpenGL/DX 3D的虚拟显卡:但你真能接到这种任务,还需要看我的入门科普吗?


总之,一言以蔽之:硬件设备对CPU来说是不存在的,它仅仅是往一组引脚输出电信号或者从引脚接受电信号而已(真·缸中之脑);而CPU对软件来说也是不存在的,软件仅仅是一组指令序列而已,这组指令你用人脑解读、草稿纸执行都行——除了慢点,没啥区别。


那么,只要你能接受CPU的电信号、并正确按设备标准把响应反馈回CPU的引脚,那么你就完全可以通过USB、网卡或别的什么东西远程模拟一个硬件,就好像它真的插在电脑主板上一样。

类似的,只要你有办法执行程序中的每条指令、并给出符合期望的执行结果——不管你是用真实的CPU执行还是写一个程序“假装”CPU存在(比如在intel CPU上用模拟器软件跑摩托罗拉CPU的程序),只要行为符合预期,程序就会“觉得”自己被人在“真实”的硬件上执行了。


换句话说,电脑系统的本质就是数字信号。只要你想办法把一组正确的数字信号适时混进输入输出流中去,你就可以模拟一切——就好像人脑的一切都是神经信号,那么理论上完全可以用模拟出来的神经信号欺骗一个泡在培养皿里的、孤零零的大脑,让它觉得自己是一个完整的人、享受了精彩的人生一样。

user avatar

在操作系统的后面,应用程序的视角里,永远只有软件接口。

所以在软件接口的后面是个真的硬件还是个别的什么玩意,有什么不可以呢?

user avatar

题主的问题可能是:在windows下装了个虚拟机之后,在windows里多了一个“网络设备”。

这问题说简单点吧。其实不管你物理上有没有这个“网卡”,windows本来都是认不出这个网卡的,windows之所以能知道有一个网卡,是因为有这个网卡的驱动程序。

道理差不多,懂了吧?

类似的话题

  • 回答
    你这个问题问得特别好,触及到了虚拟机技术的一个核心点!很多人都会有这个疑问:网卡明明是实实在在的硬件,怎么安装个虚拟机,它就好像自己长出了一块网卡似的?而且安装虚拟机不是纯粹的软件操作吗?咱们得从几个层面来剖析这件事,把这层“云里雾里”的软件和硬件关系给掰扯清楚。1. 现实世界的网卡:硬件的“实体”.............
  • 回答
    关于网传苹果考虑将15%30%的硬件产能转移出中国,这并非空穴来风,而是近年来地缘政治、全球供应链重塑以及苹果自身战略调整等多重因素作用下的一个可能趋势。要评价这件事,需要从几个层面深入剖析:一、 苹果为何会考虑转移产能?1. 地缘政治风险及供应链安全: 这是最核心的驱动因素。中美贸易摩擦的持续,.............
  • 回答
    .......
  • 回答
    .......
  • 回答
    .......
  • 回答
    话说回来,给家里那位小的挑选一张千兆PCI网卡,这事儿看着简单,其实里面门道也不少。市面上几十块钱的网卡多得是,要挑到个靠谱的,让娃的网络顺顺当当的,确实得花点心思。别看它就那么个小小的东西,但要是买不好,一会儿掉线一会儿卡顿,娃玩游戏、学东西都得受影响,那可就糟心了。我给你掰扯掰扯,怎么才能挑到一.............
  • 回答
    哈哈,你这么一说,我的记忆闸门也一下被打开了!九十年代用同轴电缆的网卡,那可是我早期接触互联网的“门面”啊!现在想起来,那段时光还真是挺有意思的。那个时代,我们网卡长啥样?你说的同轴电缆网卡,我印象最深的就是两种主要的接口类型:1. BNC接口(Bayonet Neill–Concelman):这.............
  • 回答
    家里的监控系统确实有可能让你的网络“吃不消”,特别是当你发现玩游戏都开始卡顿的时候。这就像家里突然多了一个“大胃王”,把本就不算宽裕的带宽给占用了不少,导致原本流畅的网络体验急剧下降。让我来给你掰开了揉碎了说一说,这到底是怎么一回事,以及为什么你的网速会感觉“爆了”。首先,你的网络“瓶颈”在哪里?想.............
  • 回答
    “网文是垃圾文学吗?” 这是一个非常具有争议性的话题,没有一个简单的“是”或“否”能够概括。事实上,网文是一个极其庞大且多元化的文学领域,将所有网文简单地归类为“垃圾文学”是片面且不准确的。为了更详细地探讨这个问题,我们可以从以下几个方面来分析:一、 定义网文与“垃圾文学”的内涵 网文(网络文学.............
  • 回答
    网易,曾经是中国互联网行业的一面旗帜,在门户时代、游戏时代都曾占据举足轻重的地位。然而,随着时代的发展和市场格局的变化,不少人认为网易似乎在某些领域“掉队”了,或者说,它未能像其他巨头一样不断开疆拓土,总给人一种原地踏步的错觉。要说网易是如何“掉队”的,这并非一蹴而就,而是一个复杂因素交织的结果。我.............
  • 回答
    .......
  • 回答
    观察者网是一家颇受关注的中国大陆媒体。如果想深入了解它,我们不妨从几个维度来看:一、 核心定位与内容特点: “中国立场,世界视野” 这是观察者网最常对外宣传的口号,也是其内容创作的核心基调。它强调以中国的视角来解读国际国内的重大事件,关注国家发展和民族复兴,并以此为出发点去观察和分析世界。 .............
  • 回答
    观察者网是一家媒体机构,关于其是否“中肯公正”,这是一个复杂且存在争议的问题,没有一个简单的“是”或“否”的答案。理解这个问题需要我们从多个角度来审视其内容、立场、运作方式以及不同受众的评价。从观察者网自身的定位和表达来看: 官方表态和自我定位: 观察者网在其宣传和报道中,通常会强调其“中国视角.............
  • 回答
    观察者网,一个在中国互联网上颇有存在感的综合性新闻资讯平台,它的内容触角伸得很广,从国内的政治经济社会民生,到国际的格局变动、地缘政治,再到文化、科技、军事,几乎无所不包。你可以把它想象成一个大观园,里面内容繁多,观点鲜明。要说它的特点,有几点是绕不开的: 鲜明的立场与观点性: 观察者网最显著的.............
  • 回答
    煎蛋网,听名字就透着一股子“接地气”的意思,就像咱们家厨房里每天都会有的那道家常菜。但你要是以为它是个卖煎蛋或者教怎么煎蛋的网站,那就真是“想多了”。简单来说,煎蛋网是个中文的互联网资讯聚合和分享平台,尤其擅长把那些你可能错过的、但又很有意思的全球互联网上的各种新鲜事、奇闻趣事、深度解读、科技动态、.............
  • 回答
    嘿,大家!最近我一直在关注关于国产科幻大片《流浪地球》在国外的一些讨论和评价,感觉还挺有意思的。作为一部被寄予厚望的作品,它在海外观众中的反馈是相当多元化的,从惊艳到吐槽,可以说是应有尽有。首先,很多人都对《流浪地球》的宏大叙事和独特的“流浪地球”概念印象深刻。在很多外国网友看来,将地球变成一艘巨大.............
  • 回答
    关于越南网友对《流浪地球》的评价,可以从几个主要方面来梳理和讲述,力求还原一个真实且生动的观影反馈:1. 视觉特效的震撼与惊喜:这是无论哪个国家的观众都会首先提及的点。《流浪地球》最为突出的就是其宏大的宇宙场景和令人惊叹的特效制作。越南网友普遍表达了对电影视效的“哇塞”感,许多人会用“惊艳”、“震撼.............
  • 回答
    .......
  • 回答
    维普网查重,就像一位细致入微的侦探,会把你的论文内容与海量的已有文献资料进行“一对一”的比对。它不像我们自己看一遍就能理解那么简单,而是有一套严谨的程序和强大的技术支持。核心原理:文本相似度比对说白了,维普网的查重就是通过算法来计算你的论文与数据库中其他文献的“相似度”。这个相似度不是简单地看有没有.............
  • 回答
    太棒了!拥有 1GB/s 的网速绝对是一种令人兴奋的体验,它能够颠覆你对互联网的认知,让你在数字世界中畅行无阻。让我来为你详细描述一下,从不同的角度来感受这种速度带来的巨大差异:一、 下载速度的极致解放: “秒”级下载时代: 你还记得过去下载一部电影需要等几个小时,或者一个大型游戏需要半天的情况.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有