VBox虚拟机与主机(宿主)通讯原理以及socat(套接字猫)简单介绍
前言
尝试虚拟机使用socat建立服务器端接口转发时,发现对虚拟机接入网络原理不是非常了解,于是乎上网查找资料想搞明白是怎么回事,于是乎有了这篇总结博文。socat可以在服务器端口间建立全双工通信通道,可以用于端口数据转发,据说是Linux/Unix系统三大神器之一。
虚拟机虚拟网卡连接模式
1.桥接模式
直接将虚拟网卡桥接在物理网卡上,虚拟机与主机地位对等,相当于局域网新增加了一台机器,虚拟机分配的IP是局域网真实的IP地址,主机与虚拟机以及局域网其它主机与虚拟机可以互相访问

2.仅主机(host-only)适配模式
主机能访问虚拟机,虚拟不能访问主机(宿主)以及局域网其它主机,局域网其它主机不能访问虚拟机,虚拟机跟局域网隔离

3.NAT(网络地址转换)模式
通过虚拟NAT设备实现虚拟机访问内外部网络,局域网主机不能访问虚拟机,宿主也不例外,如果需要访问虚拟机服务,虚拟网卡需要设置端口转发,虚拟机之间不能互相访问

OSI开放网路七层模型
物理层(传输介质)->数据链路层(数据通道)->网路层(路由选择)->传输层(数据发送)->会话层->表示层->应用层


TCP/IP四层模型
网络接入层->网际互联层->传输层->应用层
TCP/IP四层模型和OSI七层模型
互联网使用的是TCP/IP四层模型连接各个网络
对应关系如下图:

虚拟网卡
用软件模拟真实网卡的功能,又称虚拟网络适配器,可以实现虚拟集线器,VPN功能等
虚拟网卡实现原理
TUN/TAP驱动程序是虚拟网卡驱动的一个实现,是开源的,以它作为例子讲解实现原理。
虚拟网卡发送数据不通过真实的物理网卡,而是通过发送给用户态的应用程序,由它再通过真实的网卡发送数据。用户态和核心态程序通过字符设备文件交换数据。


