虚拟网络环境及socket概述
文章目录
- 虚拟网络环境及socket概述
-
- 一、前言
- 二、VMware虚拟机网络环境概述
-
- [2.1 概述](#2.1 概述)
- [2.2 注意事项](#2.2 注意事项)
- [2.3 几种组网方式的区别](#2.3 几种组网方式的区别)
- [2.4 Vmware和Windows的数据互通](#2.4 Vmware和Windows的数据互通)
- 三、Socket简介
-
- [3.1 什么是socket](#3.1 什么是socket)
- 四、socket下的常用编程接口
- 五、小结
一、前言
今天,将带来新的内容------虚拟网络环境的介绍,当进入虚拟的网络环境中,先前学的数据传输,你还认识它吗?
二、VMware虚拟机网络环境概述
2.1 概述
虚拟机是一种软件技术 。通过在宿主机 里安装一个服务,利用这个服务来共享宿主机的资源 ,通过服务 ,虚拟化成多个独立的主机进行管理。
完成虚拟机,首先保证服务是否安装。
这里的宿主机就是Windows
2.2 注意事项
-
宿主机找到这个服务
搜索中找到服务->找到VM打头的服务,都要打开(大约4-5个)->通过双击可以查看服务的详细信息


服务就是一个进程/程序 ,选了这个服务,就相当于接了一根线 。如图,里面有显示文件地址,说明服务就这个文件里 ,因此说服务是一个程序。在网络中,有两个服务是非常重要的,DHCP服务 和NAT服务。
安装虚拟机时,如果出现了没有IP地址或者连不上网等情况,可以先检查一下这些服务有没有打开,有时候可能会被杀毒软件给禁用,重新换成自动,再重启以下可能就好了。
2.3 几种组网方式的区别

-
NAT方式
宿主机里含有一个NAT服务
NAT是网络地址转换器 ,可以模拟成路由器(含有LAN口和WAN口)
NAT有两个IP,一个接收虚拟机内部的私有网,一个将私有网隐藏起来,转成别的IP交给WAN口,WAN口具有路由能力

- 宿主机被安装了能够连接到NAT路由器的虚拟网卡(vmnet8),宿主机就是通过这个网卡和虚拟机进行通信的
- 虚拟机如果要访问外网,需要配置网关 (只要不在一个网段的,就往网关丢),网关的地址必须是NAT路由器的LAN口IP(不能是windows的vmnet8)
- vmnet8这个网卡,是宿主机专门用来访问虚拟机用的,一定不要配置网关和DNS,这个网卡不是为宿主机提供网络服务的
NAT服务就像是一个假的路由器(靠软件实现的),外网能不能上就看宿主机能不能上网。
-
host-only
宿主机里安装了虚拟的交换机,虚拟机为宿主机提供了vmnet1的网卡,来连接到交换机上。一旦虚拟机网卡连接到了host-only,就意味连接到了交换机,只能和vmnet1进行数据交互。因为没有路由能力(交换机只能识别MAC地址,不能识别IP地址),虚拟机就无法访问外网。
一个网卡,意味着一个小网络,有单独的IP地址和网段。
host-only使用的很少
-
桥接
虚拟机利用宿主机利用实际的网卡,充当虚拟机的物理层,虚拟机利用自己的独立MAC地址,使用宿主机的物理层进行数据通信
应用:寝室里其他设备也可以直接访问到虚拟机;嵌入式开发板和虚拟机相连
一个网卡可以设置很多很多IP地址
vmnet0指桥接,可以桥接到很多地方
2.4 Vmware和Windows的数据互通
提出问题:vmtools安装不了
介绍 :vmtools就是VMware这个虚拟机软件提供的一个插件,只适合同一台机器上宿主机和虚拟机的访问,实验室的多台主机和服务器相连,这个插件就无能为力
建议:使用网络服务进行数据交换
到底是什么服务呢?
C/S模型
介绍:client和server模型(客户端和服务器):就像是浏览器和百度服务器之间的关系
浏览器主动连接百度服务器,百度服务器才会回它消息
使用:利用ssh的远程登陆协议:虚拟机里安装ssh的服务器进程;宿主机安装ssh的客户端进程
-
虚拟机里安装ssh的服务器进程
-
如何判断虚拟机里有没有这个服务,若没有就安装
netstat -tuan------查看当前机器的服务(socket)链接状态linuxnetstat -tuan // t-所有的tcp;u-所有的udp;a-all;n-以数字形式打印出来每行都表示一条链接:协议 + 接收缓存 + 发送缓存 + 本地地址 + 远程地址 + 状态
只需要找本地地址中端口号为22的,只要有这行就表示服务已经安装好了
-
如何安装ssh服务
Ubuntu:敲sshd的命令,自动提示你用什么命令来安装这个服务:
sudo apt install openssh-serverCentos:搜索sshd的服务是什么软件,然后利用
yum install xxxx
-
-
宿主机安装ssh的客户端进程
Mobaxterm------免费的开源软件(也可以使用xshell等)
苹果的自带了ssh的客户端服务。
在这里我以Mobaxterm为例进行讲解~
官网安装->使用
整个软件的核心就是session




在windows上编写程序,传输到传输到Linux上。
Windows上编写了hello world的程序------不要忘记保存



关于Linux的指令这里就不再详述了,只做演示而已
三、Socket简介
3.1 什么是socket
应用层 用户态
/- - - - - - - - - - - - -/ syscall(系统调用,实现从用户态向内核态的转换)需要名词(对象)
传输层
网路层 内核态(这三层)
物理接口层
传输层、网络层和物理接口层就是将用户千方百计构造出来的数据无差错的、有序的发送给对方(可靠传输)
应用层:关注如何处理数据包
如何在用户态访问内核态?
用户态:需要名词(文件描述符)
内核态(这三层):维护了很多条链接,链接可以理解为非常复杂的结构体,用户态不能直接访问。每条链接如何抽象给用户态呢?这就有了文件描述符。
文件描述符 :就是一个非负整数,如:0、1、2、3等。代表硬件设备,一个进程中管理器的数字号

用户态利用文件描述符和系统调用的动词实现数据的交互。
我们改一下程序:

重新拖到Linux上去运行

奇怪的事情发生了,为什么会这样呢?
printf是一个标准输出的设备,write将标准输出的设备抽象成数字1,向1写那个值,代表着1就是那个设备。设备都有驱动,Linux的操作系统内有一张表01234...,对应内核的驱动。
如:
必须获得这个内核抽象链接的对应的文件描述符,socket可以认为是一张信封,也是一个大而全的通用接口
历史演变
1969年:Linux已经出现了
1973年:有一个分支BSD,伯克利大学在原有的Linux的基础上,提出了一个技术------socket技术(注意:此时网络还没出现)
1985年:网络普及(tcp/ip逐渐得到认可)
为了能像接口一样接入网络,socket本意就是插座,充当一个中转站,实现机器和网络之间的连接
socket正式支持TCP/IP协议,能够上网
四、socket下的常用编程接口
鉴于socket是一个大而全的接口,我们可以使用man 2 socket,选一个合适的参数填进去,从而使用。
socket:拿信封(拿一个进程里面和内核相关的设备行为)
bind:绑定local address
举个例子
完整代码:
c
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netinet/ip.h>
#include<sys/types.h>
#include<arpa/inet.h>
int main(int argc, char *argv[])
{
struct sockaddr_in self; // 结构体里包含了IP和端口信息
int ret;
int udp_socket = socket(AF_INET, SOCK_DGRAM, 0); // 获取一张信封,传输层采用了UDP技术
// 将这个信封绑定系统的一个端口号,其他客户端就能通过这个端口号向你发出信息
// 服务器就可以通过这个端口号来获取信息了
memset(&self, 0, sizeof(self));
self.sin_family = AF_INET;
self.sin_port = htons(7788);
ret = bind(udp_socket, (const struct sockaddr*)&self, sizeof(self));
if(ret == -1)
{
perror("bind");
return -1;
}
// 一定要让服务器不能死掉,一般服务器都是循环等待新的客户请求
while(1)
{
getchar();
}
return 0;
}
运行结果展示:


五、小结
通过本篇,相信你也对虚拟网络环境的配置有了大致的了解以及有关socket的基本概述,后面将会继续深入~