ubuntu netplan工具原理(网络配置、ip修改ip、固定ip)(NetworkManager)

在这里插入图片描述

https://netplan.io/

文章目录

    • netplan工作原理
    • netplan -h
      • 翻译
      • 命令释义
        • - `help`:显示netplan的帮助消息。
        • - `apply`:将当前netplan配置应用到运行系统。示例命令:`netplan apply --debug`
        • - `generate`:从`/etc/netplan/*.yaml`生成特定于后端的配置文件。示例命令:`netplan generate`(一般用不到)
          • netplan generate -h
        • - `get`:通过指定嵌套键(如`ethernets.eth0.addresses`或`all`)获取设置。示例命令:`netplan get ethernets.eth0.addresses`(注意:这个命令是从`/etc/netplan`中的yaml文件获取合并的网络信息,而不是当前已生效的网络信息)
          • netplan get -h
          • 示例
        • - `info`:显示可用功能。示例命令:`netplan info`
          • netplan info -h
          • 示例
          • netplan info结果解释
        • - `ip`:从系统中检索IP信息。示例命令:`netplan ip`
          • netplan ip -h
          • 示例
        • - `set`:通过指定点分键值对(如`ethernets.eth0.dhcp4=true`)添加新设置。示例命令:`netplan set ethernets.eth0.dhcp4=true`
          • netplan set -h
          • 示例
            • 设置dhcp4用yes或no,true和false都可以
            • 设置gateway4
            • 使用set命令如果指定.yaml文件没有,会自动生成.yaml文件;如果加上`--root-dir`参数,还能修改/etc/netplan的根目录,比如加上`--root-dir /ky`,就能修改`/ky/etc/netplan`下的.yaml文件(前提是`/ky/etc/netplan`目录存在才行)
            • 修改addresses(这是个数组,要用数组`[]`的方式修改)
            • 另外,netplan set命令貌似还有记忆上次修改文件的功能,就是如果不用`--origin-hint`指定修改文件,则默认修改上次修改的文件
            • 不同的yaml文件可以对同一个网口做设置,用netplan get可获取合并信息,但是可能存在冲突情况,有的会自动解决冲突,有的不会
        • - `rebind`:将给定物理功能的SR-IOV虚拟函数重新绑定到其驱动程序。示例命令:`netplan rebind`(一般用不到)
          • netplan rebind -h
        • - `try`:尝试将新的netplan配置应用到运行系统,自动回滚。示例命令:`netplan try`
          • netplan try -h
          • 示例
          • 无法回滚bug排查
    • 配置示例1:动态ip
    • 配置示例2:固定ip
      • 更改配置文件
      • 执行修改命令
    • 配置示例2:禁用ipv6
    • 其他疑问
      • NetworkManager和netplan有何区别?
      • 为什么/etc/netplan/01-network-manager-all.yaml中有renderer: NetworkManager字样,netplan依赖于networkMananger吗?
      • 那为什么用户不直接用NetworkManager配置网络?
      • 那netplan有提供一些函数接口来修改网络配置吗,还是只能修改yaml配置文件?
      • 使用netplan修改ubuntu20.04的固定ip,需要在配置文件里,填写哪些参数?
    • 注意:即使不执行netplan apply,系统重启后,也会根据/etc/netplan下的.yaml文件内容,来配置网络

netplan工作原理

在这里插入图片描述

Netplan是一个用于配置Linux系统网络的工具。它的工作原理如下:

  1. 配置文件:Netplan使用YAML格式的配置文件来定义网络配置。默认情况下,配置文件位于/etc/netplan/目录下,以.yaml为后缀。可以创建多个配置文件,每个文件对应一个网络配置。

  2. 渲染器:Netplan使用渲染器来将配置文件转换为实际的网络配置。渲染器是根据操作系统的不同而不同的。在Ubuntu 18.04及更高版本中,默认的渲染器是systemd-networkd,也可以选择使用NetworkManager作为渲染器。

  3. 渲染过程:当系统启动时,Netplan会读取配置文件,并使用相应的渲染器将配置应用到系统中。渲染器会根据配置文件中的内容生成相应的网络配置文件,然后重新加载网络服务以应用新的配置。

  4. 更新配置:如果需要更改网络配置,可以编辑配置文件并保存。然后使用netplan apply命令来重新应用配置。Netplan会检测到配置文件的更改,并使用相应的渲染器来更新网络配置。

总结起来,Netplan通过配置文件和渲染器的配合工作,实现了对Linux系统网络配置的管理和应用。它提供了一种简单且统一的方式来配置网络,使得网络配置更加易于管理和维护。

netplan -h

官网介绍:https://netplan.readthedocs.io/en/stable/cli/

CLI命令行接口:

在这里插入图片描述

在这里插入图片描述

