虚拟局域网VLAN(VirtualLocalAreaNetwork)
虚拟局域⽹VLAN(VirtualLocalAreaNetwork)
VLAN(Virtual Local Area Network)的中⽂名为"虚拟局域⽹"。
虚拟局域⽹(VLAN)是⼀组逻辑上的设备和⽤户,这些设备和⽤户并不受物理位置的限制,可以根据功能、部门及应⽤等因素将它们组织起来,相互之间的通信就好像它们在同⼀个⽹段中⼀样,由此得名虚拟局域⽹。VLAN是⼀种⽐较新的技术,⼯作在OSI参考模型的第2层和第3层,⼀个VLAN就是⼀个⼴播域,VLAN之间的通信是通过第3层的路由器来完成的。与传统的局域⽹技术相⽐较,VLAN技术更加灵活,它具有以下优点:⽹络设备的移动、添加和修改的管理开销减少;可以控制⼴播活动;可提⾼⽹络的安全性。
在计算机⽹络中,⼀个⼆层⽹络可以被划分为多个不同的⼴播域,⼀个⼴播域对应了⼀个特定的⽤户组,默认情况下这些不同的⼴播域是相互隔离的。不同的⼴播域之间想要通信,需要通过⼀个或多个路由器。这样的⼀个⼴播域就称为VLAN。
这个问题其实已经困扰很多年了。
刚毕业那会,都去⽹吧上⽹,不会考虑那么多。
⼏年之后,申请了ADSL宽带,上⽹变得⼗分容易,同时⾃⼰电脑还具备了公⽹IP地址(当然是动态IP),
再下载⼀个花⽣壳客户端,于是有了⼀个固定域名,有了这个固定域名,做什么都⽅便了,
可以随意的在公司⾥远程⾃⼰家的电脑,做任何需要做的事情。
有了这些还不满⾜,很想在家⾥远程公司的电脑,当时以为很简单,可仔细考虑之后,⼀点也不简单。
⾸先公司⽹管肯定不愿意员⼯在外⾯随意操控公司电脑,于是肯定是不愿意从⽹关上做端⼝映射。
中国的⽹络,很⼤⼀部分电脑都是做NAT转发的,尤其是公司电脑,他们不具备外⽹地址,不能从internet⽹直接访问。
有些⽹络更离谱,是通过多层NAT转发。
⼀直都想着解决这个问题,想着如何在家⾥控制公司的电脑,早期,从应⽤层软件解决,
做个服务程序,⼀个运⾏在家⾥的电脑,⼀个运⾏在公司电脑上,公司电脑通过TCP持续连接到家⾥电脑,
家⾥电脑通过这个TCP连接发送命令给公司电脑,从⽽达到控制公司电脑的⽬的,
但是这种办法是有限的,并不具备完全控制的⽬的。
电脑如何建立局域网
当时多想有种办法,能让公司电脑和家⾥电脑互相访问,就像在⼀个⽹络⾥⼀样,
(这种办法其实早就有产品,类似VPN⼀样的东西,但是我只是个⼈需求,况且我真的是想⾃⼰解决这个问题)
当时局限于⾃⼰的知识⽔平,⽆法从驱动层⾯解决这个问题,只好搁置。
直到再⼏年后的现在,接触了windows驱动,尤其是NDIS驱动,知道该怎么解决这么⼀个问题,
并真正的建⽴起了属于⾃⼰的虚拟局域⽹络。
说到原理,其实并不是像想象的那么复杂。
要组建这么⼀个虚拟局域⽹,需要⼀下两个条件:
⼀,⼀个具有公⽹IP的机器和运⾏在此机器上的⼀个服务程序,这个程序类似HUB(集线器)⼀样,转发虚拟以太⽹数据包。
⼆,需要组建虚拟局域⽹的每台机器都需要安装⼀个虚拟⽹卡驱动程序和⼀个客户端程序。
NDIS驱动分为三层,
⼀是NIC驱动,⼜叫微端⼝驱动,直接跟物理⽹卡打交道,
⼆是协议驱动,⽤来处理类似TCP/IP等协议包,
三是中间层驱动,介于协议驱动和微端⼝驱动之间。⼤家熟悉的防⽕墙就属于中间驱动,它可以任意串改阻⽌数据包。
⽽这个⽤于组建虚拟局域⽹的⽹卡驱动,是属于底层的微端⼝驱动,本来物理⽹卡的微端⼝驱动是在
链路层上得到上层驱动的原始以太⽹数据包,并传输到物理⽹卡上去;从物理⽹卡上得到原始以太⽹数据包,并传递给上层驱动。
⽽虚拟⽹卡驱动注册⼀个功能设备,应⽤层程序⽤CreateFile打开这个设备,
调⽤Win32函数ReadFile/WriteFile,从驱动⾥读出以太⽹数据包和写⼊以太⽹数据包,
也就是本来把传输到物理⽹卡的⼯作,交给了这个注册的功能设备。
客户端应⽤程序打开虚拟⽹卡驱动注册的功能设备,从⾥边读取传输到这块虚拟⽹卡的原始以太⽹数据包,
通过真实的TCP/UDP套接字传输到公⽹机器上的⼀个服务程序上,服务程序分析这个数据包,
并向正确的也在这个虚拟局域⽹的机器的客户端程序转发这个数据包,
客户端程序接收到属于发往⾃⼰的别的机器的原始以太⽹数据包,通过WriteFile写⼊到虚拟⽹卡驱动中,
从⽽完成数据交互。
为了减少服务器端压⼒,可以利⽤P2P等技术让两个需要通讯的机器直接通讯,但我这属于⼩⽹络,没必要搞那么复杂。
这样⼀个虚拟的局域⽹就这么组建起来了。
简单的说就是把属于真实的物理⽹络剥离出来,建⽴在internet公⽹的逻辑链路上。
这⾥的技术难点要属这个虚拟⽹卡驱动的开发,不过熟悉了之后,其实也不太难。
顺便⼀提的是,在多年前,搞得很⽕的浩⽅平台,能让⼤家在不同的⽹络⾥玩CS等局域⽹游戏,
记得上⼤学的时候,有很多⼈在玩,当时觉得很神奇,现在想想其实也不算什么,实现的原理都差不多
的。
现在虚拟局域⽹是建⽴起来了,但是要怎么跟别的真实⽹络通讯呢,举个例⼦:
公司⾥有多台电脑,都是其他同事的,当然其中⼀台电脑肯定是⾃⼰的。
这些电脑都在同⼀个真实的局域⽹⾥,假设我家的电脑是A,公司⾥我的电脑是B,
并且都安装上了虚拟⽹卡,已经是组建好了的⼀个虚拟局域⽹,这个虚拟⽹只有A,B两台机器,
假设家⾥的A机器要访问其他同事的机器怎么办呢?⼀个办法是让其他同事也装虚拟⽹卡,加⼊到这个虚拟⽹⾥。
但是多种原因,⼈家不⼀定愿意安装或者怕⾃⼰家的电脑成了公⽤机器给⼈随意访问。
其实⼀个办法是把公司的B机器作为NAT⽹关,这个虚拟⽹就在这个NAT之后,NAT软件⽹上可下载的很多,
也可以⽤windows⾃带的“Internet共享”功能,其实就是⼀个简单的NAT。
直到写这篇⽂章,我才调通了这个NAT功能,
⽅法如下:
⾸先在公司机器B上,设置好“Internet共享”,物理⽹卡右击属性-》⾼级-》Internet共享,
在这⾥的”家庭⽹络连接“,选择⾃⼰开发的虚拟⽹卡,
这样NAT算是设置好了,
接着要在家⾥的电脑A上加⼀条路由,这点很重要,否则⽆法访问。
⽐如公司真实局域⽹是 192.168.100.X,虚拟局域⽹是 192.168.0.X, B机器的虚拟IP地址是192.168.0.1
在A机器上加:
router -p add 192.168.100.0 mask 255.255.255.0 192.168.0.1
意思是发往192.168.100.X⽹段的数据包,都朝⽹关 192.168.0.1(也就是公司的B机器)发送,
这样家⾥的机器就能正确的路由到公司的⽹络上。
如果万⼀要想家⾥的电脑和公司的所有同事的电脑都在⼀个⽹段怎么办呢?⽤桥接⽅式,
熟练Vmware的⼈⼀定很熟悉它的⽹络连接中的桥接⽅式,这⾥⽤到的技术跟Vmware的桥接技术差不多。
原理如下
需要开发⼀个NDIS协议驱动,在协议驱动⾥分析每个数据包,把发往虚拟局域⽹的数据包提取出来(这个通过IP地址来区分),
通过⼀个功能设备读取这些数据,发往客户端应⽤程序,应⽤程序发给公⽹的服务器程序,
客户端应⽤程序从公⽹机器获得数据包,写给协议驱动,协议驱动改写源MAC地址为真实的物理⽹卡地址,并发送出去。这种叫MAC地址欺骗,真实局域⽹的其他机器⼀直以为都在同⼀台真实机器通讯,实际是和很多虚拟的机器通讯,vmware即采⽤这种类似的技术实现桥接功能,让虚拟机IP地址跟真实⽹络融合在⼀起。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。