云计算&容器 – 虫虫之家 http://ijz.me 略懂技术 Sat, 01 Mar 2025 15:25:16 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.7.2 数字电路到可消化胶囊机器人,细数麻省理工改变世界的伟大发明 http://ijz.me/?p=1082 http://ijz.me/?p=1082#respond Wed, 27 Feb 2019 02:00:00 +0000 http://ijz.me/?p=1082

大家都知道麻省理工MIT是世界数一数二的大学,更是计算机技术科学界的翘楚。去年麻省理工又投资十亿美刀建立苏世民(Stephen A. Schwarzman)计算机学院。在最近院庆活动中,麻省了推出了其CS科技成果展,罗列了一些了伟大的发明包括了数字电路到可可消化胶囊肠壁治疗机器人。本文虫虫和大家一起来看看麻省这些改变世界的伟大发明。

1937年

数字电路

1937年克劳德·香农(Claude Elwood Shannon)在麻省发表硕士论文《A Symbolic Analysis of Relay and Switching Circuits》(继电器与开关电路的符号分析):真/假逻辑的原理可以用来代表电气开关的开关状态。该论文开创了数字电路领域的基础,是整个数字行业,计算机的基础。基于该开创新的发现及后续一系列的理论,克劳德·香农被称为信息论之父。

上世纪40年代

数字计算机

世界上第一台可以实时运行的数字计算机来自旋风计划(Project Whirlwind)。这是二战期间的一项军方研究,1944年由麻省理工学院与美国海军合作开发完成旋风机器人,用于通用飞行模拟。该计划成功导致了世界上第一胎可实时运行的数字计算机旋风计算机,也为后续1951年麻省理工学院林肯实验室的成立奠定了基础。

Memex数据系统

Vannevar Bush教授1945年发表论文《As We May Think》提出了一个名为“Memex”的“扩展存储器(Memory-Extender)” 数据系统。该系统设想可以用来“存储用户所有的书籍,记录和通信信息”并能随意检索它们。这个概念启发了早期的超文本系统,正是由于系统的产生和繁荣,启发了几十年后万维网的诞生。

上世纪50年代

函数式编程语言LISP

第一种函数式编程语言LISP是由John McCarthy教授于1958年在麻省理工发明的。在LISP之前,基于功能事的编程很难同时处理多个进程。函数式编程可让您更简单地描述所需的行为,从而可以处理比以往更大的问题。LISP诞生带动了大量的语言产生比如Clojure, Scala, Erlang, Haskell和 Elixir等,甚至在当今的编程语言中,增加函数式功能也还是个热点。

实时传真

1959年麻省理工学院的学生Sam Asano发明了一种通过电话线传输扫描材料的​​技术,可以让你的听到声音的同时也能看到画面。但是该发明并未引起重视,日本电信公司NTT收购,NTT认为可以用来代替发电报,因为写下了传输图形,敲打字符要来的快。

上世纪60年代

多人制视频游戏

麻省理工电气工程系气采购了PDP-1计算机首先被用来不是计算,而是被一群贪玩的学生用来打游戏了。1962年Marvin Minsky AI团队的学生Steven “Slug” Russell和游友们一起开发了一款空战视频游戏“SpaceWar!”,并在码农中广为流行,这是世界上第一款多人制游戏。

CTSS、Multics和密码

我们每天都要和密码打交道,密码是保障我们安全的最重要的屏障。而密码的发明也是来自于麻省理工。世界上第一个使用密码的系统是麻省理工学院的分时系统CTSS,弗尔南多考巴托(Fernando Jose Corbato) 教授于1963年在开发CTSS时候发明了密码,当时系统为了实现一个多终端,多用户,又互相隔离,每个用户自有文件目录,通过密码来区别用户成了简便快捷的解决方案。需要提及的是CTSS系统和后续的Multics,为Ken Thompson和Dennis Ritchie开发UNIX操作系统奠定了基础。考巴托教授因为这些突出的贡献于1990年被授予了计算机图灵奖 。

图形用户界面

麻省理工的Ivan Sutherland博士生已经有了直接与电脑屏幕连接的想法,在前面提到的Memex系统的启发下,他于1963年开发“Sketchpad”系统,允许用户使用触摸笔绘制几何形状,开创了“计算机辅助绘图”的先河!