socat简单介绍
socat是一种中继器,可以为2个终端间建立全双工通道数据转发功能,功能非常强大,是Linux/Unix系统三大神器之一。
socat用法
1.输入流与服务器建立通信通道,建立好之后,可以发送数据
socat - TCP4:www.domain.org:80
2.服务器A端口5000请求统一转发给B服务器端口6000处理
socat -d -d -lf /var/log/socat.log TCP4-LISTEN:5000,reuseaddr,fork TCP4:b server ip/domain:6000
。。。。。。还有很多其它的用法 可以参考下面列出的官方文档链接
网路设备
1.什么是交换机
英文称为"switch",一种用于电(光)信号转发的网络设备,可以为接入交换机的任意2个网络节点提供专有的电信号通路,它工作在OSI网络模型的数据链路层。
2.什么是集线器
英文称为"hub",意为“中心”的意思。集线器是指将多条以太网双绞线或者光纤集合连接在同一段物理介质下的设备。集线器工作在OSI网络模型的物理层。只能通过广播的形式发包。
3.什么是路由器
路由器(Router),又称网关(Gateway)设备,是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。工作在OSI网络模型的网络层。
问题
1.桥接模式虚拟机不能ping通主机
查阅资料,发现是因为WIN7防火墙限制的原因,找到防火墙高级设置-》入站规则-》文件和打印机共享(回显请求-ICMPv4-in 专用公用网络)-》开启规则
2.NAT模式,同一主机下虚拟机之间不能互相访问
查了资料,都使用NAT模式的虚拟机不能互相访问
3.socat转发到其它服务器会失败
原因可能是接收的服务器有安全限制
4.socat编译安装提示错误
tar: socat-1.7.3.0/configure.ac: Cannot create symlink to `configure.in': Read-only file system
tar: Error exit delayed from previous errors
查了资料,原因是VBOX默认不支持共享目录symlink,下面是搜索到了的链接
https://github.com/mitchellh/vagrant/issues/713
http://superuser.com/questions/446362/why-cant-i-create-soft-link-on-vboxsf-file-system
后记
利用业余时间,工作空隙,边查资料边实践边总结,断续完成了本篇文章,基本上达到了自己的目的。写这篇文章时,我想起了很久之前博友写的一句话:你可以知道你不知道的,但是你不可以对你知道的模棱两可一支半解。这话说的很在理,人还是需要折腾一些好。
参考资料
[1]桥接模式WIN7下虚拟机不能ping通主机
http://blog.csdn.net/mmyzlinyingjie/article/details/21468365
[2]VBox NAT网络解释
http://huzhangsheng.blog.163.com/blog/static/34787784200802801435931/
[3]VBox虚拟网卡连接方式介绍
http://blog.sina.com.cn/s/blog_7de9d5d80100t2uw.html
[4]虚拟机三种网络连接模式(bridged、NAT、host-only)
http://www.360doc.com/content/11/0507/15/3508740_115023160.shtml
[5]VMware Workstation下VMnet1等虚拟网卡与主机网卡之间的关系 文中连接模式图片来源于此
http://www.cnblogs.com/lzhdim/archive/2011/08/03/2125717.html
[6]VirtualBox的四种网络连接方式
http://www.cnblogs.com/adforce/p/3363373.html
[7]开放系统互连参考模型
http://baike.baidu.com/view/486949.htm?fromtitle=OSI%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B&fromid=9763441&type=syn
[8]TCP/IP参考模型
http://baike.baidu.com/view/1792633.htm
[9]TCP/IP四层模型和OSI七层模型 文中2种模型比较图片来源于此
http://book.51cto.com/art/200906/127291.htm
[10]虚拟网卡
http://baike.baidu.com/view/545.htm
[11]虚拟网卡和OpenVPN
http://www.cnblogs.com/kernelfans/archive/2009/06/06/1497805.html
[12]TUN/TAP区别
http://www.cnblogs.com/adodo1/p/4327553.html
[13]虚拟网卡 TUN/TAP 驱动程序设计原理 虚拟网卡实现原理图1来自这里
http://www.cnblogs.com/happyhotty/articles/1933051.html
[14]网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP 虚拟网卡实现原理图2来自这里
http://www.cnblogs.com/yudar/p/4630958.html
[15]百度百科-交换机
http://baike.baidu.com/view/1077.htm
[16]互动百科-交换机
http://www.baike.com/wiki/%E4%BA%A4%E6%8D%A2%E6%9C%BA
[17]百度百科-集线器
http://baike.baidu.com/view/7770.htm
[18]百度百科-路由器
http://baike.baidu.com/view/1360.htm
[19]使用socat进行端口转发
http://www.cnblogs.com/lexus/archive/2012/12/02/2798796.html
[20]socat官方文档-readme
http://www.dest-unreach.org/socat/doc/README
[21]socat官方文档-详细说明
http://www.dest-unreach.org/socat/doc/socat.html
[21]socat主页
http://www.dest-unreach.org/socat/
[22]socat : Some useful commands
http://www.cnblogs.com/shangdawei/p/3843039.html
VBox虚拟机与主机(宿主)通讯原理以及socat(套接字猫)简单介绍的更多相关文章
- C#使用SocketAsyncEventArgs操作套接字的简单异步通讯
		
SocketAsyncEventArgs是一个套接字操作的类,主要作用是实现socket消息的异步接收和发送,跟Socket的BeginSend和 BeginReceive方法异步处理没有多大区别,它 ...
 - Windows进程间通讯(IPC)----套接字
		
Windows套接字 Windows套接字即socket,通过socket可以实现在不同的进程间通信,甚至这两个进程可以不在同一个计算机中. Winsock使用步骤 服务端 socket初始化 创建套 ...
 - Dubbo原理解析-Dubbo内核实现之SPI简单介绍
		
转自:https://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 Dubbo 采用微内核+插件体系,使得设计优雅,扩展性强.那所谓 ...
 - 1. Dubbo原理解析-Dubbo内核实现之SPI简单介绍 (转)
		
转载自 斩秋的专栏 http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 Dubbo采用 微内核 + 插件体系,使得设计优 ...
 - 【DUBBO】Dubbo原理解析-Dubbo内核实现之SPI简单介绍
		
Dubbo采用微内核+ 插件体系,使得设计优雅,扩展性强.那所谓的微内核+插件体系是如何实现的呢!大家是否熟悉spi(service providerinterface)机制,即我们定义了服务接口标准 ...
 - 【转载】Socket通讯原理以及TCP、IP三次握手机制分析
		
要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...
 - 解决VMware虚拟机报错“无法连接MKS:套接字连接尝试次数太多,正在放弃”
		
1.错误描述 在VMware中打开虚拟机时报错: "无法连接MKS:套接字连接尝试次数太多,正在放弃" 物理机操作系统: Windows 7 虚拟机操作系统: Kali Linux ...
 - day37协程与线程套接字通讯
		
协程与线程套接字通讯基于多线程实现套接字服务端支持并发,服务端 from socket import * from threading import Thread def comunicate(con ...
 - VirtualBox实现宿主机和虚拟机之间网络的通讯
		
摘要:实现宿主机和虚拟机之间网络的通讯 环境: 宿主机操作系统 WindowsXP 虚拟机软件 VirtualBox 虚拟机操作系统 ...
 
随机推荐
- nginx + php-fpm 运行原理
			
一.关于nginx 1.1 简单认知 我们都知道nginx 是web服务器. 也知道 用户访问时通过ip和端口访问 nginx. 那么nginx 是如何 通过php 获取数据并返回数据的呢? 1.2 ...
 - iis 服务器而配置php运行环境
			
第一步 下载php 下载压缩包就可以了 第二步 解压缩php到某个目录,比如D:\php php目录里面有两个php.ini,一个是php.ini-dist,比较适合开发用:一个是php.ini-re ...
 - Educational Codeforces Round 42 (Rated for Div. 2)
			
A. Equator(模拟) 找权值的中位数,直接模拟.. 代码写的好丑qwq.. #include<cstdio> #include<cstring> #include< ...
 - [Windows Server 2012] 服务器安全加固
			
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:服务器安全加固 ...
 - 3星|《刷新》:微软第三任CEO上任三年后的回顾
			
刷新:重新发现商业与未来 作者是微软第三任CEO,2014年2月上任.本书英文版出版于2017年9月,全书内容大致截至于2017年年初,算是作者上任三年后的回顾. 书中作者讲了不少自己的个人经历.作者 ...
 - 详解HashMap数据结构实现
			
HashMap的设计是由数组加链表的符合数据结构,在这里用自己的语言以及结合源码去总结一下,如果有不对的地方希望评论指正,先拱手谢谢. HashMap是日常中非常常用的一种数据结构,我们要想深入了解学 ...
 - vue里的tab控件
			
如下图,v-model绑定的值,这个值在js里一旦改变,视图就会切换到相应的tab页,这意味着一定要先给tab页内容数据赋值,再改变这个tabsIndex的值 如下图,先赋值data列表数据,在更改t ...
 - cesium的学习
			
一.学习资料:http://cesiumjs.org/tutorials.html,看完6个教程后对图层加载.控件控制开关.地形数据叠加.模型添加.相机控制.图形绘制有一点了解.这也是cesium的主 ...
 - PHP连接mysql8.0出错“SQLSTATE[HY000] [2054] The server requested authentication method unkno…
			
今天安装安装一个叫得推校园O2O系统的使劲都说连接不上服务器. 下面是安装说明,我直接进行3步骤,导入数据库配置文件,结果就显示题目报错的内容 安装说明: 直接输入程序目录即可 http://loca ...
 - python开发 面试题
			
一.简述列表与元组的区别 答: 元组tuple与列表List相同点 元组tuple与列表List都是序列类型的容器对象,可以存放任何类型的数据.支持切片.迭代等操作. 元组tuple与列表List区别 ...