root@arnold-virtual-machine:~# netplan -h
usage: /usr/sbin/netplan  [-h] [--debug]  ...Network configuration in YAMLoptional arguments:-h, --help  show this help message and exit--debug     Enable debug messagesAvailable commands:help      Show this help messageapply     Apply current netplan config to running systemgenerate  Generate backend specific configuration files from /etc/netplan/*.yamlget       Get a setting by specifying a nested key like "ethernets.eth0.addresses", or "all"info      Show available featuresip        Retrieve IP information from the systemset       Add new setting by specifying a dotted key=value pair like ethernets.eth0.dhcp4=truerebind    Rebind SR-IOV virtual functions of given physical functions to their drivertry       Try to apply a new netplan config to running system, with automatic rollback
root@arnold-virtual-machine:~# 

翻译

root@arnold-virtual-machine:~# netplan -h
用法:/usr/sbin/netplan  [-h] [--debug]  ...YAML格式的网络配置可选参数:-h, --help  显示帮助信息并退出--debug     启用调试消息可用命令:help      显示此帮助消息apply     将当前netplan配置应用到运行系统generate  从/etc/netplan/*.yaml生成特定于后端的配置文件get       通过指定嵌套键(如"ethernets.eth0.addresses""all")获取设置info      显示可用功能ip        从系统中检索IP信息set       通过指定点分键值对(如ethernets.eth0.dhcp4=true)添加新设置rebind    将给定物理功能的SR-IOV虚拟函数重新绑定到其驱动程序try       尝试将新的netplan配置应用到运行系统,自动回滚
root@arnold-virtual-machine:~# 

命令释义

- help:显示netplan的帮助消息。

- apply:将当前netplan配置应用到运行系统。示例命令:netplan apply --debug

root@arnold-virtual-machine:~# netplan apply -h
usage: /usr/sbin/netplan apply [-h] [--debug] [--sriov-only] [--only-ovs-cleanup] [--state STATE]Apply current netplan config to running systemoptional arguments:-h, --help          show this help message and exit--debug             Enable debug messages--sriov-only        Only apply SR-IOV related configuration and exit--only-ovs-cleanup  Only clean up old OpenVSwitch interfaces and exit--state STATE       Directory containing previous YAML configuration
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan apply -h
用法:/usr/sbin/netplan apply [-h] [--debug] [--sriov-only] [--only-ovs-cleanup] [--state STATE]将当前的netplan配置应用到运行中的系统可选参数:-h, --help          显示帮助信息并退出--debug             启用调试消息--sriov-only        仅应用与SR-IOV相关的配置并退出--only-ovs-cleanup  仅清理旧的OpenVSwitch接口并退出--state STATE       包含先前YAML配置的目录
root@arnold-virtual-machine:~# 

试了半天也不知道这个--state参数干嘛用的,我还以为是能另外指定一个目录下的/etc/netplan目录,结果不行。。。还是都放在/etc/netplan下吧。

看了半天也没看懂这个--state参数的作用。。。

在这里插入图片描述

- generate:从/etc/netplan/*.yaml生成特定于后端的配置文件。示例命令:netplan generate(一般用不到)

这个命令我们一般不用直接运行它。

https://netplan.readthedocs.io/en/stable/netplan-generate/

在这里插入图片描述

netplan generate -h
root@arnold-virtual-machine:~# netplan generate -h
usage: /usr/sbin/netplan generate [-h] [--debug] [--root-dir ROOT_DIR] [--mapping MAPPING]Generate backend specific configuration files from /etc/netplan/*.yamloptional arguments:-h, --help           show this help message and exit--debug              Enable debug messages--root-dir ROOT_DIR  Search for and generate configuration files in this root directory instead of /--mapping MAPPING    Display the netplan device ID/backend/interface name mapping and exit.
root@arnold-virtual-machine:~# netplan generate -h
用法:/usr/sbin/netplan generate [-h] [--debug] [--root-dir ROOT_DIR] [--mapping MAPPING]/etc/netplan/*.yaml 生成特定后端的配置文件可选参数:-h, --help           显示帮助信息并退出--debug              启用调试消息--root-dir ROOT_DIR  在此根目录中搜索并生成配置文件,而不是 /--mapping MAPPING    显示 netplan 设备 ID/后端/接口名称的映射并退出。

执行netplan generate命令会根据/etc/netplan/*.yaml目录下的配置文件生成特定后端的配置文件。具体来说,它会将Netplan配置文件转换为网络管理工具(如NetworkManager、systemd-networkd等)所需的配置文件格式。

执行netplan generate命令后,Netplan会读取/etc/netplan/*.yaml目录下的配置文件,并根据配置文件中的内容生成相应的后端配置文件。生成的配置文件将存储在特定的目录中,具体位置取决于所使用的后端工具。

这个命令的目的是将高级的Netplan配置转换为底层网络管理工具所需的配置格式,以便实际应用网络配置。生成的配置文件可以通过后续的命令(如netplan apply)来应用到系统中,从而使网络配置生效。

直接执行netplan apply命令也是可以的,然而,有时候可能需要手动执行netplan generate命令,例如在修改了Netplan配置文件后,想要查看生成的后端配置文件的内容,或者想要检查配置文件是否正确生成。在这些情况下,执行netplan generate命令可以帮助您验证配置文件的生成过程,而不会直接应用配置到系统中。

- get:通过指定嵌套键(如ethernets.eth0.addressesall)获取设置。示例命令:netplan get ethernets.eth0.addresses(注意:这个命令是从/etc/netplan中的yaml文件获取合并的网络信息,而不是当前已生效的网络信息)

netplan get -h
root@arnold-virtual-machine:~# netplan get -h
usage: /usr/sbin/netplan get [-h] [--debug] [--root-dir ROOT_DIR] [key]Get a setting by specifying a nested key like "ethernets.eth0.addresses", or "all"positional arguments:key                  The nested key in dotted formatoptional arguments:-h, --help           show this help message and exit--debug              Enable debug messages--root-dir ROOT_DIR  Read configuration files from this root directory instead of /
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan get -h
用法:/usr/sbin/netplan get [-h] [--debug] [--root-dir ROOT_DIR] [key]通过指定嵌套键(如“ethernets.eth0.addresses”或“all”)来获取设置位置参数:key                  以点分隔格式指定的嵌套键可选参数:-h, --help           显示帮助信息并退出--debug              启用调试消息--root-dir ROOT_DIR  从此根目录而不是/读取配置文件
root@arnold-virtual-machine:~# 
示例
netplan get --debug all

在这里插入图片描述

netplan get --debug ethernets

在这里插入图片描述

netplan get --debug ethernets.ens33.gateway4

在这里插入图片描述

- info:显示可用功能。示例命令:netplan info

netplan info -h
root@arnold-virtual-machine:~# netplan info -h
usage: /usr/sbin/netplan info [-h] [--debug] [--json | --yaml]Show available featuresoptional arguments:-h, --help  show this help message and exit--debug     Enable debug messages--json      Output version and features in JSON format--yaml      Output version and features in YAML format
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan info -h
用法:/usr/sbin/netplan info [-h] [--debug] [--json | --yaml]显示可用的功能可选参数:-h, --help  显示帮助信息并退出--debug     启用调试消息--json      以JSON格式输出版本和功能--yaml      以YAML格式输出版本和功能
root@arnold-virtual-machine:~# 
示例
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan info
netplan.io:website: "https://netplan.io/"features:- generate-just-in-time- generated-supplicant- dbus-config- default-routes- auth-phase2- dhcp-use-domains- ipv6-mtu- modems- sriov- openvswitch- activation-mode- eswitch-mode
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan info --debug
netplan.io:website: "https://netplan.io/"features:- generate-just-in-time- generated-supplicant- dbus-config- default-routes- auth-phase2- dhcp-use-domains- ipv6-mtu- modems- sriov- openvswitch- activation-mode- eswitch-mode
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan info --json
{"netplan.io": {"website": "https://netplan.io/","features": ["generate-just-in-time","generated-supplicant","dbus-config","default-routes","auth-phase2","dhcp-use-domains","ipv6-mtu","modems","sriov","openvswitch","activation-mode","eswitch-mode"]}
}
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan info --yaml
netplan.io:website: "https://netplan.io/"features:- generate-just-in-time- generated-supplicant- dbus-config- default-routes- auth-phase2- dhcp-use-domains- ipv6-mtu- modems- sriov- openvswitch- activation-mode- eswitch-mode
root@arnold-virtual-machine:~# 

默认netplan info是以yaml格式显示结果的。

netplan info结果解释

netplan info命令用于显示可用的功能。下面是netplan info的结果解释:

  • netplan.io:这是Netplan的官方网站,可以在该网站上获取更多关于Netplan的信息。
  • features:这是Netplan支持的功能列表。
    • generate-just-in-time:Netplan可以在应用配置之前即时生成配置文件。
    • generated-supplicant:Netplan可以生成用于网络认证的配置文件。
    • dbus-config:Netplan可以通过DBus进行配置。
    • default-routes:Netplan可以配置默认路由。
    • auth-phase2:Netplan支持第二阶段的认证。
    • dhcp-use-domains:Netplan可以使用域名进行DHCP配置。
    • ipv6-mtu:Netplan可以配置IPv6的最大传输单元(MTU)。
    • modems:Netplan支持调制解调器配置。
    • sriov:Netplan支持SR-IOV(单根物理网络适配器的虚拟化)。
    • openvswitch:Netplan支持Open vSwitch(开源虚拟交换机)。
    • activation-mode:Netplan支持激活模式配置。
    • eswitch-mode:Netplan支持以太网交换机模式配置。

这些功能表示Netplan可以实现的不同网络配置选项。

- ip:从系统中检索IP信息。示例命令:netplan ip

netplan ip -h
root@arnold-virtual-machine:~# netplan ip -h
usage: /usr/sbin/netplan ip [-h] [--debug]  ...Retrieve IP information from the systemoptional arguments:-h, --help  show this help message and exit--debug     Enable debug messagesAvailable commands:help      Show this help messageleases    Display IP leases
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan ip -h
用法:/usr/sbin/netplan ip [-h] [--debug]  ...从系统中获取IP信息可选参数:-h, --help  显示帮助信息并退出--debug     启用调试消息可用命令:help      显示此帮助消息leases    显示IP租约
root@arnold-virtual-machine:~# 
示例

不知道咋用

在这里插入图片描述

- set:通过指定点分键值对(如ethernets.eth0.dhcp4=true)添加新设置。示例命令:netplan set ethernets.eth0.dhcp4=true

netplan set -h
root@arnold-virtual-machine:~# netplan set -h
usage: /usr/sbin/netplan set [-h] [--debug] [--origin-hint ORIGIN_HINT] [--root-dir ROOT_DIR] key_valueAdd new setting by specifying a dotted key=value pair like ethernets.eth0.dhcp4=truepositional arguments:key_value             The nested key=value pair in dotted format. Value can be NULL to delete a key.optional arguments:-h, --help            show this help message and exit--debug               Enable debug messages--origin-hint ORIGIN_HINTCan be used to help choose a name for the overwrite YAML file. A .yaml suffix will be appended automatically.--root-dir ROOT_DIR   Overwrite configuration files in this root directory instead of /
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan set -h
用法:/usr/sbin/netplan set [-h] [--debug] [--origin-hint ORIGIN_HINT] [--root-dir ROOT_DIR] key_value通过指定以点分隔的键值对(如ethernets.eth0.dhcp4=true)来添加新设置位置参数:key_value             以点分隔的键值对,格式为key=value。值可以为NULL以删除键。可选参数:-h, --help            显示帮助信息并退出--debug               启用调试消息--origin-hint ORIGIN_HINT可用于帮助选择覆盖的YAML文件的名称。将自动附加.yaml后缀。--root-dir ROOT_DIR   在此根目录中覆盖配置文件,而不是在/目录中
root@arnold-virtual-machine:~# 
示例
设置dhcp4用yes或no,true和false都可以
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml 
# Let NetworkManager manage all devices on this system
network:version: 2ethernets:ens33:dhcp4: noaddresses: [192.168.1.141/24]gateway4: 192.168.1.1nameservers:addresses: [8.8.8.8, 8.8.4.4]renderer: NetworkManager
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# netplan set --origin-hint 01-network-manager-all ethernets.ens33.dhcp4=false
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml 
network:ethernets:ens33:addresses:- 192.168.1.141/24dhcp4: falsegateway4: 192.168.1.1nameservers:addresses:- 8.8.8.8- 8.8.4.4renderer: NetworkManagerversion: 2
root@arnold-virtual-machine:/etc/netplan# 
设置gateway4
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml 
network:ethernets:ens33:addresses:- 192.168.1.141/24dhcp4: falsegateway4: 192.168.1.1nameservers:addresses:- 8.8.8.8- 8.8.4.4renderer: NetworkManagerversion: 2
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# netplan set --origin-hint 01-network-manager-all ethernets.ens33.gateway4=192.168.1.2
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml 
network:ethernets:ens33:addresses:- 192.168.1.141/24dhcp4: falsegateway4: 192.168.1.2nameservers:addresses:- 8.8.8.8- 8.8.4.4renderer: NetworkManagerversion: 2
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
使用set命令如果指定.yaml文件没有,会自动生成.yaml文件;如果加上--root-dir参数,还能修改/etc/netplan的根目录,比如加上--root-dir /ky,就能修改/ky/etc/netplan下的.yaml文件(前提是/ky/etc/netplan目录存在才行)
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# ll
total 20
drwxrwxrwx   2 root root  4096 710 10:41 ./
drwxr-xr-x 131 root root 12288 77 13:52 ../
-rw-r--r--   1 root root   236 710 10:39 01-network-manager-all.yaml
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# netplan set --origin-hint test ethernets.ens33.gateway4=192.168.1.2
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# ll
total 24
drwxrwxrwx   2 root root  4096 710 10:41 ./
drwxr-xr-x 131 root root 12288 77 13:52 ../
-rw-r--r--   1 root root   236 710 10:39 01-network-manager-all.yaml
-rw-r--r--   1 root root    61 710 10:41 test.yaml
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat test.yaml 
network:ethernets:ens33:gateway4: 192.168.1.2
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 

在这里插入图片描述

修改addresses(这是个数组,要用数组[]的方式修改)
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml 
network:ethernets:ens33:addresses:- 192.168.1.100/24dhcp4: falsegateway4: 192.168.1.22nameservers:addresses:- 8.8.8.8- 8.8.4.4renderer: NetworkManagerversion: 2
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# netplan set --debug --origin-hint 01-network-manager-all ethernets.ens33.addresses=[192.168.1.141/24]
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml 
network:ethernets:ens33:addresses:- 192.168.1.141/24dhcp4: falsegateway4: 192.168.1.22nameservers:addresses:- 8.8.8.8- 8.8.4.4renderer: NetworkManagerversion: 2
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
另外,netplan set命令貌似还有记忆上次修改文件的功能,就是如果不用--origin-hint指定修改文件,则默认修改上次修改的文件
不同的yaml文件可以对同一个网口做设置,用netplan get可获取合并信息,但是可能存在冲突情况,有的会自动解决冲突,有的不会

如下:网关冲突不可解决

在这里插入图片描述

dhcp冲突可解决:

在这里插入图片描述

不同yaml文件可对同一网口做设置,并且可合并信息执行netplan apply

root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# ll
total 24
drwxrwxrwx   2 root root  4096 710 11:23 ./
drwxr-xr-x 131 root root 12288 77 13:52 ../
-rwxrwxrwx   1 root root   166 710 11:36 01-network-manager-all.yaml*
-rwxrwxrwx   1 root root   103 710 11:36 test.yaml*
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat test.yaml 
network:ethernets:ens33:addresses:- 192.168.1.100/24gateway4: 192.168.1.1
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# cat 01-network-manager-all.yaml 
network:ethernets:ens33:dhcp4: falsenameservers:addresses:- 8.8.8.8- 8.8.4.4renderer: NetworkManagerversion: 2
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# netplan get
network:version: 2renderer: NetworkManagerethernets:ens33:addresses:- "192.168.1.100/24"nameservers:addresses:- 8.8.8.8- 8.8.4.4gateway4: 192.168.1.1dhcp4: false
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# netplan apply
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255inet6 fe80::20c:29ff:fe53:63c2  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:53:63:c2  txqueuelen 1000  (Ethernet)RX packets 768742  bytes 57621701 (57.6 MB)RX errors 0  dropped 62  overruns 0  frame 0TX packets 48235  bytes 5028407 (5.0 MB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 702  bytes 63263 (63.2 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 702  bytes 63263 (63.2 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0root@arnold-virtual-machine:/etc/netplan# 
root@arnold-virtual-machine:/etc/netplan# 

- rebind:将给定物理功能的SR-IOV虚拟函数重新绑定到其驱动程序。示例命令:netplan rebind(一般用不到)

netplan rebind -h
root@arnold-virtual-machine:/etc/NetworkManager# 
root@arnold-virtual-machine:/etc/NetworkManager# netplan rebind -h
usage: /usr/sbin/netplan rebind [-h] [--debug] [netdevs [netdevs ...]]Rebind SR-IOV virtual functions of given physical functions to their driverpositional arguments:netdevs     Space separated list of PF interface namesoptional arguments:-h, --help  show this help message and exit--debug     Enable debug messages
root@arnold-virtual-machine:/etc/NetworkManager# 
root@arnold-virtual-machine:/etc/NetworkManager# 
root@arnold-virtual-machine:/etc/NetworkManager# netplan rebind -h
用法:/usr/sbin/netplan rebind [-h] [--debug] [netdevs [netdevs ...]]将给定物理功能的SR-IOV虚拟功能重新绑定到其驱动程序位置参数:netdevs     以空格分隔的PF接口名称列表可选参数:-h, --help  显示此帮助消息并退出--debug     启用调试消息
root@arnold-virtual-machine:/etc/NetworkManager# 

netplan rebind命令用于将给定物理功能(Physical Function,PF)的SR-IOV(Single Root I/O Virtualization)虚拟功能(Virtual Function,VF)重新绑定到其驱动程序。

SR-IOV是一种硬件虚拟化技术,允许将物理网络适配器划分为多个虚拟网络适配器。物理功能(PF)是主要的网络适配器,而虚拟功能(VF)是从主要适配器分配的虚拟适配器。

netplan rebind命令的作用是重新将VF绑定到其驱动程序。这在以下情况下可能会有用:

  1. 重新配置网络:当您需要重新配置网络适配器的SR-IOV设置时,可能需要重新绑定VF。通过重新绑定VF,您可以将其分配给不同的驱动程序或重新配置其参数。

  2. 故障恢复:如果VF与其驱动程序之间存在通信问题或其他故障,重新绑定VF可能有助于恢复其正常功能。重新绑定VF可以重新建立VF与驱动程序之间的连接。

  3. 性能优化:有时,重新绑定VF可以改善网络适配器的性能。通过将VF重新绑定到更适合其需求的驱动程序,可以提高网络适配器的性能和效率。

netplan rebind命令用于重新绑定SR-IOV虚拟功能(VF)到其驱动程序,以实现网络适配器的重新配置、故障恢复或性能优化。

- try:尝试将新的netplan配置应用到运行系统,自动回滚。示例命令:netplan try

netplan try -h
root@arnold-virtual-machine:/etc/NetworkManager# 
root@arnold-virtual-machine:/etc/NetworkManager# netplan try -h
usage: /usr/sbin/netplan try [-h] [--debug] [--config-file CONFIG_FILE] [--timeout TIMEOUT] [--state STATE]Try to apply a new netplan config to running system, with automatic rollbackoptional arguments:-h, --help            show this help message and exit--debug               Enable debug messages--config-file CONFIG_FILEApply the config file in argument in addition to current configuration.--timeout TIMEOUT     Maximum number of seconds to wait for the user's confirmation--state STATE         Directory containing previous YAML configuration
root@arnold-virtual-machine:/etc/NetworkManager# 
root@arnold-virtual-machine:/etc/NetworkManager# 
root@arnold-virtual-machine:/etc/NetworkManager# netplan try -h
用法:/usr/sbin/netplan try [-h] [--debug] [--config-file CONFIG_FILE] [--timeout TIMEOUT] [--state STATE]尝试将新的netplan配置应用于运行中的系统,并自动回滚可选参数:-h, --help            显示此帮助消息并退出--debug               启用调试消息--config-file CONFIG_FILE除当前配置外,还应用参数中的配置文件。--timeout TIMEOUT     等待用户确认的最大秒数--state STATE         包含先前YAML配置的目录
root@arnold-virtual-machine:/etc/NetworkManager# 

解释:它这个try跟我想象的还不太一样,用命令行执行它后,要一段时间内用户敲Enter键,否则就回退之前的ip设置

我在想,如何在代码中,实现检测到网络设置成功后(python可以用ping3库实现用新设置的ip去ping 请求者ip,来检测网络是否设置成功),模拟用户敲Enter的功能

20230712:实在有点懵,我测试的时候,它有时超时后能回滚,有时不能,很诡异。

参考github文档:https://github.com/canonical/netplan/blob/main/doc/netplan-try.md

在这里插入图片描述

重点:确认或拒绝,可发SIGUSR1或SIGINT信号。

在这里插入图片描述

他们自己也说有bug啊!@!!!!!

在这里插入图片描述

在这里插入图片描述

示例

在这里插入图片描述

无法回滚bug排查

桑奥夫必去!!我现在又复现不了回退失败的情况了- -

root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255inet6 fe80::20c:29ff:fe53:63c2  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:53:63:c2  txqueuelen 1000  (Ethernet)RX packets 2035111  bytes 279455500 (279.4 MB)RX errors 0  dropped 254  overruns 0  frame 0TX packets 294933  bytes 48203029 (48.2 MB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 9942  bytes 866857 (866.8 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 9942  bytes 866857 (866.8 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# cat /etc/netplan/kyai_netplan_config.yaml network:ethernets:ens33:dhcp4: falseaddresses:- 192.168.1.141/24nameservers:addresses:- 192.168.1.1- 8.8.8.8gateway4: 192.168.1.1renderer: NetworkManagerversion: 2root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# netplan try --timeout 1
Do you want to keep these settings?Press ENTER before the timeout to accept the new configurationChanges will revert in 1 seconds
Reverting.
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255inet6 fe80::20c:29ff:fe53:63c2  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:53:63:c2  txqueuelen 1000  (Ethernet)RX packets 2035851  bytes 279526834 (279.5 MB)RX errors 0  dropped 254  overruns 0  frame 0TX packets 295148  bytes 48232157 (48.2 MB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 10008  bytes 872415 (872.4 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 10008  bytes 872415 (872.4 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0root@arnold-virtual-machine:~# 
root@arnold-virtual-machine:~# 

配置示例1:动态ip

/etc/netplan/中的.yaml文件内容改成:

network:version: 2renderer: NetworkManager

然后执行netplan apply,动态ip就设置好了。

配置示例2:固定ip

更改配置文件

在01-network-manager-all.yaml中添加红框中内容:

(注意缩进!注意缩进!注意缩进!)

network:ethernets:ens33:dhcp4: falseaddresses:- 192.168.1.141/24nameservers:addresses:- 192.168.1.1- 8.8.8.8gateway4: 192.168.1.1renderer: NetworkManagerversion: 2

在这里插入图片描述

(不同系统,怎么这个文件名还不一样?在浪潮服务器上是这样的)

在这里插入图片描述

在这里插入图片描述

116 NX ubuntu20.04盒子上是这样:

在这里插入图片描述

在ubuntu20.04虚拟机上是这样:

在这里插入图片描述

在这里插入图片描述

配置文件名称不重要,因为如果/etc/netplan下有多个.yaml配置文件,它会合并到一个配置文件(可能会有冲突,执行netplan apply时会提示报错),我们简单使用的话,就维持一个.yaml配置文件即可。

执行修改命令

配置示例2:禁用ipv6

参考文章:https://netplan.readthedocs.io/en/stable/netplan-tutorial/

机上这两个,会禁用ipv6,但是我们暂时用不到

在这里插入图片描述

其他疑问

NetworkManager和netplan有何区别?

NetworkManager和Netplan是Ubuntu中两种不同的网络管理工具。

  1. NetworkManager:NetworkManager是一个功能强大的网络管理器,用于管理和配置网络连接。它提供了一个图形化界面和命令行工具,可以方便地管理以太网、Wi-Fi、VPN等网络连接。NetworkManager支持自动检测和配置网络连接,可以动态切换网络配置,适用于桌面环境和移动设备。

  2. Netplan:Netplan是Ubuntu 17.10及更高版本引入的新一代网络配置工具。它使用简单的YAML配置文件来定义网络接口和连接配置。Netplan的目标是提供一种统一的、简化的方式来配置网络连接,以取代之前的网络管理工具(如ifupdown)。Netplan配置文件位于/etc/netplan/目录下,可以定义静态IP、DHCP、网关、DNS等网络参数。

虽然NetworkManager和Netplan都可以用于配置网络连接,但它们的工作方式和使用场景略有不同。NetworkManager适用于桌面环境和移动设备,提供了更多的功能和灵活性。而Netplan则更适合服务器环境,提供了一种简化的配置方式,使网络配置更易于管理和维护。在Ubuntu 20.04中,默认使用Netplan作为网络管理工具。

为什么/etc/netplan/01-network-manager-all.yaml中有renderer: NetworkManager字样,netplan依赖于networkMananger吗?

在Ubuntu 20.04中,默认情况下,Netplan使用NetworkManager作为其渲染器(renderer)。这意味着Netplan配置文件中的renderer: NetworkManager指定了Netplan使用NetworkManager来管理网络连接。

Netplan本身并不直接依赖于NetworkManager,而是通过渲染器与不同的网络管理工具进行交互。渲染器是Netplan的一个组件,它负责将Netplan配置文件中的网络配置转换为实际的网络管理工具所需的配置。

在Ubuntu 20.04中,默认的Netplan渲染器是NetworkManager,这是因为NetworkManager是一个功能强大的网络管理工具,适用于桌面环境和移动设备。使用NetworkManager作为Netplan的渲染器可以提供更多的功能和灵活性,例如自动检测和配置网络连接、Wi-Fi管理、VPN支持等。

然而,Netplan也支持其他渲染器,如systemd-networkd。你可以根据需要修改Netplan配置文件,将renderer字段设置为其他渲染器,以便使用不同的网络管理工具。例如,将renderer: NetworkManager修改为renderer: systemd-networkd,然后应用配置即可切换到systemd-networkd作为Netplan的渲染器。

总结起来,Netplan并不直接依赖于NetworkManager,但在默认情况下,Netplan使用NetworkManager作为其渲染器来管理网络连接。你可以根据需要选择不同的渲染器来适应不同的网络管理工具。

那为什么用户不直接用NetworkManager配置网络?

用户可以直接使用NetworkManager来配置网络,特别是在桌面环境和移动设备上,NetworkManager提供了一个易于使用的图形界面和命令行工具,可以方便地管理和配置网络连接。

然而,Netplan作为Ubuntu 20.04引入的新一代网络配置工具,提供了一种更简化和统一的方式来配置网络连接。Netplan使用简单的YAML配置文件来定义网络接口和连接配置,使网络配置更易于管理和维护。它的目标是提供一种统一的网络配置方式,以取代之前的网络管理工具(如ifupdown)。

使用Netplan的好处包括:

  1. 统一的配置语法:Netplan使用YAML配置文件,提供了一种统一的配置语法,使网络配置更易于理解和编写。

  2. 简化的配置流程:Netplan的配置文件中只需指定网络接口和连接的基本信息,如IP地址、子网掩码、网关等,而不需要关注底层的网络管理细节。

  3. 支持多个渲染器:Netplan支持多个渲染器,如NetworkManager和systemd-networkd,可以根据需要选择不同的渲染器来管理网络连接。

  4. 自动应用配置:一旦修改了Netplan配置文件,只需应用配置即可自动加载和应用新的网络配置,无需手动重启网络服务。

尽管Netplan提供了更简化和统一的网络配置方式,但对于一些用户来说,直接使用NetworkManager可能更为直观和熟悉。因此,用户可以根据自己的需求和偏好选择使用NetworkManager或Netplan来配置网络。

那netplan有提供一些函数接口来修改网络配置吗,还是只能修改yaml配置文件?

Netplan本身并没有提供专门的函数接口来修改网络配置。Netplan的主要工作是读取和解析YAML配置文件,并将其转换为底层网络管理工具所需的配置。

要修改网络配置,通常需要直接编辑Netplan的配置文件(位于/etc/netplan/目录下),并保存更改。然后,可以使用netplan apply命令来应用新的配置,使其生效。

例如,可以使用文本编辑器(如nano或vim)打开Netplan配置文件,修改其中的网络参数,然后保存文件。接下来,运行sudo netplan apply命令来应用新的配置。

sudo nano /etc/netplan/01-network-manager-all.yaml
# 修改配置文件
sudo netplan apply

请注意,修改Netplan配置文件时,需要遵循正确的YAML语法。如果配置文件中存在语法错误,netplan apply命令可能会失败。

如果你希望通过编程方式修改网络配置,可以考虑使用其他工具或库来操作Netplan配置文件。例如,你可以使用Python的PyYAML库来读取和修改Netplan配置文件。这样,你就可以编写自己的脚本来动态修改网络配置。

使用netplan修改ubuntu20.04的固定ip,需要在配置文件里,填写哪些参数?

在使用Netplan修改Ubuntu 20.04的固定IP时,需要在配置文件中填写以下参数:

  1. network:指定网络配置的开始标记。
  2. version:指定Netplan配置文件的版本号,通常为2。
  3. ethernets:指定以太网接口的配置。
    • eth0:以太网接口的名称,可以根据实际情况进行更改。
      • dhcp4:指定IPv4的配置方式为DHCP,如果要设置固定IP,则改为static
      • addresses:指定IPv4地址,例如192.168.1.100/24
      • gateway4:指定IPv4的网关地址,例如192.168.1.1
      • nameservers:指定DNS服务器的地址,例如[8.8.8.8, 8.8.4.4]
  4. renderer:指定网络配置的渲染器,通常为networkd

下面是一个示例的Netplan配置文件,用于设置以太网接口eth0的固定IP:

network:version: 2ethernets:eth0:dhcp4: noaddresses: [192.168.1.100/24]gateway4: 192.168.1.1nameservers:addresses: [8.8.8.8, 8.8.4.4]renderer: networkd

请根据实际情况修改IP地址、网关地址和DNS服务器地址。完成后,将以上配置保存到Netplan配置文件(通常为/etc/netplan/01-netcfg.yaml),然后运行sudo netplan apply命令使配置生效。

注意:即使不执行netplan apply,系统重启后,也会根据/etc/netplan下的.yaml文件内容,来配置网络

netplan会在系统启动时自动加载并应用/etc/netplan目录下的配置文件。即使没有手动执行netplan apply命令,系统重启后也会根据配置文件重新配置网络。这是因为netplan使用systemd或networkManager网络配置管理器来管理网络配置,它会在系统启动时自动加载并应用配置。所以,只需将配置文件放置在/etc/netplan目录下,系统重启后就会自动应用新的网络配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 运行流程、类加载、垃圾回收

一、JVM 简介 1、JVM JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别…

Android Java代码与JNI交互字符串转换(四)

🔥 Android Studio 版本 🔥 🔥 创建JNIString.java 🔥 package com.cmake.ndk1.jni;public class JNIString {static{System.loadLibrary("string-lib");}public native String callNativeString(String str);public native void stringMethod(String str)…

C/C++的发展历程和未来趋势

文章目录 C/C的起源C/C的应用C/C开发的工具C/C未来趋势 C/C的起源 C语言 C语言是一种通用的高级编程语言&#xff0c;由美国计算机科学家Dennis Ritchie在20世纪70年代初期开发出来。起初&#xff0c;C语言是作为操作系统UNIX的开发语言而创建的。C语言的设计目标是提供一种功…

【玩转循环】探索Python中的无限可能性

前言 循环可能是每个编程语言中使用比较多的语法了&#xff0c;如果能合理利用好循环&#xff0c;就会出现意想不到的结果&#xff0c;大大地减少代码量&#xff0c;让机器做那些简单枯燥的循环过程&#xff0c;今天我将为大家分享 python 中的循环语法使用。&#x1f697;&am…

spring复习:(22)实现了BeanNameAware等Aware接口的bean,相应的回调方法是在哪里被调用的?

AbstractAutowireCapableBeanFactory的doCreateBean用来创建bean, 其中调用了initializeBean方法对bean进行初始化 initializeBean包含如下代码&#xff1a; 而invokeAwareMethods代码如下&#xff1a; 可见其分别判断是否实现了BeanNameAware接口、BeanClassLoaderAware接口…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升技术

空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化&#xff1a;地图符号与注记 2.4 研究区…

Maven下载和配置教程:Windows、Mac和Linux系统安装指南

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Nginx配置白名单访问

一、背景 在项目运行的时候&#xff0c;需要设置特定的访问权限&#xff0c;以拒绝其他可能存在的恶意访问。 二、配置 2.1、关键字 允许访问关键字&#xff1a;allow 屏蔽访问关键字&#xff1a;deny 2.2、作用域 作用域如下&#xff1a; http&#xff1a;所有网站屏蔽I…

如何搭建自己的图床(GitHub版)

文章目录 1.图床的概念2.用GitHub创建图床服务器2.1.新建仓库2.2.生成Token令牌2.3.创建img分支和该分支下的img文件夹(可选) 3.使用PicGo软件上传图片3.1 下载PicGo软件3.2配置PicGo3.3用PicGo实现上传 4. Typora实现自动上传5.免费图片网站 前言&#xff1a; 如果没有自己的服…

ARM Coresight 系列文章 7 - ARM Coresight 通过 AHB-AP 访问 cpu 内部 coresight 组件

文章目录 如下图所示&#xff0c;如果A78想去访问M33的内部 coresight 组件 ETM&#xff0c;需要要怎么做&#xff1f; 答案也正是在图中&#xff0c;首先A78 通过AXI 互联&#xff0c;接入到 APBIC 的 slave port&#xff0c;再通过APBIC 的 master 送出&#xff0c;而APBIC中…

网安学习经历小记

明明自觉学会了不少知识&#xff0c;可真正开始做题时&#xff0c;却还是出现了“一支笔&#xff0c;一双手&#xff0c;一道力扣&#xff08;Leetcode&#xff09;做一宿”的窘境&#xff1f;你是否也有过这样的经历&#xff0c;题型不算很难&#xff0c;看题解也能弄明白&…

MySql高级篇-006 MySQL架构篇-02MySQL的数据目录:数据库下的主要目录结构、文件系统如何存储数据

第02章_MySQL的数据目录 1.MySQL8的主要目录结构 # 查询名称叫做mysql的文件目录都有哪些[rootatguigu07 ~]# find / -name mysql安装好MySQL 8之后&#xff0c;我们查看如下的目录结构&#xff1a; 1.1 数据库文件的存放路径 MySQL数据库文件的存放路径&#xff1a;/var/…

Foxit PDF ActiveX 5.9.8 Crack

Foxit PDF SDK ActiveX 即时添加PDF显示功能至Windows应用程序&#xff0c;快速投放市场&#xff0c;可视化编程组件功能强大且易于使用的PDF软件开发工具包 对于刚接触PDF或不愿投入过多精力学习PDF技术的产品管理者及开发者来说&#xff0c;Foxit PDF SDK ActiveX无疑是理想…

第二十章:CANet:具有迭代细化和专注少样本学习的无类别分割网络

0.摘要 最近在语义分割方面的进展是由深度卷积神经网络和大规模标注图像数据集推动的。然而&#xff0c;像素级别的数据标注是繁琐和昂贵的。此外&#xff0c;训练好的模型只能在一组预定义的类别中进行预测。在本文中&#xff0c;我们提出了CANet&#xff0c;一种无类别偏见的…

现代化 Android 开发:Jetpack Compose 最佳实践

作者&#xff1a;古哥E下 如果一直关注 Compose 的发展的话&#xff0c;可以明显感受到 2022 年和 2023 年的 Compose 使用讨论的声音已经完全不一样了, 2022 年还多是观望&#xff0c;2023 年就有很多团队开始采纳 Compose 来进行开发了。不过也有很多同学接触了下 Compose&am…

基于深度学习的高精度鸟类目标检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度鸟类目标&#xff08;鹦鹉&#xff08;Crested Myna&#xff09;、麻雀&#xff08;Eurasian Tree Sparrow&#xff09;、黑头文鸟&#xff08;Chestnut Munia&#xff09;、白领翡翠&#xff08;Collared Kingfisher&#xff09;、太阳鸟…

Redis深入——管道、发布订阅、主从复制、哨兵监控和集群

前言 在前面的学习中&#xff0c;我们已经了解了Redis的基本语法以及Redis持久化和事务的概念。而在这篇文章中我们继续来梳理管道、发布订阅、主从复制、哨兵监控和集群的知识&#xff0c;理解Redis主从复制到集群分片的演进过程&#xff0c;希望对正在学习的小伙伴有一定的帮…

C语言—数据类型

文章目录 1 基本数据类型2 数组&#xff0c;字符数组和字符串2.1 数组2.2 字符数组与字符串 3 枚举类型4 结构体和共用体4.1 结构体4.2 共用体 5. 拓展5.1 结构体内存分配5.1.1 以结构体中占字节数最大的数据类型的字节数为单位开辟内存5.1.2 字节对齐5.1.3 结构体中嵌套结构体…

区块链生态发展

文章目录 前言以太坊的到来什么是图灵完备&#xff1f;什么是智能合约&#xff1f; 以太坊的应用去中心化应用 DApp代币发行 公有链&联盟链区块链应用总结 前言 前面的区块链文章有介绍区块链的诞生以及底层运行原理&#xff0c; 本文主要介绍一下区块链应用的发展&#x…

ensp静态路由

要求&#xff1a; 1.全网可达 2.拓朴中所需地址全部基于192.168.0.0/24 3.静态路由&#xff08;不许使用其他动态&#xff09; 4.R2环回需要汇总 拓朴图&#xff1a; 将192.168.0.0/24划分为5个子网&#xff0c; 得&#xff1a; 192.168.0.0/27 192.168.0.32/27 192.168.0.64/…