network和NetworkManager区别及ifconfig、ip、ethtool命令的使用介绍

 

当你进入一个linux操作系统之后,你首先想了解恐怕就是这个环境的网络状态了,如果你使用的linux桌面GUI系统,你可以直接查看桌面上的网络图标;如果你使用的是服务器text文本模式登录,那恭喜你,下面的使用方式可以帮到你;

openEuler 20.03-LTS、Redhat 8.x、CentOS 8.x、fedora 32等都已经默认使用的是NetworkManager来管理操作系统网络了,至于你说为啥不继续用network服务了,那我们就先看下networkNetworkManager的区别哈,知其然,知其所以然!

*************************network**************************************

network是一个系统服务,你可以使用systemctl来查看该服务状态;这个服务是由initscripts软件包提供的,你看这个initscripts软件包名字你也能猜出来,这个包提供了操作系统运行起来后的一些脚本对系统做一些设备初始化,其中就包括对网络设备做初始化;

linux-oycygI:~ # systemctl status network
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: active (exited) since Sun 2020-06-07 13:09:13 CST; 1 months 0 days ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3069 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B


linux-oycygI:~ # rpm -qf "/etc/rc.d/init.d/network"
initscripts-9.49.39-1.1.h8.x86_64

之后我们再刨根问底儿,查下这个服务脚本到底是怎么管理网卡设备的,那就要直接看这个脚本的源码了,下面是openEuler社区该包的源码包,大家自行下载查看;

https://gitee.com/src-openeuler/initscripts/blob/master/initscripts-10.01.tar.gz

我这边为了方便,直接github上查看已经展开的脚本文件,链接如下:

https://github.com/fedora-sysv/initscripts/blob/master/etc/rc.d/init.d/network

从下面的脚本内容就可以看出来,是直接去/etc/sysconfig/network-scripts下面找ifcfg-*文件(该文件时每个网卡设备的配置文件)

# Check that networking is up.
is_false "${NETWORKING}" && exit 6

# if the ip configuration utility isn't around we can't function.
[ -x /sbin/ip ] || exit 1


CWD=$(pwd)
cd /etc/sysconfig/network-scripts

. ./network-functions

# find all the interfaces besides loopback.
# ignore aliases, alternative configurations, and editor backup files
interfaces=$(ls ifcfg-* | \
        LC_ALL=C sed -e "$__sed_discard_ignored_files" \
               -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \
               -e '{ s/^ifcfg-//g;s/[0-9]/ &/}' | \
        LC_ALL=C sort -k 1,1 -k 2n | \
        LC_ALL=C sed 's/ //')
rc=0

好了,到这里,我们知道了network是怎么管理网络设备的;那接下来就要看日常通过什么命令来查看/设置network服务管理下的网络配置

*************************ifconfig命令**************************************

大家默认喜欢用的是ifconfig和ip命令,那这两个命令是来自哪里的呢?分别是来自net-toolsiproute

linux-oycygI:~ # rpm -qf "/usr/sbin/ifconfig"
net-tools-2.0-0.17.20131004git.h3.x86_64

linux-oycygI:~ # rpm -qf "/usr/sbin/ip"
iproute-3.10.0-87.h8.x86_64

ifconfig的基本命令使用方式也在这里给大家一并整理在一起:

实例1:显示网络设备信息(激活状态的)

命令:ifconfig

输出:

[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:56:BF:26:20  
          inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8700857 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31533 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:596390239 (568.7 MiB)  TX bytes:2886956 (2.7 MiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:68 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2856 (2.7 KiB)  TX bytes:2856 (2.7 KiB)

实例2:启动/关闭指定网卡

命令:

ifconfig eth0 up #启动指定网卡

ifconfig eth0 down #启动指定网卡

实例3:配置IP地址

命令:ifconfig eth0 x.x.x.x

输出:

[root@localhost ~]# ifconfig eth0 192.168.120.56 
[root@localhost ~]# ifconfig eth0 192.168.120.56 netmask 255.255.255.0 
[root@localhost ~]# ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

实例4:启用和关闭ARP协议

命令:

ifconfig eth0 arp

ifconfig eth0 -arp

输出

[root@localhost ~]# ifconfig eth0 arp 
[root@localhost ~]# ifconfig eth0 -arp

详细的命令使用详见下面的帖子:

https://www.cnblogs.com/peida/archive/2013/02/27/2934525.html

*************************ip命令**************************************

ip 命令的功能很丰富,基本上它整合了 ifconfig 与 route 这两个命令,ip命令格式如下:

 ip  [option]  [动作]  [命令]

参数:

[option] :设定的参数,主要有:

     -s :显示出该设备的统计数据(statistics),例如总接受封包数等;

[动作]:就是是可以针对哪些网络参数进行动作,包括有:

       link :关于设备 (device) 的相关设定,包括 MTU, MAC 地址等等

       addr/address :关于额外的 IP 设定,例如多 IP 的实现等等;

       route :与路由有关的相关设定 

[命令]:每个 [动作] 后面都有好多 [命令] ,具体的命令查询,建议使用ip [动作] help来查询 

linux-oycygI:~ # ip link help
Usage: ip link add [link DEV] [ name ] NAME
                   [ txqueuelen PACKETS ]
                   [ address LLADDR ]
                   [ broadcast LLADDR ]
                   [ mtu MTU ]
                   [ numtxqueues QUEUE_COUNT ]
                   [ numrxqueues QUEUE_COUNT ]
                   type TYPE [ ARGS ]
       ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]

       ip link set { DEVICE | dev DEVICE | group DEVGROUP }
	                  [ { up | down } ]
	                  [ type TYPE ARGS ]
	                  [ arp { on | off } ]
	                  [ dynamic { on | off } ]
	                  [ multicast { on | off } ]
	                  [ allmulticast { on | off } ]
	                  [ promisc { on | off } ]
	                  [ trailers { on | off } ]
	                  [ txqueuelen PACKETS ]
	                  [ name NEWNAME ]
	                  [ address LLADDR ]
	                  [ broadcast LLADDR ]
	                  [ mtu MTU ]
	                  [ netns { PID | NAME } ]
	                  [ link-netnsid ID ]
			  [ alias NAME ]
	                  [ vf NUM [ mac LLADDR ]
				   [ vlan VLANID [ qos VLAN-QOS ] ]
				   [ rate TXRATE ]
				   [ max_tx_rate TXRATE ]
				   [ min_tx_rate TXRATE ]
				   [ spoofchk { on | off} ]
				   [ query_rss { on | off} ]
				   [ state { auto | enable | disable} ] ]
				   [ trust { on | off} ] ]
			  [ master DEVICE ]
			  [ nomaster ]
			  [ addrgenmode { eui64 | none } ]
	                  [ protodown { on | off } ]
       ip link show [ DEVICE | group GROUP ] [up] [master DEV] [type TYPE]
       ip link help [ TYPE ]

TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | macvtap |
          bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan |
          gre | gretap | ip6gre | ip6gretap | vti | nlmon |
          bond_slave | geneve | bridge_slave | macsec | ipvlan}

实例1:关于设备 (device) 的相关设定,包括 MTU, MAC 地址等等

命令:

ip link [命令]

输出

linux-oycygI:~ # ip link show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1500 qdisc mq master ovs-system state UP mode DEFAULT qlen 1000
    link/ether 68:8f:84:ee:c7:a4 brd ff:ff:ff:ff:ff:ff

实例2:启动、关闭网卡以及设定网卡设备的相关信息

命令:

ip link set eth0 up

ip link set eth0 down

ip link set eth0 address

ip link set eth0 broadcast

ip link set eth0 alias

ip link set eth0 name

ip link set eth0 mtu 1000

输出

[root@linux ~]# ip link set eth0 up

[root@linux ~]# ip link set eth0 down

实例3:添加、删除、设定网卡地址,以及设定网卡设备的相关信息

命令:

ip addr add 192.168.1.1/24 dev eth0

ip addr del 192.168.1.1/24 dev eth0

ip route add default via 192.168.1.1 dev eth0

ip route add 192.168.1.0/24 via 192.168.1.1

ip route delete 192.168.1.0/24 via 192.168.1.1

ip route replace 192.168.1.0/24 dev eth0

老规矩,上面简单介绍下使用方式,详细的看下面的帖子哈

https://blog.csdn.net/haoshuwei531024/article/details/47952629

https://access.redhat.com/sites/default/files/attachments/rh_ip_command_cheatsheet_1214_jcs_print.pdf

*************************ethtool**************************************

既然都已经聊完了常用的网络命令和服务了,那我们也就不能忘记了ethtool这个工具啊,为啥呢 ?

ethtool 是用于查询及设置网卡参数的命令;

使用概要:
ethtool eth0          
//查询eth0网口基本设置
ethtool –h            
//显示ethtool的命令帮助(help)
ethtool –i eth0       
//查询eth0网口的相关信息 
ethtool –d eth0       
//查询eth0网口注册性信息
ethtool –r eth0       
//重置eth0网口到自适应模式
ethtool –S eth0       
//查询eth0网口收发包统计
ethtool –s eth0 [speed 10|100|1000] [duplex half|full]  [autoneg on|off]        
//设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商
ethtool -E eth0 magic 0x10798086 offset 0x10 value 0x1A  
//修改网卡EEPROM内容(0x1079 网卡device id , 0x8086网卡verdor id  )
ethtool -e eth0
//dump网卡EEPROM内容

