如何利用小游戏开发框架提升企业小程序的用户体验与运营效率
625
2022-09-19
关于虚拟机的通讯原理
前段时间,与一哥儿们讨论这个问题的时候,让人挺纠结的。自己抽空分析了一下,下面是学习笔记:
本机环境: Windows XP SP3 (IP:192.168.1.100 后续用真实机代替本环境)
虚拟环境: VPC2007 (Windows Server 2003 IP:192.168.1.200 后续用虚拟机代替本环境)
抓包软件: OmniPeek V5.4
(注意:虚拟机与本机要在同一个网段,不然会ping不通,另外在端要先运行arp -d 命令清空ARP缓存.... ^_^)
记得我以前在无忧网客联盟论坛里面 学习CCNA/NP时,看过一些关于以太网的基础知识。毕竟在以太网中传输数据必须要靠唯一的MAC地址来识别最终的目标计算机。简单的来讲,在LAN中,如果一台计算机要与另一台计算机通讯传送数据包,那么必须先要检查自身ARP缓存中该IP地址的MAC地址,如果MAC不存在,就会在广播网里面发送一个ARP请求,再根据ARP数据包找到该计算机的MAC地址,待MAC地址匹配确认,才开始最终的传输。
(当初就怎么没想过LAN数据包是如何到达虚拟机的? 囧......)
1、设置OmniPeek:
这里选择IP协议:
2、清空本机ARP缓存:
3、分析数据包
既然能ping通,当然首先是捕获一下本机的ICMP协议数据包,看看有没有产生真正的数据包。于是用OmniPeek抓包分析一下,果然产生了“真实”的ARP、ICMP共计4条数据包:
(这里“真实”一词之所以打个引号,是因为......留个疑问,后面再做解释吧!)
先打开ARP请求的数据包,因为之前运行了arp -d 命令清空了ARP缓存表,所以才会产生出ARP请求的数据包:
再看看ARP回显的数据包,此时目标地址与源地址都已经得到:
再看ping程序产生的ICMP数据包,先是请求(这里ICMP Type 表示请求或回显的标志):
再看ping程序回显时数据包:
这些数据包,总体看来似无任何“异常”,从ARP到ICMP一路都顺畅与规矩,仍然发现不了什么问题。
带着疑问始终不解,于是请教了网络群里面老兵,他告诉我VPC/VM虚拟机里面一般会有一个独立的服务或驱动在模拟一块虚拟网卡。于是在微软官方某大牛的博客 中找到了这样答案,大致意思是这样的:
1、采用NDIS过滤驱动,基于VPC或是Virtual Server的虚拟网卡都是模拟了一个虚拟适配器设备,该虚拟网卡的MAC地址都是以00-03-FF开头;
2、每个一个虚拟机都会创建一个默认的虚拟网络适配器(最多只能虚拟创建四个);
3、在安装完VPC之后,会在系统中多个服务或驱动:Virtual Machine Network Services,这个服务很强大,它负责数据在虚拟网卡和物理网卡中传递。
依靠Virtual Machine Network Services,物理网卡会处于一种XXO的状态,它不光会接收投递到其真实MAC地址的数据,同时还会接收投递到虚拟网卡MAC地址的数据,经过此一步数据汇总,然后再依据各个MAC地址,数据投递到相应MAC的网卡之上,不管数据是投递到虚拟机还是真实本机,反之亦然。
于是用巨盾的进程工具,果然找到了这样一个驱动:
于是终于搞清楚了,为什么能ping通虚拟机了!!!
关于VM的话,相信也是类似的“原理”吧,它带有特殊的进程、特殊的服务或许特殊的驱动,做些“特殊”的事....有兴趣的朋友不妨你自己试试!
(由于鄙人的老本本硬盘空间很“宝贵”,我就不试了。自己一直没用VM,即便“能省就省”吧.....)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~