虚拟网络环境及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)链接状态

      linux 复制代码
      netstat -tuan	// t-所有的tcp;u-所有的udp;a-all;n-以数字形式打印出来

      每行都表示一条链接:协议 + 接收缓存 + 发送缓存 + 本地地址 + 远程地址 + 状态

      只需要找本地地址中端口号为22的,只要有这行就表示服务已经安装好了

    • 如何安装ssh服务

      Ubuntu:敲sshd的命令,自动提示你用什么命令来安装这个服务:sudo apt install openssh-server

      Centos:搜索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的基本概述,后面将会继续深入~

相关推荐
草莓熊Lotso4 分钟前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·linux·运维·服务器·数据库·c++·mysql
盟接之桥9 分钟前
盟接之桥®制造业EDI软件,打通全球供应链“最后一公里”,赋能中国制造连接世界
网络·安全·低代码·重构·汽车·制造
ShineWinsu10 分钟前
对于Linux:文件操作以及文件IO的解析
linux·c++·面试·笔试·io·shell·文件操作
-SGlow-10 分钟前
Linux相关概念和易错知识点(52)(基于System V的信号量和消息队列)
linux·运维·服务器
江畔何人初11 分钟前
TCP的三次握手与四次挥手
linux·服务器·网络·网络协议·tcp/ip
Trouvaille ~25 分钟前
【MySQL篇】数据库操作:从创建到管理
linux·数据库·mysql·oracle·xshell·ddl
酸钠鈀28 分钟前
AI WB2 SDK Ubuntu 环境搭建
linux·运维·ubuntu
志栋智能30 分钟前
超自动化巡检:实现运维“事前预防”的关键拼图
大数据·运维·网络·人工智能·机器学习·自动化
Robot_Nav32 分钟前
双系统Linux死机解决方法
linux·运维·服务器
七夜zippoe36 分钟前
OpenClaw 技能开发实战:从零到一
运维·服务器·网络·openclaw·技能开发