linux-oycygI:~ # yum whatprovides “/usr/sbin/ethtool”
Loaded plugins: fastestmirror   
Determining fastest mirrors
1:ethtool-4.8-1.2.x86_64 : Settings tool for Ethernet NICs
Repo        : openEuler
Matched from:
Filename    : /usr/sbin/ethtool

将 ethtool 设置永久保存在网络设备的方法
解决方法一:
        ethtool 设置可通过 /etc/sysconfig/network-scripts/ifcfg-ethX 文件保存,从而在设备下次启动时激活选项。 
例如:ethtool -s eth0 speed 100 duplex full autoneg off
此指令将eth0设备设置为全双工自适应,速度为100Mbs。若要eth0启动时设置这些参数, 修改文件/etc/sysconfig/network-scripts/ifcfg-eth0 ,添加如下一行: 

ETHTOOL_OPTS="speed 100 duplex full autoneg off"

解决方法二:
         将ethtool设置写入/etc/rc.d/rc.local之中

老规矩,详细的使用方式查询下面的帖子,或者直接man手册;

https://blog.csdn.net/evenness/article/details/7519061

*************************NetworkManager**************************************

NetworkManager简介:NetworkManager由一个管理系统网络连接、并且将其状态通过D-BUS(是一个提供简单的应用程序互相通讯的途径的自由软件项目,它是做为freedesktoporg项目的一部分来开发的)进行报告的后台服务,以及一个允许用户管理网络连接的客户端程序。你可以理解为NetworkManager的思想就是想一把讲linux操作系统下的各种网络相关的服务都统一管理起来,有点systemd的设计思路,但是,但是啊,这个其实是不符合linux设计思想的啊!

NetworkManager的优点:简化网络连接的工作,让桌面本身和其他应用程序能感知网络。

NetworkManager的后台服务:对于GNOMEXfce那就是nm-applet工具,而对于KDE用户来说就是KNetworkManager

好了,言归正传,下面开始给大家演示基本的NetworkManager服务使用方式

查看当前系统环境上的NetworkManager服务状态

systemctl status NetworkManager

查看系统当前每个设备的IP配置信息

nmcli

查看系统当前所有的网络设备及设备信息

nmcli device show

查看系统当前可用的/已连接的网络设备

nmcli connection

关闭/紧用eth0网卡设备

nmcli connection down eth0

激活eth0网卡设备

nmcli connection up eth0

查看eth0网卡的完整连接信息

nmcli connection show eth0

手动更改网卡连接的属性,由动态获取改为静态手动配置:

(手动更改连接配置,不会立即生效,需要重新激活该网卡设备时,重新加载新配置生效)

nmcli connection modify eth0 ipv4.method manual
ipv4.addresses 192.168.10.2
ipv4.gateway 192.168.255.1 ipv4.dns 192.168.255.0

NetworkMangaer默认时自动激活网络连接的,如果你想停止NetworkManager的自动连接,可以手动修改:

(如果你这么手动设置了,并且生效了的化,后面的网络连接就都要你手动激活了)

nmcli connection modify eth0 connection.autoconnect no

上面都是对已有的网络设备连接做查询、设置,那接下来,我们就要在进阶到高级的创建新的网络设置了

注意:nmcli连接子命令时add,语法使用方式和上面的modify类似:

nmcli con add type ethernet ifname eth1 con-name eth1 autoconnect no

nmcli con

如果你希望整个nmcli命令设置更具有交互性,可以使用--ask方式,例如下面这样:

nmcli --ask con add
Connection type: ethernet
Interface name [*]: eth2
There are 3 optional settings for Wired Ethernet.
Do you want to provide them? (yes/no) [yes] no
There are 2 optional settings for IPv4 protocol.
Do you want to provide them? (yes/no) [yes] no
There are 2 optional settings for IPv6 protocol.
Do you want to provide them? (yes/no) [yes] no
There are 4 optional settings for Proxy.
Do you want to provide them? (yes/no) [yes] no
Connection 'ethernet-enp0s1' (64b499cb-429f-4e75-a54d-b3fd980c39aa) successfully added.

 

命令 说明 描述
down 连接 将断开指定的连接,取消配置关联的设备。
up 连接 将激活指定的连接。
show [连接] 当不带参数使用时,show 可以像默认命令一样将其省略:它列出了所有可用的连接。如果提供连接名称或UUID作为参数,则将打印连接属性。
modify 连接{property_name, 将改变连接的属性
property_value} ...  
add 连接{property_name, 将使用指定的属性创建一个
property_value} ...

你可能感兴趣的:(linux)