阿波罗导航系统

1969年玛格丽特.汉密尔顿(Margaret Hamilton)率领麻省理工学院的团队编写了阿波罗11号导航系统,该系统辅助宇航员Neil Armstrong和 Buzz Aldrin成功登月。系统功能强大,还覆盖了将飞行器计算机执行指令,比如从优先系统到雷达系统的切换等,更值得称道的的该系统在载人登月的阿波罗登月计划任务中始终未出现任何bug。汉密尔顿作为码农中的巾帼好英雄在2016年被奥巴马总统亲自颁发了自由总统自由勋章。

上世纪70年代

电子邮件Email

1971年麻省理工校友Ray Tomlinson发送了第一封通过计算机网络传递的电子邮件。他在BBN Technologies工作时,创造了Email,也是第一个使用@的人。

个人电脑

麻省理工教授Butler Lampson教授创立了施乐公司施乐帕克(Xerox Palo Alto)研究中心研究中心(PARC)。由于突出性研究工作,使Lampson教授赢得了“现代PC之父”的称号。1973年PARC创造世界上第一台个人电脑奥拓(Alto)。在奥拓电脑上有了世界上第一个图形用户界面(GUI),第一个位图显示,以及第一个“所见即所得”(WYSIWYG)编辑器。

数据加密

1977年麻省理工团队在发明电子商务时候,发明了数据加密的RSA算法,RSA算法是一种非对称加密算法,它基于大质数的因数分解的困难度,来保证RSA的可靠性。

该算法在虫虫之前的文章中曾今介绍过,大家可以关注虫虫,从历史文章中查看详情介绍。

RSA算发的名字也是来自于麻省理工的三个发明人罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)的名字,取他们名字的第一个字母就是RSA。

电子表格

1979年,Bob Frankston和Dan Brickson在麻省理工的大型机上工作夜以继日的工作,并创造了世界上第一个电子表格系统VisiCalc。VisiCalc一出世就受到广泛好评,第一年就卖出了超10万份的拷贝。有意思的是,VisiCalc还是推动苹果AppleⅡ电脑的大卖,因为当时VisiCalc和AppleⅡ是捆绑销售的。

上世纪80年代

以太网

通过以太网技术可让我们通过简单的电缆插件就可以联网。以太网技术的发明源于麻省理工校友鲍勃.梅特卡夫Bob Metcalfe。他曾在1973年了一篇有关以太网潜力的备忘录,1979他和助手一起发表了论文《以太网:局域计算机网络的分布式包交换技术》为以太网的诞生奠定了理论基础。1980梅特卡夫创建了3com公司,3com公司联合DEC、英特尔和施乐一起起早指定了太网标准化规范标志着以太网的正式诞生。由于以太网的发展和促进,才有了后来互联网的飞速发展和流行。

光学鼠标

麻省理工本科生史蒂夫.基尔希(Steve Kirsch)于1980年第一个申请了光学计算机鼠标专利。他设想使用最少的精密移动部件制作一个“点设备”,为此,他创立了鼠标系统公司。他还发明了跟踪方法专利,通过点击计数来计算在线广告展示次数。

自由软件的兴起

黑客文化和自由软件运动的主要先驱麻省AI实验室的Richard Stallman教父于1983年发起了GNU(GNU代表“GNU’s Not Unix”)计划,项目旨在开发Unix操作系统的免费替代品,GUN项目开发GCC、GDB、Gxxx等以G开头的自由软件。也为GNU/Linux操作系统和其他重要的计算创新奠定了基础。

生成树算法

Radia Perlman 是码农界的又一女豪杰,具有 “互联网之母”之称。她于1985年开发了生成树算法是全球计算机网络数据传输路由的基础。该算法将以太网从原始有限可扩展的单线CSMA/CD转换为可处理大型网络的协议,并使以太网可极大地利用带宽。路由生成树算法对互联网数据传输产生了深远影响,提高了整改互联网的鲁棒性,从此,互联网具具有了自我管理和可扩展的特性。

值得提及的是她还创建了LOGO,这是第一种面向儿童的编程语言。

上世纪90年代

万维网联盟(W3C)

