概述

先说一下NetworkManager服务:从RHEL/CentOS 7开始,网络功能默认由NetworkManager以服务的形式提供。NetworkManager是一个能够动态控制和配置网络的守护进程,管理网络服务和网络连接,对应NetworkManager.service服务。
旧的 /etc/init.d/network 以及 ifup,ifdown 等静态控制脚本依然存在,但是处于备用状态,即:NetworkManager运行时,多数情况下这些脚本会调用NetworkManager去完成网络配置任务;NetworkManager么有运行时,这些脚本就按照老传统管理网络。
但是由于Centos 7系列二者共存,且NetworkManager还不够完善,二者一并开启会出现一定的问题。所以大多数情况下用户会把NetworkManager关闭。只用network服务,network服务相关的内容,还是很值得探讨一下的。
(Centos 8系列已经摒弃了network服务,那就老老实实用NetworkManager吧~~)

使用

network.service是系统提供的服务之一,以兼容遗留的网络功能。该服务的运行也被纳入SystemD的管理,命令如下:

systemctl start|stop|restart|status network

启动流程分析

A picture is worth a thousand words. 上图:

centos需要运行networkmanager centos启动networkmanager_运维


通过上图可以发现network服务启动过程就是一个遍历需要自动连接网络的网络设备、通过调用ifup读取对应的配置和初始化。当然,启动过程中还会读取默认的route、VPN等配置。**最后就是sleep。**所以network服务其实就是启动时候进行一下网络配置,启动完之后就搁那儿看戏,啥事不管了(这也叫服务?可能是因为用systemd管理,作为服务进行对待了吧)。

centos需要运行networkmanager centos启动networkmanager_启动过程_02


更多的细节和stop、restart的流程,可以参考/etc/rc.d/init.d/network代码

一个小问题讨论

问:那么network服务起不来,是不是我们的网卡设备就不能用了呢?
**答:不完全是。**因为启动流程中network是通过遍历一个一个网卡来初始化的,以5个网卡为例,如果遍历顺序第3的网卡初始化有问题,导致network服务启动失败。网卡3可能是不能用的,但网卡1和网卡2已经初始化完成可以正常使用。网卡4和网卡5如果之前已经有配置过了,那么也可以使用。

小测试:在遍历过程中加入一个ping动作

centos需要运行networkmanager centos启动networkmanager_网络配置_03


重启系统,观察journalctl日志:(systemd[1]: Starting LSB: Bring up/down networking…代表开始启动network服务)

可以发现,在ens1f0网卡启动之后,此时network服务启动过程还没有完全结束,但网络已经正常可用了。

centos需要运行networkmanager centos启动networkmanager_初始化_04