网络配置/以太网

来自 ArchWiki

本文描述了以太网的细节,通用网络配置请参考网络配置

设备驱动程序

检查状态

udev 应该检测到您的网络接口控制器 (NIC) 并在启动时自动加载必要的内核模块。检查 lspci -v -d ::0200 输出中的 “Ethernet controller” 条目(或类似的条目)。它应该告诉您哪个内核模块包含您的网络设备的驱动程序。例如

$ lspci -v -d ::0200
02:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)
 	...
 	Kernel driver in use: atl1
 	Kernel modules: atl1

接下来,运行 dmesg | grep module_name 作为 root 用户,检查驱动程序是否已加载。例如

# dmesg | grep atl1
...
atl1 0000:02:00.0: eth0 link is up 1000 Mbps full duplex

如果驱动程序已成功加载,请跳过下一节。否则,您需要知道您的特定型号需要哪个模块。

加载模块

在互联网上搜索适合您芯片组的正确模块/驱动程序。一些常见的模块是用于 Realtek 芯片组的 8139too,或用于 SiS 芯片组的 sis900。一旦您知道要使用哪个模块,请尝试手动加载它。如果您收到错误消息说找不到该模块,请首先验证您是否最近升级了内核(请参阅通用故障排除#内核升级后无法使用某些外围设备)。或者,驱动程序可能未包含在 Arch 内核中。您可以在AUR 中搜索模块名称。

如果 udev 在启动期间未自动检测和加载正确的模块,您可以显式地在启动时加载模块

技巧与提示

笔记本电脑的 ifplugd

提示: dhcpcd 提供了相同的功能,开箱即用。

ifplugd 是一个守护进程,当插入网线时,它会自动配置您的以太网设备;当网线拔出时,它会自动取消配置。这对于带有板载网络适配器的笔记本电脑非常有用,因为它只会在真正连接网线时配置接口。另一个用途是当您只需要重启网络但不想重启计算机或从 shell 执行此操作时。

默认情况下,它配置为用于 eth0 设备。此设置和其他设置(如延迟)可以在 /etc/ifplugd/ifplugd.conf 中配置。

注意: netctl 包含 netctl-ifplugd@.service,否则您可以使用 ifplugd 软件包中的 ifplugd@.service。例如,启用 ifplugd@eth0.service

降低链路速度

本文或本节的事实准确性存在争议。

原因: 不清楚在什么硬件和工作负载下测量了约 1W 的功耗差异。还有其他影响以太网网卡的节能方法。(在Talk:Network_configuration/Ethernet 中讨论)

在千兆以太网网卡上强制使用 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 setting not supported 错误,并且链接将不会初始化。
  • 仅应用第一个匹配的文件。默认链接文件 /usr/lib/systemd/network/99-default.link(随 systemd 一起提供)的内容必须包含在内,否则接口可能会配置错误。
  • 要被考虑,文件名应按字母顺序排在默认文件 99-default.link 之前。例如,50-wired.link 可以工作。
  • 此配置仅适用于链路层,并且独立于网络层守护程序,例如 NetworkManagersystemd-networkd
  • Match 部分中,OriginalName= 也可以用于标识接口。

故障排除

在有线调制解调器上更换电脑

一些有线 ISP(例如 Vidéotron)将有线调制解调器配置为仅识别一台客户端 PC,通过其网络接口的 MAC 地址。一旦有线调制解调器学习了第一台与之通信的 PC 或设备的 MAC 地址,它将不会以任何方式响应另一个 MAC 地址。因此,如果您将一台 PC 更换为另一台 PC(或路由器),则新 PC(或路由器)将无法与有线调制解调器一起工作,因为新 PC(或路由器)的 MAC 地址与旧 PC 不同。要重置有线调制解调器,使其识别新 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 芯片组有时无法正常工作。模块是 broadcomtg3,前者需要先加载。

如果您的计算机具有此芯片组,则以下步骤应有所帮助

  • lspci 输出中找到您的网卡
$ lspci -d ::0200
02:00.0 Ethernet controller: Broadcom Corporation NetLink BCM57780 Gigabit Ethernet PCIe (rev 01)
  • 如果您的有线网络在某种程度上无法正常工作,请拔下网线,然后执行以下操作
# modprobe -r tg3
# modprobe broadcom
# modprobe tg3
  • 重新插入网线并检查模块是否成功
# dmesg | grep tg3
  • 如果此过程解决了问题,您可以通过将 broadcomtg3(按此顺序)添加到 MODULES 数组使其永久生效
/etc/mkinitcpio.conf
MODULES=(.. broadcom tg3 ..)
softdep tg3 pre: broadcom
注意: 这些方法可能适用于其他芯片组,例如 BCM57760。

Realtek 无连接 / WOL 问题

使用 Realtek 8168 8169 8101 8111(C) 8156B 芯片组的网卡(独立网卡和板载网卡)的用户可能会注意到一个问题,即网卡在启动时似乎被禁用并且没有 Link 指示灯。这通常可以在也安装了 Windows 的双启动系统中找到。似乎在 Windows 下使用官方 Realtek 驱动程序(日期在 2007 年 5 月之后的任何日期)是原因。这些较新的驱动程序通过在 Windows 关机时禁用网卡来禁用网络唤醒功能,网卡将保持禁用状态,直到下次 Windows 启动。如果 Link 指示灯在 Windows 启动之前保持熄灭状态,您将能够注意到此问题是否影响您;在 Windows 关机期间,Link 指示灯将熄灭。正常操作应该是 Link 指示灯始终亮起,只要系统开启,即使在 POST 期间也是如此。此问题也会影响没有较新驱动程序的其他操作系统(例如 Live CD)。以下是解决此问题的一些方法。

在 Linux 中直接启用网卡

按照网络配置#启用和禁用网络接口启用接口。

回滚/更改 Windows 驱动程序

您可以将 Windows 网卡驱动程序回滚到 Microsoft 提供的驱动程序(如果可用),或者回滚/安装 2007 年 5 月之前的官方 Realtek 驱动程序(可能在硬件随附的 CD 上)。

在 Windows 驱动程序中启用 WOL

可能最好和最快的修复方法是在 Windows 驱动程序中更改此设置。这样,它应该在系统范围内修复,而不仅仅是在 Arch 下修复(例如,Live CD,其他操作系统)。在 Windows 中,在设备管理器下,找到您的 Realtek 网络适配器并双击它。在“高级”选项卡下,将“关机后网络唤醒”更改为“启用”。

注意: 较新的 Realtek Windows 驱动程序(使用 Realtek 8111/8169 LAN Driver v5.708.1030.2008,日期为 2009/01/22,可从 GIGABYTE 获取)可能会以略微不同的方式提及此选项,例如 Shutdown Wake-On-LAN > Enable。似乎将其切换到 Disable 没有效果(您会注意到 Link 指示灯在 Windows 关机时仍然熄灭)。一种相当 Dirty 的解决方法是启动到 Windows 并仅重置系统(执行不正常的重启/关机),从而不给 Windows 驱动程序禁用 LAN 的机会。Link 指示灯将保持亮起,并且 LAN 适配器将在 POST 之后保持可访问状态 - 直到您重新启动回 Windows 并再次正确关闭它为止。

在 BIOS/CMOS 中启用 LAN 启动 ROM

似乎在 BIOS/CMOS 中设置 Integrated Peripherals > Onboard LAN Boot ROM > Enabled 可以在系统启动时重新激活 Realtek LAN 芯片,尽管 Windows 驱动程序在操作系统关机时禁用了它。

注意: 这已在 GIGABYTE GA-G31M-ES2L 主板上多次测试,BIOS 版本为 F8,发布于 2009/02/05。

禁用 USB 自动挂起

当使用节能功能,特别是 USB 自动挂起时,设备可能无法正确加载,从而导致 NO-CARRIER 状态(使用 RT8156B 测试),并且没有建立链接。

要解决此问题,请参阅电源管理#USB 自动挂起,了解有关手动将设备列入 USB 自动挂起黑名单的详细信息,或者如果您使用 TLP,请参阅 TLP 文档中的 USB 设备;然后重新连接设备。

Realtek RTL8111/8168B

# lspci -d ::0200
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)