WWW之父Tim Berners-Lee在发明Web之后,于1994年加入麻省理工并成立了一个致力于建立全球标准的互联网联盟,为建站、浏览器和设备提供服务,这就是W3C的来历。W3C标准用于构建可访问,安全,并可以轻松被搜索引擎优化(SEO)的网站标准。

区块链的诞生

1999年麻省理工教授Barbara Liskov的发表了关于实用拜占庭容错算法(PBFT: Practical Byzantine Fault Tolerance)论文奠定了区块链的理论基础,并生成了第一个区块链,这是一种广泛使用的密码系统。利斯科夫教授团队的区块链系统可以处理高吞吐量的事务,还首创了很多当今区块链平台至关重要的概念。

近20年

Roomba扫地机器人

Colin Angle在读本科的时候加入了AI 实验室,在实验室时他萌生了让机器人能够和真实的环境进行实时反馈的想法,他开发了一款可移动机器人GenghiS。Genghis仿生了蚂蚁的灵感,他的导师是著名的机器人之父 Rodney Brooks教授。1990年, Colin Angle和导师 Rodney 教授同学 Helen Greiner 一起创办了机器人公司 iRobot。iRobot创建很多NB的机器人,比如火星车火星(漫游者Sojourner Rover),但是他的商业模式都不是很成功,直到2002年Roomba的推出,对,就是它,没有腿的机器人。截止目前Roomba扫地人已售出超2000万台,并催生了整个自动化清洁产品行业。

移动个人助理

大家都知道苹果的Siri和亚马逊的Alexa。但是,很早之前就有了这样的系统。2007年麻省理工的教授Boris Katz就开发了StartMobile,一款可进行约会安排,信获取息以及使用语音完成各类任务的APP。

EdX在线开放课堂

由前CSAIL主管Anant Agarwal领导,2012年麻省理工联合哈佛大学开办了大规模在线开放课堂平台EdX,通过该EdX提供免费的在线课程。截止目前EdX免费在线课程已经吸引了全球逾1800万学习者。

可消化胶囊机器人

麻省计算机科学与人工智能实验室(CSAIL)Daniela Rus于2016年等开发了可消化折叠胶囊机器人,可将其吞咽到肠胃,预热可从胶囊状自动展开,可以在体外磁场控制它攀爬你的胃壁,修复伤口,去除结石和误吞咽下去的异物等。

波士顿动力

Marc Raibert教授于1992年创建了波士顿动力公司。该公司制造了让人们大饱眼福的“大狗”,“Atlas”, “SpotMini”等机器人明星,可以攀爬,跑步,跳跃,甚至可以进行翻转。其中Atlas被用于DARPA机器人挑战赛,取得很棒的成绩。2013年波士顿动力公司被谷歌收购,2017年波士顿动力再次易主被日本软银收归旗下。

]]>
http://ijz.me/?feed=rss2&p=1082 0
如何判断 Linux 是否运行在虚拟机上/zz/ http://ijz.me/?p=685 http://ijz.me/?p=685#respond Fri, 14 Nov 2014 07:56:25 +0000 http://ijz.me/?p=685  

在 WebHostingTalk 论坛上有些国外奸商会把虚拟机当作独立服务器卖,去年7月份的时候就有一位中国同胞上当受骗, 并在 WHT 上发帖声讨,证据确凿,甚至连服务商自己也承认,回帖达355篇。这家独立服务器/VPS 提供商 HostATree.com 居然大胆的把 OpenVZ VPS 这种一看就知道是虚拟机的虚拟机当作独立服务器卖,晕,至少也要弄个 VMWare/KVM/Xen HVM 吧(更难发现是虚拟机),用 OpenVZ 这种容器也太欺负人了:)昨天恰好收到网友一封邮件问到了如何判断自己买的是独立服务器还是虚拟机的问题。这里 VPSee 简单介绍一下市面上常用虚拟技术(包括容器技术)的判别小技巧。

判断 OpenVZ/Xen PV/UML

判断 OpenVZ/Xen PV/UML 是最容易的,直接检查 /proc 下的相关目录和文件就可以知道,比如 OpenVZ VPS 上会有 /proc/vz 这个文件;Xen PV 虚拟机上会有 /proc/xen/ 这个目录,并且目录下有一些东西;UML 上打印 /proc/cpuinfo 会找到 UML 标志。写了一个简单的 Python 脚本来检测:

