网络配置/以太网
本文介绍 以太网 的具体配置,通用网络配置请参阅 网络配置。
设备驱动程序
检查状态
udev 应该能检测到您的 网卡,并在启动时自动加载所需的 内核模块。请检查 lspci -knnd ::0200 的输出(其中 ::0200 指的是“网络控制器” PCI 设备类下的“以太网控制器”子类) 。它应该会告诉您哪个内核模块包含您网络设备的驱动程序。例如:
$ lspci -knnd ::0200
01:00.1 Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01) Subsystem: Intel Corporation Ethernet Server Adapter X520-2 [8086:000c] Kernel driver in use: ixgbe Kernel modules: ixgbe
接下来,以 root 权限运行 dmesg | grep module_name 来检查驱动程序是否已加载。例如:
# dmesg | grep ixgbe
... ixgbe: Intel(R) 10 Gigabit PCI Express Network Driver ... ixgbe 0000:01:00.1: enabling device (0000 -> 0002) ... ixgbe 0000:01:00.1: Intel(R) 10 Gigabit Network Connection ...
如果驱动程序已成功加载,则可以跳过下一节。否则,您需要知道您的特定型号所需的模块。
加载模块
在网上搜索适用于您芯片组的正确模块/驱动程序。一些常见的模块是 8139too(适用于 Realtek 芯片组的网卡)或 sis900(适用于 SiS 芯片组的网卡)。一旦您知道要使用哪个模块,请尝试 手动加载。如果您收到模块未找到的错误,请先检查您是否最近升级了内核(请参阅 General troubleshooting#内核升级后无法使用某些外围设备)。或者,驱动程序可能未包含在 Arch 内核中。您可以搜索 AUR 获取模块名称。
如果 udev 在启动过程中没有自动检测和加载合适的模块,您可以 在启动时显式加载模块。
技巧与提示
笔记本电脑的 ifplugd
ifplugd 是一个守护进程,它会在插入网线时自动配置您的以太网设备,并在拔出网线时自动取消配置。这对于带有板载网卡的笔记本电脑非常有用,因为它只在真正连接网线时才配置接口。另一个用途是当您只需要重启网络但不想重启计算机或从 shell 中执行此操作时。
默认情况下,它配置为适用于 eth0 设备。此设置以及延迟等其他设置可以在 /etc/ifplugd/ifplugd.conf 中配置。
netctl-ifplugd@.service,否则您可以从 ifplugd 包中使用 ifplugd@.service。例如,启用 ifplugd@eth0.service。降低链路速度
在千兆以太网网卡上强制使用 100Mbps 或 10Mbps 全双工速度可以在大多数网络工作负载下节省大量电力(约 1W)。这也能降低组件温度。
在每次启动时使用 ethtool -s eth0 autoneg off speed 100 并不方便。
可以通过 systemd.link 文件 在启动时初始化较低的以太网网卡速度。实际设置由 net_setup_link udev 内置命令执行。将 AutoNegotiation 选项添加到网络链路文件中:
/etc/systemd/network/50-wired.link
[Match] MACAddress=aa:bb:cc:dd:ee:ff [Link] NamePolicy=kernel database onboard slot path AutoNegotiation=no Duplex=full BitsPerSecond=100M
有关更多信息,请参阅 systemd.link(5)。
AutoNegotiation必须设置为no,否则会出现不支持的 Speed/Duplex 设置错误,并且链路无法初始化。- 只有第一个匹配的文件才会被应用。必须包含 systemd 附带的默认链接文件
/usr/lib/systemd/network/99-default.link的内容,否则接口可能会配置错误。 - 要被考虑,文件名在字母顺序上必须早于默认的
99-default.link。例如50-wired.link可以使用。 - 此配置仅适用于链路级别,与 NetworkManager 或 systemd-networkd 等网络级别守护进程无关。
- 在
Match部分,也可以使用OriginalName=来标识接口。
故障排除
更换网线调制解调器上的电脑
一些有线 ISP(例如 Vidéotron)配置网线调制解调器,使其只识别一台客户端 PC,通过其网络接口的 MAC 地址。一旦网线调制解调器学习到第一台与之通信的 PC 或设备的 MAC 地址,它将不再响应任何其他 MAC 地址。因此,如果您更换一台 PC(或路由器),新的 PC(或路由器)将无法与网线调制解调器一起工作,因为新的 PC(或路由器)的 MAC 地址与旧的 MAC 地址不同。要重置网线调制解调器使其识别新 PC,您必须先关闭再重新开启网线调制解调器。一旦网线调制解调器重新启动并完全在线(指示灯稳定下来),请重新启动新连接的 PC,使其发出 DHCP 请求,或手动使其请求新的 DHCP 租约。
如果此方法不起作用,您需要克隆原始计算机的 MAC 地址。另请参阅 MAC 地址欺骗。
显式拥塞通知
显式拥塞通知 (ECN) 可能会导致旧的/糟糕的路由器出现流量问题 [1]。截至 systemd 240,它已为请求它的传入连接启用(内核默认)。
为传入和传出连接启用 ECN:
# sysctl net.ipv4.tcp_ecn=1
仅当传入连接请求时启用 ECN(比较安全,内核默认):
# sysctl net.ipv4.tcp_ecn=2
完全禁用 ECN(例如,以测试 ECN 是否导致问题):
# sysctl net.ipv4.tcp_ecn=0
另请参阅 内核文档。
Broadcom BCM57780
此 Broadcom 芯片组有时行为不佳,除非您指定加载模块的顺序。模块是 broadcom 和 tg3,前者需要先加载。
如果您的计算机有此芯片组,这些步骤应该会有帮助:
- 在 lspci 输出中找到您的网卡
$ lspci -nnd ::0200
02:00.0 Ethernet controller [0200]: Broadcom Corporation NetLink BCM57780 Gigabit Ethernet PCIe [14e4:1692] (rev 01)
- 如果您的有线网络以某种方式不起作用,请拔下您的网线然后执行以下操作:
# modprobe -r tg3 # modprobe broadcom # modprobe tg3
- 重新插入网线,并使用以下命令检查模块是否成功:
# dmesg | grep tg3
- 如果此过程解决了问题,您可以将其永久化,方法是将
broadcom和tg3(按此顺序)添加到MODULES数组中:
/etc/mkinitcpio.conf
MODULES=(.. broadcom tg3 ..)
- 重新生成 initramfs
- 或者,您可以创建一个
/etc/modprobe.d/broadcom.conf文件:
softdep tg3 pre: broadcom
Realtek 无链路/WOL 问题
使用 Realtek 8168 8169 8101 8111(C) 8156B 系列网卡(卡和板载)的用户可能会遇到一个问题,即网卡在启动时似乎被禁用,并且没有链路指示灯。这通常在安装了 Windows 的双启动系统上出现。似乎 Windows 下使用官方 Realtek 驱动程序(日期晚于 2007 年 5 月)是导致此问题的原因。这些较新的驱动程序会在 Windows 关机时禁用网卡,从而禁用唤醒功能 (Wake-On-LAN),直到下次 Windows 启动。如果链路指示灯在 Windows 启动前一直熄灭,您就能注意到这个问题是否影响了您;在 Windows 关机期间,链路指示灯会熄灭。正常操作应该是,只要系统开机,即使在 POST 期间,链路指示灯也应始终亮着。这个问题也会影响没有较新驱动程序(例如 Live CD)的其他操作系统。以下是一些解决此问题的方法。
直接在 Linux 中启用网卡
请按照 Network configuration#启用和禁用网络接口 中的说明启用接口。
回滚/更改 Windows 驱动程序
您可以将 Windows 网卡驱动程序回滚到 Microsoft 提供的驱动程序(如果可用),或者回滚/安装 2007 年 5 月之前的官方 Realtek 驱动程序(可能在您硬件附带的光盘上)。
在 Windows 驱动程序中启用 WOL
这可能是最好、最快的修复方法,即更改 Windows 驱动程序中的此设置。这样它应该能在整个系统范围内得到修复,而不仅仅是在 Arch 下(例如 Live CD、其他操作系统)。在 Windows 中,打开设备管理器,找到您的 Realtek 网卡并双击它。在“高级”选项卡下,将“关机后唤醒 (Wake-on-LAN after shutdown)”更改为“启用”。
Disable 没有效果(您会注意到链路指示灯在 Windows 关机时仍然会熄灭)。一个比较粗糙的解决方法是启动到 Windows 并直接重置系统(执行非正常重启/关机),这样就不会给 Windows 驱动程序禁用 LAN 的机会。链路指示灯将保持亮起,并且在 POST 后仍可访问 LAN 适配器——直到您再次启动到 Windows 并正常关机为止。在 BIOS/CMOS 中启用 LAN 启动 ROM
看起来,在 BIOS/CMOS 中将 *Integrated Peripherals > Onboard LAN Boot ROM > Enabled* 设置为启用,可以在系统启动时重新激活 Realtek LAN 芯片,尽管 Windows 驱动程序会在 OS 关机时禁用它。
禁用 USB 自动挂起
当使用省电功能,特别是 USB 自动挂起时,设备可能无法正确加载,导致 NO-CARRIER 状态(已在 RT8156B 上测试),并且没有建立链路。
要解决此问题,请参阅 Power management#USB 自动挂起 以了解如何手动将设备列入 USB 自动挂起黑名单,或者如果您正在使用 TLP,请参阅 TLP 关于 USB 设备 的文档;然后重新连接设备。
Realtek RTL8111/8168B
# lspci -nnd ::0200
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 02)
该适配器应该能被 r8169 模块识别。但是,对于某些芯片修订版本,连接可能会一直断断续续。在这种情况下,应使用替代的 r8168AUR 来获得可靠的连接。如果 r8168AUR 未被 udev 自动加载,请 将 r8169 加入黑名单,您也可以 在启动时显式加载模块。
此适配器某些修订版本的驱动程序中的另一个故障是 IPv6 支持不佳。如果您遇到网页挂起和速度缓慢等问题,IPv6#禁用功能 可能会有所帮助。
配备 Realtek 8111/8168/8411 的 Gigabyte 主板
对于像 Gigabyte GA-990FXA-UD3 这样的主板,禁用 IOMMU(可能是默认设置)启动会导致网络接口不稳定,通常无法连接或连接后没有吞吐量。这会影响板载网卡以及机箱中的任何其他 PCI 网卡,因为 IOMMU 设置会影响整个主板上的网络接口。启用 IOMMU 并使用安装介质启动时,会短暂出现 AMD I-10/xhci 页面错误,但随后会正常启动,即使使用 r8169 模块也能使板载网卡完全正常工作。
在配置安装过程时,将 iommu=soft 添加为 内核参数,以消除启动时的错误消息并恢复 USB3.0 功能。
MicroStar 主板配备 Realtek 8111/8168/8411
对于像“MicroStar B450M MORTAR TITANIUM”这样的主板,拔插网线或重启路由器的 DHCP 服务器会导致 r8169 进入降速状态,并将 1000 Mbit/s 的以太网速度降至 100 Mbit/s。内核日志会显示:
# dmesg | grep r8169
Generic FE-GE Realtek PHY r8169-2200:00: Downshift occurred from negotiated speed 1Gbps to actual speed 100Mbps, check cabling! r8169 0000:22:00.0 enp34s0: Link is Up - 100Mbps/Full (downshifted) - flow control rx/tx
在这种情况下,请重启适配器(将其禁用再启用)。例如:
# ip link set dev enp34s0 down # ip link set dev enp34s0 up
Realtek RTL8153 Tx 超时
带有以下控制器的 USB 网络适配器经常会挂起并停止传输,直到其链路被重置。这伴随着内核日志中的 Tx status -2 或 Tx status -71 错误。可以通过设置 USB_QUIRK_NO_LPM 来解决此问题。
可以通过在启动时添加 内核参数 usbcore.quirks=2357:0601:k 来设置此 quirk。您也可以通过 sysfs 立即设置:
# echo 2357:0601:k > /sys/module/usbcore/parameters/quirks
请注意,2357:0601 应替换为您自己的设备的 USB ID,您可以使用 lsusb 命令找到它。