導言#
前幾天在對 zimaboard 內網測速時發現網速一直卡在 100Mbps,在多次 debug 後發現是由於網卡不知道為什麼默認配置為 100M 雙工,於是記錄以下我是如何在 Linux 下對網卡進行配置的。在 Linux 操作系統中,網卡是連接計算機和網絡的關鍵組件之一。在進行網絡通信時,網卡的速度和工作模式將直接影響網絡連接的速度和穩定性。本文將介紹如何在 Linux 中查看網卡配置信息,以及如何切換網卡的工作模式。
一些基礎知識#
網卡的工作原理#
網卡是計算機和網絡之間的接口設備。它負責將計算機的數據轉換成網絡數據,以及將網絡數據轉換成計算機可以處理的數據。網卡的工作原理是通過網絡電纜與交換機相連接,將數據包從一個網絡節點傳輸到另一個網絡節點。
網卡的速度#
網卡的速度是指網卡每秒鐘可以傳輸的數據量,通常用 Mbps(兆位每秒)來表示。在網絡通信中,網卡的速度越快,數據傳輸的速度就越快。千兆以太網(Gigabit Ethernet)是當前常用的高速網絡接口,它的速度是 1000Mbps。
全雙工和半雙工#
全雙工(Full Duplex)是指通信雙方可以同時發送和接收數據。半雙工(Half Duplex)是指通信雙方不能同時發送和接收數據,只能先發送或先接收。全雙工通信比半雙工通信更加高效和穩定。
查看網卡配置信息#
要查看 Linux 系統中的網卡配置信息,可以使用 ifconfig 命令。該命令可以列出系統中所有的網絡接口設備以及它們的配置信息。在終端輸入以下命令:
ifconfig
輸出示例:
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<link>
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<link>
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 地址等。如果要查看某個特定的網卡的配置信息,可以使用以下命令:
ifconfig enp2s0
其中,enp2s0 為要查看的網卡的名稱。該命令將輸出 enp2s0 網卡的配置信息。
切換網卡工作模式#
在 Linux 系統中,可以使用 ethtool 命令來配置網卡的工作模式。ethtool 是一個用於配置網絡接口設備的工具,它可以查看和修改網絡接口設備的驅動程序和硬件設置。
步驟一:安裝 ethtool#
如果系統中沒有安裝 ethtool 工具,可以通過以下命令來安裝:
#centos
sudo yum install ethtool
#debian,ubuntu
sudo apt install ethtool
步驟二:查看網卡工作模式#
要查看當前網卡的工作模式,可以使用以下命令:
ethtool <網卡設備>
#e.g. ethtool eth0
其中,eth0 為要查看的網卡的名稱。該命令將輸出網卡的配置信息,包括當前的工作模式。
步驟三:修改網卡工作模式#
要修改網卡的工作模式,可以使用以下命令:
ethtool -s eth0 speed 1000 duplex full
其中,eth0 為要修改的網卡的名稱,speed 為網卡的速度,duplex 為網卡的工作模式。這裡將網卡的速度設置為 1000Mbps,工作模式設置為全雙工模式。完成後,可以使用 ethtool 命令再次查看網卡的配置信息,確認設置已經生效。
補充:ethtool 的詳細用法#
查看網卡信息#
要查看網絡接口設備的信息,可以使用以下命令:
ethtool eth0
其中,eth0 為要查看的網絡接口設備的名稱。該命令將輸出該網絡接口設備的詳細信息,包括驅動程序的信息、速度、工作模式等。
修改網卡速度#
要修改網絡接口設備的速度,可以使用以下命令:
ethtool -s eth0 speed 1000
其中,eth0 為要修改的網絡接口設備的名稱,speed 為要設置的速度值。這裡將網卡的速度設置為 1000Mbps。
修改網卡工作模式#
要修改網絡接口設備的工作模式,可以使用以下命令:
ethtool -s eth0 duplex full
其中,eth0 為要修改的網絡接口設備的名稱,duplex 為要設置的工作模式。這裡將網卡的工作模式設置為全雙工模式。
打開或關閉自協商#
自協商(Auto-Negotiation)是一種自動協商設備速度和雙工模式的技術。要打開或關閉自協商,可以使用以下命令:
ethtool -s eth0 autoneg on/off
其中,eth0 為要修改的網絡接口設備的名稱,autoneg 為要設置的自協商狀態。這裡將自協商設置為打開狀態。
查看網卡統計信息#
要查看網絡接口設備的統計信息,可以使用以下命令:
ethtool -S eth0
其中,eth0 為要查看的網絡接口設備的名稱。該命令將輸出該網絡接口設備的統計信息,包括接收和發送的數據包數量、錯誤數量等。
總結#
本文介紹了如何在 Linux 中查看網卡的配置信息,並且詳細介紹了如何切換網卡的工作模式。通過使用 ethtool 命令,可以輕鬆地實現對網卡工作模式的切換。