跳转至内容

网络配置/以太网

来自 ArchWiki

本文描述 以太网 的具体内容,一般网络配置请参阅 网络配置

设备驱动程序

检查状态

udev 应在启动时检测到您的 网络接口控制器 (NIC) 并自动加载必要的 内核模块。请检查 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 模块名称 来检查驱动程序是否已加载。例如:

# 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
...

如果驱动程序成功加载,则跳过下一节。否则,您需要找出特定型号所需的模块。

加载模块

在互联网上搜索您芯片组对应的正确模块/驱动程序。常见的模块有: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 的功率差异是在何种硬件和工作负载下测得的。还有其他 节能 方法会影响以太网网卡。(讨论请参见 网络配置/以太网讨论页

在大多数网络工作负载下,在千兆以太网网卡上强制执行 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 可以使用。
  • 此配置仅适用于链路级别,与 NetworkManagersystemd-networkd 等网络级别守护进程无关。
  • Match 部分,也可以使用 OriginalName= 来标识接口。

故障排除

在电缆调制解调器(Cable Modem)上更换电脑

一些有线互联网服务提供商(例如 Vidéotron)将电缆调制解调器配置为仅通过其网络接口的 MAC 地址识别一台客户端电脑。一旦电缆调制解调器获知了与其通信的第一台 PC 或设备的 MAC 地址,它就不会以任何方式响应其他 MAC 地址。因此,如果您将一台 PC 更换为另一台(或换成路由器),新 PC(或路由器)将无法与调制解调器正常工作,因为新设备的 MAC 地址与旧的不同。要重置电缆调制解调器以便其识别新 PC,您必须将电缆调制解调器断电后再接通电源。一旦调制解调器重启并完全上线(指示灯状态稳定),重启新连接的 PC,以便它发起 DHCP 请求,或者手动要求其获取新的 DHCP 租约。

如果此方法无效,您需要克隆原机器的 MAC 地址。另请参阅 MAC 地址欺骗

显式拥塞通知 (ECN)

显式拥塞通知 (ECN) 可能会导致旧的/劣质路由器出现流量问题 [1]。自 systemd 240 起,对于请求它的传入连接,ECN 默认启用(内核默认值)。

要为传入和传出连接都启用 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 -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
  • 如果此过程解决了问题,您可以通过将 broadcomtg3(按此顺序)添加到 MODULES 数组中使其永久生效:
/etc/mkinitcpio.conf
MODULES=(.. broadcom tg3 ..)
softdep tg3 pre: broadcom
注意: 这些方法可能适用于其他芯片组,例如 BCM57760。

使用 Realtek 8168, 8169, 8101, 8111(C), 8156B 系列网卡(独立网卡或板载网卡)的用户可能会注意到启动时网卡似乎被禁用且没有链路灯(Link light)。这种情况通常出现在安装了 Windows 的双启动系统中。原因似乎是在 Windows 下使用了官方 Realtek 驱动程序(2007 年 5 月之后)。这些较新的驱动程序在 Windows 关闭时通过禁用网卡来关闭“网络唤醒”(WOL) 功能,直到下一次 Windows 启动时才会重新启用。如果直到 Windows 启动前链路灯一直熄灭,则说明您正受此问题影响;在 Windows 关机期间,链路灯会熄灭。正常运行应为:只要系统处于开启状态(即使在 POST 期间),链路灯就应一直亮着。此问题也会影响没有较新驱动程序的其他操作系统(例如 Live CD)。以下是解决此问题的几种方法。

直接在 Linux 中启用网卡

遵循 网络配置#启用和禁用网络接口 来启用接口。

回滚/更改 Windows 驱动程序

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

在 Windows 驱动程序中启用 WOL

最快且最好的修复方法可能是在 Windows 驱动程序中更改此设置。这样它应该是系统级的修复,而不仅是在 Arch 下生效(例如 Live CD、其他操作系统)。在 Windows 的“设备管理器”中,找到您的 Realtek 网络适配器并双击它。在“高级”选项卡下,将“Wake-on-LAN after shutdown”更改为“Enable”。

注意: 较新的 Realtek Windows 驱动程序(已在 Realtek 8111/8169 LAN Driver v5.708.1030.2008 上测试,日期为 2009/01/22,可从技嘉官网获得)对该选项的称呼略有不同,例如 Shutdown Wake-On-LAN > Enable。将该选项设为 Disable 似乎没有效果(您会注意到链路灯在 Windows 关机时仍然会熄灭)。一个比较粗暴的临时解决方法是进入 Windows 后直接重置系统(执行不正常的重启/关机),从而不让 Windows 驱动程序有机会禁用 LAN。链路灯将保持常亮,LAN 适配器在 POST 后仍可访问,直到您下次正常关闭 Windows 为止。

在 BIOS/CMOS 中启用 LAN Boot ROM

事实证明,在 BIOS/CMOS 中设置 Integrated Peripherals > Onboard LAN Boot ROM > Enabled 会在系统启动时重新激活 Realtek LAN 芯片,尽管 Windows 驱动程序会在操作系统关机时将其禁用。

注意: 此方法已在技嘉 GA-G31M-ES2L 主板上多次测试,BIOS 版本为 2009/02/05 发布的 F8。

禁用 USB 自动挂起

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

要解决此问题,请参阅 电源管理#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 以获得可靠的连接。r8169 列入黑名单,如果 r8168AUR 未能被 udev 自动加载,您可以显式地 在启动时加载该模块

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

原因: “某些版本”的说法缺乏证据证明是驱动程序导致,也可能是 DNS 服务器配置不当(讨论请参见 网络配置/以太网讨论页

该适配器的某些版本的驱动程序另一个缺陷是 IPv6 支持较差。如果您遇到网页加载缓慢或卡顿等问题,IPv6#禁用功能 可能有帮助。

配备 Realtek 8111/8168/8411 的技嘉主板

在诸如 Gigabyte GA-990FXA-UD3 之类的主板上,在关闭 IOMMU 的情况下启动(这可能是默认设置)会导致网络接口变得不稳定,经常连接失败或虽已连接但无法传输数据。这适用于板载网卡以及机箱内的任何其他 PCI 网卡,因为 IOMMU 设置会影响板载的所有网络接口。启用 IOMMU 并使用安装介质启动会瞬间抛出 AMD I-10/xhci 页面错误,但随后会正常启动,从而获得完全可用的板载网卡(即使使用 r8169 模块)。

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

配备 Realtek 8111/8168/8411 的微星主板

在诸如“MicroStar B450M MORTAR TITANIUM”之类的主板上,拔出/插入以太网线或重启路由器的 DHCP 服务器会导致 r8169 进入降速(downshifted)状态,将 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

在这种情况下,重启适配器(将其先设置为 down,再设置为 up)。例如:

# 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 设置:

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

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

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.