#!/usr/bin/python

# check if a linux system running on a virtual machine (openvz/xen pv/uml)

# written by http://www.vpsee.com

 

import sys, os

 

def main():

if os.getuid() != 0:

print “must be run as root”

sys.exit(0)

 

# check OpenVZ/Virtuozzo

if os.path.exists(“/proc/vz”):

if not os.path.exists(“/proc/bc”):

print “openvz container”

else:

print “openvz node”

 

# check Xen

if os.path.exists(“/proc/xen/capabilities”):

if (os.path.getsize(“/proc/xen/capabilities”) > 0):

print “xen dom0”

else:

print “xen domU”

 

# check User Mode Linux (UML)

f = open(“/proc/cpuinfo”, “r”); t = f.read(); f.close()

if (t.find(“UML”) > 0):

print “uml”

 

if __name__==”__main__”:

main()

判断 VMware/Xen HVM/KVM

如果使用的是 VMware/Xen HVM/KVM 这样的全虚拟就更难判断一些,最准确的办法是读取 CPUID 来判断,Xen 源代码下面有一段检测是否是 Xen 的 C 语言代码 tools/misc/xen-detect.c,这段代码提供了一个很好的例子,VPSee 重写了代码,用宏替代了函数,增加了对 VMware 和 KVM 的识别,用 gcc 编译后就可以运行:

/*

* check if a linux system running on a virtual machine (vmware/xen hvm/kvm)

* written by http://www.vpsee.com

*/

#include stdio.h

#include string.h

 

#define HYPERVISOR_INFO 0x40000000

 

#define CPUID(idx, eax, ebx, ecx, edx)

asm volatile (

“test %1,%1 ; jz 1f ; ud2a ; .ascii “xen” ; 1: cpuid”

: “=b” (*ebx), “=a” (*eax), “=c” (*ecx), “=d” (*edx)

: “0” (idx) );

 

int main(void)

{

unsigned int eax, ebx, ecx, edx;

char string[13];

 

CPUID(HYPERVISOR_INFO, &eax, &ebx, &ecx, &edx);

*(unsigned int *)(string+0) = ebx;

*(unsigned int *)(string+4) = ecx;

*(unsigned int *)(string+8) = edx;

 

string[12] = 0;

if (strncmp(string, “XenVMMXenVMM”, 12) == 0) {

printf(“xen hvmn”);

} else if (strncmp(string, “VMwareVMware”, 12) == 0) {

printf(“vmwaren”);

} else if (strncmp(string, “KVMKVMKVM”, 12) == 0) {

printf(“kvmn”);

} else

printf(“bare hardwaren”);

 

return 0;

}

判断 VirtualBox/Virtual PC

什么?这种家用桌面虚拟机自己装的还会不知道?!如果不知道的话也有办法,在 Linux 下运行 dmidecode 工具然后查找 Manufacturer: innotek GmbH, Manufacturer: Microsoft Corporation 关键字就能对应上 VirtualBox 和 Virtual PC.

 

]]>
http://ijz.me/?feed=rss2&p=685 0
vmware虚拟机的网络设置 /zz/ http://ijz.me/?p=76 http://ijz.me/?p=76#respond Fri, 29 Nov 2013 16:00:00 +0000 http://ijz.me/?p=76 在很多情况下,电脑爱好者需要有一个网络环境来学习网络服务器的安装和设置,黑客攻防技术等,但是往往大部分的业余电脑爱好者都没有这样的条件.虚拟机软 件VMware的出现使得我们可以以非常低廉的价格来获得一个非常高效实用的网络实验平台.然而,VMware虚拟机的网络设置一直是很多初学者感到困惑 的地方,常常在各大电脑论坛上看到有人寻求有关VMware网络设置解决方案的贴子,虽然互连网上也有很多这方面的文章,但往往说的不够完整,或者写的过 于专业,使初学者看后仍是一头云雾.针对这个情况,笔者在学习阅读网络上的各类文章和VMware软件的文档后,结合自己的经验整理出这些内容,力图比较 详悉又简明易懂的表述来说明VMware虚拟机网络的设置过程.