适配器应由 r8169 模块识别。但是,对于某些芯片修订版,连接可能会一直断开和连接。在这种情况下,应使用替代的 r8168AUR 以获得可靠的连接。 黑名单 r8169,如果 r8168AUR 没有被 udev 自动加载,您可以显式地在启动时加载模块

本文或本节的事实准确性存在争议。

原因: “某些修订版”,没有证据表明驱动程序是原因,而不是例如配置错误的 DNS 服务器(在 Talk:Network_configuration/Ethernet 中讨论)

此适配器的某些修订版的驱动程序中的另一个缺陷是 IPv6 支持不佳。如果您遇到诸如网页挂起和速度缓慢等问题,IPv6#禁用功能可能会有所帮助。

使用 Realtek 8111/8168/8411 的技嘉主板

对于诸如 Gigabyte GA-990FXA-UD3 之类的主板,在关闭 IOMMU 的情况下启动(这可能是默认设置)将导致网络接口不可靠,经常无法连接或连接但没有吞吐量。这将适用于板载网卡和机箱中的任何其他 pci 网卡,因为 IOMMU 设置会影响主板上的整个网络接口。启用 IOMMU 并使用安装介质启动将在一秒钟内抛出 AMD I-10/xhci 页面错误,但随后正常启动,从而获得功能齐全的板载网卡(即使使用 r8169 模块)。

在为您的安装配置启动过程时,添加 iommu=soft 作为内核参数,以消除启动时的错误消息并恢复 USB3.0 功能。

使用 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 -2Tx status -71 错误。可以通过设置 USB_QUIRK_NO_LPM 来修复此问题。

可以通过添加内核参数 usbcore.quirks=2357:0601:k 在启动时设置 quirk。也可以通过 sysfs 立即设置 quirk

# echo 2357:0601:k > /sys/module/usbcore/parameters/quirks

请注意,2357:0601 应替换为您自己的设备的 USB ID,该 ID 可以使用 lsusb 找到。