[Linux指南]查看网卡配置及切换网卡工作模式

导言

前几天在对 zimaboard 内网测速时发现网速一直卡在 100Mbps，在多次 debug 后发现是由于网卡不知道为什么默认配置为 100M 双工，于是记录以下我是如何在 Linux 下对网卡进行配置的。在 Linux 操作系统中，网卡是连接计算机和网络的关键组件之一。在进行网络通信时，网卡的速度和工作模式将直接影响网络连接的速度和稳定性。本文将介绍如何在 Linux 中查看网卡配置信息，以及如何切换网卡的工作模式。

一些基础知识

网卡的工作原理

网卡是计算机和网络之间的接口设备。它负责将计算机的数据转换成网络数据，以及将网络数据转换成计算机可以处理的数据。网卡的工作原理是通过网络电缆与交换机相连接，将数据包从一个网络节点传输到另一个网络节点。

网卡的速度

网卡的速度是指网卡每秒钟可以传输的数据量，通常用 Mbps（兆位每秒）来表示。在网络通信中，网卡的速度越快，数据传输的速度就越快。千兆以太网（Gigabit Ethernet）是当前常用的高速网络接口，它的速度是 1000Mbps。

全双工和半双工

全双工（Full Duplex）是指通信双方可以同时发送和接收数据。半双工（Half Duplex）是指通信双方不能同时发送和接收数据，只能先发送或先接收。全双工通信比半双工通信更加高效和稳定。

查看网卡配置信息

要查看 Linux 系统中的网卡配置信息，可以使用 ifconfig 命令。该命令可以列出系统中所有的网络接口设备以及它们的配置信息。在终端输入以下命令：

Copy
ifconfig

Copy
输出示例：
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:5eff:fefd:9c84 prefixlen 64 scopeid 0x20
ether 02:42:5e:fd:9c:84 txqueuelen 0 (Ethernet)
RX packets 8622396 bytes 7223439485 (6.7 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9796600 bytes 7777150109 (7.2 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.107 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fd0f:dcc:1d5f:6bf9:c6e5:baa:c32f:193c prefixlen 64 scopeid 0x0<global>
inet6 fd0f:dcc:1d5f:6bf9:2e0:4cff:fe68:1647 prefixlen 64 scopeid 0x0<global>
inet6 fe80::2e0:4cff:fe68:1647 prefixlen 64 scopeid 0x20
inet6 fd0f:dcc:1d5f:6bf9:407d:bba4:14ce:a32c prefixlen 64 scopeid 0x0<global>
inet6 fd0f:dcc:1d5f:6bf9:628d:ad91:55b:1df2 prefixlen 64 scopeid 0x0<global>
inet6 fd0f:dcc:1d5f:6bf9:ea80:92b6:b9dd:8710 prefixlen 64 scopeid 0x0<global>
inet6 fd0f:dcc:1d5f:6bf9:a8ba:d85c:a55e:cc0d prefixlen 64 scopeid 0x0<global>
inet6 fd0f:dcc:1d5f:6bf9:e584:259d:760f:faa3 prefixlen 64 scopeid 0x0<global>
inet6 fd0f:dcc:1d5f:6bf9:e8ec:cda2:3ad7:df4a prefixlen 64 scopeid 0x0<global>
ether 00:e0:4c:68:16:47 txqueuelen 1000 (Ethernet)
RX packets 113354368 bytes 148231729254 (138.0 GiB)
RX errors 0 dropped 256 overruns 0 frame 0
TX packets 60782210 bytes 35517421804 (33.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:e0:4c:68:16:48 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 11573003 bytes 13645776101 (12.7 GiB)

该命令将输出网络接口的配置信息，包括 IP 地址、子网掩码、MAC 地址等。如果要查看某个特定的网卡的配置信息，可以使用以下命令：

Copy
ifconfig enp2s0

其中，enp2s0 为要查看的网卡的名称。该命令将输出 enp2s0 网卡的配置信息。

切换网卡工作模式

在 Linux 系统中，可以使用 ethtool 命令来配置网卡的工作模式。ethtool 是一个用于配置网络接口设备的工具，它可以查看和修改网络接口设备的驱动程序和硬件设置。

步骤一：安装 ethtool

如果系统中没有安装 ethtool 工具，可以通过以下命令来安装：

Copy
#centos
sudo yum install ethtool

#debian,ubuntu
sudo apt install ethtool

步骤二：查看网卡工作模式

要查看当前网卡的工作模式，可以使用以下命令：

Copy
ethtool <网卡设备>
#e.g. ethtool eth0

其中，eth0 为要查看的网卡的名称。该命令将输出网卡的配置信息，包括当前的工作模式。

步骤三：修改网卡工作模式

要修改网卡的工作模式，可以使用以下命令：

Copy
ethtool -s eth0 speed 1000 duplex full

其中，eth0 为要修改的网卡的名称，speed 为网卡的速度，duplex 为网卡的工作模式。这里将网卡的速度设置为 1000Mbps，工作模式设置为全双工模式。完成后，可以使用 ethtool 命令再次查看网卡的配置信息，确认设置已经生效。

补充：ethtool 的详细用法

查看网卡信息

要查看网络接口设备的信息，可以使用以下命令：

Copy
ethtool eth0

其中，eth0 为要查看的网络接口设备的名称。该命令将输出该网络接口设备的详细信息，包括驱动程序的信息、速度、工作模式等。

修改网卡速度

要修改网络接口设备的速度，可以使用以下命令：

Copy
ethtool -s eth0 speed 1000

其中，eth0 为要修改的网络接口设备的名称，speed 为要设置的速度值。这里将网卡的速度设置为 1000Mbps。

修改网卡工作模式

要修改网络接口设备的工作模式，可以使用以下命令：

Copy
ethtool -s eth0 duplex full

其中，eth0 为要修改的网络接口设备的名称，duplex 为要设置的工作模式。这里将网卡的工作模式设置为全双工模式。

打开或关闭自协商

自协商（Auto-Negotiation）是一种自动协商设备速度和双工模式的技术。要打开或关闭自协商，可以使用以下命令：

Copy
ethtool -s eth0 autoneg on/off

其中，eth0 为要修改的网络接口设备的名称，autoneg 为要设置的自协商状态。这里将自协商设置为打开状态。

查看网卡统计信息

要查看网络接口设备的统计信息，可以使用以下命令：

Copy
ethtool -S eth0

其中，eth0 为要查看的网络接口设备的名称。该命令将输出该网络接口设备的统计信息，包括接收和发送的数据包数量、错误数量等。

总结

本文介绍了如何在 Linux 中查看网卡的配置信息，并且详细介绍了如何切换网卡的工作模式。通过使用 ethtool 命令，可以轻松地实现对网卡工作模式的切换。