下面我想以Linux平台的VMware虚拟机的安装和网络的设置为例来说明VMware的安装和网络设置过程。
一、VMware的安装
1,获得VMware
在Internet上可以下载到VMware Workstation的试用版本,很多Linux站点都可以下载
推荐两个有VMware下载的网站:
http://www.linuxeden.com
http://www.linuxfans.org
2,安装VMware的硬件要求
虚 拟机是极费电脑资源的软件,对电脑的硬件要求比较高,尤其是对内存容量要求更高。一般来说256M内存是底线,相对来说CPU就没那么高要求了,一般五六 百MHz以上的CPU就可以跑起来,当然如果想使得虚拟系统和实际系统都运行的比较流畅,并且可以在虚拟系统和主系统上运行PHOTOSHP,CAD等大 型软件的话,推荐使用512M的内存,1G以上的CPU。就本人的电脑而言,配置是 毒龙700M CPU+256M SDRAM内存,跑Redhat 8.0主系统和Windows 2000 Server虚拟系统,并分别在主系统和虚拟系统上运行DNS服务器,HTTP服务器,FTP服务器等, 系统基本可以跑的流畅 ,内存使用率在 52%以上,CPU使用率在9%左右,swap使用量达57M(平时只要5M左右),这也仅仅是在正常运行时的资源耗费情况,在虚拟系统开机和关机的时候 实际资源耗费量更大。如果想在跑虚拟系统的时候顺便听听MP3的话,MP3有明显的停顿和暴音。基本上是用足了资源,当然再在主系统和虚拟系统上运行几个 FTP和HTTP客户端,还是可以的。如果你的内存只有128M,理论上还可以跑虚拟机,尽量关闭所有的Linux后台进程,不用KDE,GNOME等这 样的大型桌面管理系统,而只用X和TWM窗口管理器就可以省下很多内存,并且在虚拟机中跑WIN98、WIN95或者字符界面的Linux系统等对硬件要 求比较低的系统,跑VMware还是可以的,只是在窗口切换的时候会有一点卡。如果你的内存只有64M的话那你只能乞求奇迹的发生了,或者能跑个DOS虚 拟系统? 有兴趣的朋友不妨去试一下,看看VMware对硬件要求的极限是多少。
3,VMware的安装
解压缩软件包:
#tar xfvz VMware-workstation-3.2.0-2230.tar.gz
进入安装目录
#cd vmware-distrib
运行安装程序
#./vmware-install.pl
根据提示安装软件,安装程序会询问软件各种文件的安装目录,直接回车用默认值就可以了。
需要注意不要盲目直接按回车,在安装程序提示是否让Vmware支持网络的时候一定要选择yes,在提示是否支持host-only网络的是时候也要选择yes。
注意:VMware在安装过程中会根据你的系统内核版本选择一个和系统匹配的配置,如果找不到则需要编译,所以你需要一个GCC编译器,否则VMware将无法安装。
如果安装顺利,安装程序会有类似 : enjoy vmware! 之类的提示。说明已经安装成功。
二、运行VMware
在终端中输入vmware并回车就可以运行VMware
有 一点需要注意,VMware只是一个前台程序,它的运行需要VMware后台虚拟设备的支持,即在你运行VMware前你已经运行了VMware的后台服 务程序,一般情况下安装程序安装完以后会执行这个工作,并把VMware的启动脚本添加到 /etc/rc.d/init.d目录下,使它在每次开机的时候都自动运行,如果由于某种原因已经把VMware的后台服务程序关闭请手动开启:
#service vmware start
用ifconfig查看vmware的虚拟网络设备:
#ifconfig
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:454 errors:0 dropped:0 overruns:0 frame:0
TX packets:454 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:33512 (32.7 Kb)  TX bytes:33512 (32.7 Kb)
vmnet1    Link encap:Ethernet  HWaddr 00:50:56:C0:00:01
inet addr:192.168.221.1  Bcast:192.168.221.255  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:191 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
vmnet8    Link encap:Ethernet  HWaddr 00:50:56:C0:00:08
inet addr:172.16.74.1  Bcast:172.16.74.255  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
可以看到VMware的虚拟网络设备vmnet1 和vmnet8
如果用ifconfig命令没有看到这两个虚拟设备则说明VMware的后台服务程序没有运行,执行vmware的时候将出错,请用上面讲的命令运行。
VMware不是免费软件,第一次运行的时候需要输入序列号,你可以按GET SN按扭从VMware官方网站得到一个试用三个月的序列号。为了避免麻烦我先贴几个在这里:
VMWare 3.0 for Linux :
625AX-8DE40-46RA3-30HUM
625AX-8DE40-46RA3-30HUM
60N88-8DW44-16H77-32KT4
6818X-84WD1-01KDK-3JN9X
FOR win V3.2.0-2230
0F11N-004U4-0U0HJ-12XDG
04590-00NU1-0UMKX-161AW
0DM1J-004H0-0KTA4-1614F
04HCM-085K0-0R8UM-1FH0U
0451J-0AJHJ-0KXKX-1412U
输入序列号后会弹出虚拟机配置向导,这些内容不在本文叙述范围内,而且这些比较容易掌握,所以这部分内容请读者自己去摸索。
按VMware工具条上的“Power On”按钮启动虚拟机,按F2键进入BIOS设置,让虚拟机从光盘启动,保存后重起虚拟机,这样就可以从光盘启动,安装系统了。
(注 意:在vmware的使用中笔者发现这样一个问题:在主系统没有安装显卡3D驱动程序的情况下在虚拟机上安装虚拟系统会很慢,而且经常失去响应,但是装上 了显卡的3D加速驱动后安装明显加快,所以在安装虚拟系统的过程中如果发现类似问题,可以先把显卡3D驱动装上再试。)
系统安装好后别忘了安装VM TOOLS,(VMware 工具栏——>Settings——>VMware Tools Install)这会显著增加虚拟系统的性能。
三、虚拟机的网络设置(原理篇)
在正式开始之前,我想有必要先来学习一些必要的网络知识。否则,在不懂得任何原理的情况下依葫芦画瓢虽然可解一时之需要,但遇到具体情况改变的情况下就只能干瞪眼了。由于篇幅限制,这里只讲和VMware设置有关的一点简单网络知识。
1,什么是网络?
Internet 是指“互连网”,好象这句话说的有点多余,不过确实有很多人对他有错误的理解,“互连网”是指一个个网络互连,而不是像有些人想象的那样把一台台电脑杂乱 无章的互连。当我们需要用电脑和远方的电脑通讯的时候,先把本地电脑组成一个网络,当然,远方的电脑也要组成一个网络,在把这两个网络“互连”起来,组成 “互连网”。用电话线和MODEM拨号上网的时候是通过电话线先把自己的电脑连到ISP(Internet Service Provider 网络服务提供商)的网络中,再经过ISP的网络和世界各地的电脑通信。
2,电脑如何通过网络传递数据?
每一个网络需要一个网络地址,网络 中的电脑需要一个在网络中唯一确定的标识,网络号和电脑的标识号组成了IP地址,所以IP地址是由网络号和主机号组成的。当你的电脑要和其他的电脑通信的 时候,电脑会先根据IP地址和子网掩码确定目标主机是在本地网络中还是在远程网络中,如果在本地网络中则直接把一个包含信息的IP数据包发送到本地网络 上,目标主机会检测到并接收,如果目标主机在远程网络则需要通过一台被称为网关的的电脑转发到远程网络,网关(geteway)可以看做是连接网络和网络 的桥梁,网关的概念很广,这里为了简化起见,我们暂且认为它和路由器是同一个概念。路由器(router)是一种连接网络和网络,并选择IP数据包传送的 路径的一台特殊计算机。很多情况下网关的概念等同于路由器。
3,网络中电脑的IP地址有何要求?
在同一个网络中,每台电脑必须具有相同的 网络号,这样电脑才认为目标主机是在本网络中并且可以正确送达,如果网络号不同,即使目标主机已经用网线连到本网络中数据也不能直接送达,即使这两台电脑 近在咫尺,在电脑看来仍旧是一台远程电脑.比如一个网络的网络号为192.168.0,则该网络中的计算机的IP地址必须以192.168.0开头。假如 要传送一个数据包到网络号为192.168.1的网络,则必须通过路由器转发,如果该网络中没有路由器,则发送失败。因此,为了连接两个网络,一台路又器 至少要有两个网络接口(网卡、调制解调器等联网设备称为网络接口)。网络和路由器的关系见下图:
—————           ————–          ————–
|  网络A      |           |  路由器    |          |  网络B     |
|             |           |            |          |            |
|         □–|———–|–□    □–|———-|–□        |
|         1   |           |  2     3   |          |  4         |
—————           ————–          ————–
图 一
图中的小方框表示网卡或其他网络接口。
可以看到路由器至少有两个网络接口。
假设网络A的地址为192.168.0 网卡1的地址为192.168.0.1
网络B的地址为192.168.1 网卡4的地址为192.168.1.1
则路由器上的网卡2必须属于网络 192.168.0 地址为192.168.0.x (x为任意小于255的数)
路由器上的网卡3必须属于网络 192.168.1 地址为192.168.1.x (x为任意小于255的数)
就是说,路由器既属于网络A,又属于网络B,这样才起到桥梁的作用。
当数据从网络A发往网络B时,路由器从网卡2接收数据,经过改装后通过网卡3发送数据到网络B。
这样,我们称网卡2的地址 192.168.0.x为网络A的网关
网卡3的地址 192.168.1.x为网络B的网关
4,VMware虚拟机提供了那些虚拟网络设备?

