虚拟网络环境及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的基本概述,后面将会继续深入~

相关推荐
馨羽的玩具2 小时前
麒麟虚拟机原盘扩容后没看到
linux·麒麟
♛识尔如昼♛2 小时前
计算机组成原理(23) 第五章 - 总线的操作和定时
网络·总线·总线传输和定时
XiaoHu02072 小时前
Linux中的常见指令汇总以及权限认识
linux·运维·服务器
天若有情6732 小时前
我发明的PROTO_V4协议:一个让数据“穿上迷彩服”的发明(整数传输协议)
网络·c++·后端·安全·密码学·密码·数据
加成BUFF2 小时前
C++入门详解2:数据类型、运算符与表达式
c语言·c++·计算机
春日见2 小时前
虚拟机上由于网络问题无法正常git clone
linux·服务器·网络·人工智能·git·ubuntu·debug
一往无前fgs2 小时前
【国产信创】openEuler 22.03 安全加固:SSH 端口修改完整指南(含防火墙/SELinux 配置)
网络·安全·ssh·openeuler
Trouvaille ~3 小时前
【Linux】文件描述符与重定向原理:揭开Linux文件操作的神秘面纱
linux·运维·服务器·开发语言·内核·进程·重定向
努力学算法的蒟蒻3 小时前
centos7安装yum源时出现Cannot find a valid baseurl for repo: base问题
linux·服务器·centos