默认安装的情况下VMware提供了虚拟网卡vmnet1和vmnet8,还有在虚拟系统上的虚拟网卡 “AMD  PCNET Family PCI Ethernet Adapter”
请 注意,vmnet1和vmnet8是主系统上虚拟设备,用ifconfig命令可以看到,而”AMD  PCNET Family PCI Ethernet Adapter”是虚拟系统上的虚拟设备,在安装完虚拟系统后可以在设备管理器中看到,前两个隶属于真实系统,是你的真实电脑中的设备,后一个隶属于虚拟 系统,是虚拟电脑中的设备,不要搞混淆。
—————           ————–          ————–
|  网络A      |           |  路由器    |          |  网络B     |
|             |           |            |          |            |
|         □–|———–|–□    □–|———-|–□        |
|         1   |           |  2     3   |          |  4         |
—————           ————–          ————–
—————-           ————————-      ————–
|   虚拟系统   |           |  主系统(路由器)       |      | 真实网络   |
|              |           |                       |      |            |
|          □–|———–|–□     □<—>□—–|——|–□        |
|AMD PCNET卡   |           |vmnet1 vmnet8 真实网卡 |      |  4         |
—————-           ————————-      ————–
图 二
让我们来和上面的网络和路由器的关系做一个比对。
可以看到要想虚拟系统和主系统通信必须使AMD PCNET 网卡和vmnet1组成一个网络。
而vmnet1本来就在主系统中,系统可以直接访问,所以主系统又充当了路由器的功能,只要有这两个虚拟设备主系统和虚拟系统就可以通讯。
关键在于三点:
1.确定网卡AMD PCNET和vmnet1的网络号相同。
2.在虚拟系统里设置网络属性,把网关地址设为vmnet1的地址。
3.开启主系统的路由功能,使它成为一台路由器。
事 实上,如果你只需要虚拟系统和主系统通信,而不需要和主系统所在的真实网络上的其他主机通信的话只要满足第一点就可以了。因为满足第一点,主系统和虚拟系 统就在同一网络中了,不需要路由器便可通信。但是大多数情况下我们需要虚拟系统和主系统所在的真实网络通信,这就需要满足其他两点了。
四、虚拟机的网络设置(实施篇)
1,  我们先来让虚拟系统和主系统联系上。
在VMware安装的时候安装程序会自动给vmnet1分配一个IP地址,下面是笔者电脑上例子:
vmnet1    Link encap:Ethernet  HWaddr 00:50:56:C0:00:01
inet addr:192.168.221.1  Bcast:192.168.221.255  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:191 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
在 第二行可以看到安装程序给vmnet1分配的IP地址为192.168.221.1(注意每次安装VMware IP地址是随机分配的,实际的情况与这里的例子会不同)。即虚拟网卡vmnet1属于网络192.168.221。因此,我们需要启动虚拟系统,设置网络 属性,把虚拟系统的网卡”AMD  PCNET Family PCI Ethernet Adapter”的IP地址设置为192.168.221.x (x为除1以外2~254之间的任意数字笔者把它设置为2),把网关设置为vmnet1的地址:192.168.221.1(如果不和外界真实网络通信的 话网关可以不设)
windows 2000和XP 设置后立即生效,win98需要重新启动,linux需要重新启动网络服务:
#service network restart
在主系统上ping一下虚拟系统:
#ping -c 3 192.168.221.2
PING 192.168.221.2 (192.168.221.2) from 192.168.221.1 : 56(84) bytes of data.
64 bytes from 192.168.221.2: icmp_seq=1 ttl=128 time=6.91 ms
64 bytes from 192.168.221.2: icmp_seq=2 ttl=128 time=0.425 ms
64 bytes from 192.168.221.2: icmp_seq=3 ttl=128 time=0.527 ms
— 192.168.221.2 ping statistics —
3 packets transmitted, 3 received, 0% loss, time 2001ms
rtt min/avg/max/mdev = 0.425/2.623/6.917/3.036 ms
yeah!通了!
再在虚拟系统上ping主系统:
C:>ping 192.168.221.1
Pinging 192.168.221.1 with 32 bytes of data:
Reply from 192.168.221.1: bytes=32 time<10ms TTL=64
Reply from 192.168.221.1: bytes=32 time<10ms TTL=64
Reply from 192.168.221.1: bytes=32 time<10ms TTL=64
Reply from 192.168.221.1: bytes=32 time<10ms TTL=64
Ping statistics for 192.168.221.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum =  0ms, Average =  0ms
yeah!又通了!主系统和虚拟系统顺利联系上啦!
2, 让虚拟系统和主系统所在的真实网络通信
首 先在你的电脑上需要有一块与真实网络相连真实的网卡(如图二所示)。vmnet8就在与真实网络通讯的时候起作用了,vmnet8会和真实网卡对应起来, 虚拟系统要发送数据包到真实网络中的时候,真实系统是一台路由器,首先数据发到虚拟网卡vmnet1,然后经过路由器(这里就是主系统linux)发到 vmnet8,由于vmnet8和真实网卡是对应起来的,这一机制是有vmware完成的,所以发到vmnet8上的网卡就等于传送到了真实网卡上,然后 数据包再通过真实网卡发送到真实网络,整个过程请看图二。如果你的系统上有两块以上的真实网卡,在安装的时候安装程序会询问把虚拟网卡对应到哪个真实网卡 上。可以根据实际情况选择。
把vmnet8的IP地址设置为和真实网卡在同一网络的地址,假设真实网络的网络号为192.168.0,真实网卡的IP地址为192.168.0.1则可设置vmnet8的IP地址为192.168.0.2
在linux中方法如下:
#ifconfig vmnet8 down
#ifconfig vmnet8 192.168.0.2 up
回顾一下上面讲的三个条件:
————————————————————–
关键在于三点:
1.确定网卡AMD PCNET和vmnet1的网络号相同。
2.在虚拟系统里设置网络属性,把网关地址设为vmnet1的地址。
3.开启主系统的路由功能,使它成为一台路由器。
————————————————————–
前两点我们已经在第一部分中做好了,现在只要开启了linux的路由功能虚拟系统就可以和外界通讯了。
linux是一个天生的网络操作系统,他在网络方面的强大功能使得它在网络服务器领域有广泛的应用。用linux来做路由器甚至不需要额外的软件,linux的内核直接支持静态路由的功能。我们要做的只是把路由功能打开就可以了。
可以先看看路由表:
#route
确定所有网卡的IP地址或网络地址都在Destination一栏里,如下图:
——————————————————————————-
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
192.168.0.0     *               255.255.255.0   U     0      0        0 vmnet8
192.168.221.0   *               255.255.255.0   U     0      0        0 vmnet1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         www.gucuiwen.co 0.0.0.0         UG    0      0        0 eth0
——————————————————————————-
默认情况下启动网络设备的时候系统会把该设备的IP地址添加到路由表中,如果没有的话可以重新启动一下网络服务:
#service network restart
再来开启路由功能:
# echo 1 > /proc/sys/net/ipv4/ip_forward
至此,linux的路由功能已经打开,你的linux系统已经成了一台路由器,连接着虚拟的网络和真实网络。虚拟网络和真实网络间就可以通信了。出于安全考虑,如果有必要的话还需要用iptables命令来设置一下路由规则。

]]>
http://ijz.me/?feed=rss2&p=76 0