Network configuration (简体中文)/Ethernet (简体中文)

From ArchWiki
翻译状态:本文是 Network configuration/Ethernet翻译。上次翻译日期:2020-02-04。如果英文版本有所更改,则您可以帮助同步翻译。

本页描述了以太网的详细信息,一般的网络配置则为网络配置所涵盖。

设备驱动

检测驱动状态

udev 会探测你的网卡(网络接口控制器)并在启动时自动载入必要的内核模块。检查 lspci -v 输出中“Ethernet controller”(或者类似的)条目,它会告诉你哪个内核模块包含了你的网络设备的驱动程序。例如:

$ lspci -v
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 来检查是否已经加载了驱动。例如:

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

如果驱动加载成功,就跳过下一节,否则,你需要知道你特定型号的网络设备需要哪一个模块。

加载设备模块

在互联网上搜索你的芯片组所需的模块/驱动。常见的驱动模块有用于 Realtek 芯片组网卡的 8139too,或者用于 Sis 芯片组网卡的 sis900。知道要使用什么模块之后,尝试手动加载它。如果你碰到了未找到模块的错误,可能驱动没有包括在 Arch 的内核中。你可以在 AUR 中搜索模块名称。

如果 udev 在引导时不能自动侦测和加载适当的模块,参见 Kernel module (简体中文)#使用systemd自动加载模块

提示与技巧

用于笔记本的 ifplugd

提示: dhcpcd 也提供了同样的功能。

ifplugd 是一个守护进程,当网络适配器插入的时候自动配置网络,当网络断开的时候自动取消配置。这对于笔记本电脑这样的使用移动式的网络适配器的情况很有用,因为他只会在网络实际接入的时候才会配置网络接口。另外一个可能会用得着它的情况是,你需要重启你的网络,可是你既不想重启电脑也不想使用 shell 进行配置。

在默认情况下,它会工作于 eth0 设备。要更改这个设置(以及更改其他设置,比如等待时间),可以编辑 /etc/ifplugd/ifplugd.conf

注意: netctl 软件包包含了 [email protected],否则你可以使用 ifplugd 软件包中的 [email protected]。例如启用 [email protected]

疑难解答

更换了连接有线调制解调器的计算机

许多有线网络运营商(例如加拿大最大的有线电视公司 Vidéotron,还有中国大陆的有线电视宽带公司)都使用记录网卡 MAC 地址的方法将有线调制解调器配置为只能一台计算机使用。一旦调制解调器获得第一台连接它的设备的 MAC 地址,就不会响应任何其它 MAC 地址。这样如果你换了台计算机(或者路由器),由于新计算机(或者路由器)的 MAC 地址和旧的不同,就没法连接调制解调器了。这时候必须复位调制解调器以使它重新进行识别。 你得关闭调制解调器电源,然后重新打开。一旦调制解调器重启并再次登录完毕(指示灯熄灭),重启新连接的设备以使它发起一个 DHCP 请求,或者手动发起 DHCP 请求。

如果这个方法不能奏效,你需要克隆原来机器上的 MAC 地址。参见 MAC 地址伪装

显式拥塞通知

显式拥塞通知(Explicit Congestion Notification, ECN) 可能在老旧/劣质的路由器上造成网络拥堵问题[1]。从 systemd 239 开始,它同时为入站流量和出站流量启用。

设置仅当传入连接请求时才启用 ECN(内核默认设置,相当安全):

# sysctl net.ipv4.tcp_ecn=2

设置完全禁用 ECN(例如,测试 ECN 是否引起问题):

# sysctl net.ipv4.tcp_ecn=0

参见内核文档

Realtek 没有连接/网络唤醒故障

使用基于 Realtek 8168 8169 8101 8111(C) 芯片网卡(独立网卡和板载)的用户也许会发现这个故障,启动时网卡不可用,网卡上的连接指示灯不亮。这通常会发生在安装了 Windows 的双启动系统上。在 Windows 下使用 Realtek 官方驱动(2007 年 5 月后的版本)会引发故障。新驱动通过在 Windows 关机时禁止网卡来关闭网络唤醒功能,直到下一次 Windows 启动前网卡都会一直不可用。如果是这个原因影响的你,你会观察到连接指示灯在 Windows 启动前一直熄灭,在 Windows 关机过程中也会熄灭。正常情况应该是只要计算机一直开着,即使在 POST 加电过程中,连接指示灯也应该一直亮着。这个故障也会影响其它没有安装新驱动的操作系统(例如各种 Live CD)。这里给出几种解决方案:

在 Linux 中启用网卡

参考 Network configuration (简体中文)#启用和禁用网络接口 来启用网卡。

还原/变更 Windows 驱动

你可以将你的 Windows 网卡驱动还原回微软自带的驱动(如果有的话),或者安装 2007 年 5 月份以前的 Realtek 官方驱动(也许在网卡附带的 CD 上)。

启动 Windows 驱动里的网络唤醒功能

也许最好最快的修复方法就是改变 Windows 驱动里的这个设置。这个方法可以解决很多其它操作系统而不仅仅是 Arch 的麻烦。在 Windows 的设备管理器里,找到你的 Realtek 网卡,双击它。在“高级”标签页中,开启“wake-on-lan after shutdown”选项。

例如在 Windows XP 里

 右键点击我的电脑
 -->管理
   -->设备管理器
     -->网络适配器
       -->双击 Realtek ...
         --> 高级标签页
           --> Wake-On-Lan After Shutdown
             --> 启用。
注意: 新的 Realtek Windows 驱动程序中(已测试了 2009/01/22 GIGABYTE 上的 Realtek 8111/8169 LAN Driver v5.708.1030.2008)可能与这里的选项稍微有点不同,像 Shutdown Wake-On-LAN > Enable。似乎把它切换成 Disable 没有效果(你仍然可以在Windows关闭时看到连接指示灯熄灭)。一个比较不好的解决方法是引导 Windows,然后立即重启系统(执行非正常重启/关机),不给予 Windows 驱动程序关闭 LAN 的机会。连接指示灯将会保持亮着,网卡也会在 POST 之后保持可用——直到你再次进入 Windows 并正常关机。

在 BIOS/CMOS 中启用 LAN Boot ROM

尽管 Windows 驱动程序在系统关闭时禁用了它,但在 BIOS/CMOS 中设置 Integrated Peripherals --> Onboard LAN Boot ROM --> Enabled,系统启动时会重新激活 Realtek LAN 芯片。

注意: 这个方法多次在 GIGABYTE GA-G31M-ES2L 主板,2009/02/05 发布的 BIOS 版本 F8 上测试成功。你的情况可能不同。

Atheros 芯片组找不到网卡

有些用户的 Atheros 芯片无法正常工作 (至少在 2014 年 2 月的安装镜像中)。可以通过安装 backports-patchedAUR[损坏的链接:package not found] 解决。

Broadcom BCM57780

这个 Broadcom 芯片只有你指定模块的加载顺序后才能正常工作。这些模块是 broadcomtg3,前者需要首先加载。

如果你的电脑有这个芯片,这些步骤应该有用:

  • lspci 的输出中找到你的网卡:
$ lspci | grep Ethernet
02:00.0 Ethernet controller: Broadcom Corporation NetLink BCM57780 Gigabit Ethernet PCIe (rev 01)
  • 如果你的有线网络不能工作,尝试断开网线,然后以 root 权限实施以下步骤:
# modprobe -r tg3
# modprobe broadcom
# modprobe tg3
  • 插回网线,检查模块是否成功:
# dmesg | grep tg3
  • 如果现在你的故障解决了,你可以把 broadcomtg3 (以此顺序)加入到 /etc/mkinitcpio.confMODULES 一行,使得更改持久化:
/etc/mkinitcpio.conf
MODULES=(.. broadcom tg3 ..)
softdep tg3 pre: broadcom
注意: 这些方法可能也适用于其它芯片,例如 BCM57760。

Realtek RTL8111/8168B

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

这个网络适配器应被内核的r8169模块识别。 但是,对于某些芯片版本,网络连接可能一直是断开状态。 可以在 official repositories中找到r8168 作为r8169的替代品,在这种情况下,其应该可以实现稳定可靠的连接。 将r8169列入黑名单Blacklist,如果 udev没有自动加载r8168 ,请参见内核模块 Kernel module (简体中文)#使用systemd自动加载模块

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: "某些修订版本:", 不是驱动程序导致的问题,而是DNS服务器没有正确配置 (Discuss in Talk:Network configuration (简体中文)/Ethernet (简体中文))

对于此网络适配器的某些修订版,驱动程序中的另一个故障是IPv6支持不佳。 如果遇到诸如网页挂起和速度慢之类的问题,禁用IPv6功能 IPv6#Disable functionality可能会有所帮助。

配有 Realtek 8111/8168/8411 的 Gigabyte 主板

使用诸如 Gigabyte GA-990FXA-UD3 这样的主板,在关闭 IOMMU 的配置下启动(可能是默认设置)将会使网络连接出问题,通常是无法连接或连接上了但没有流量。这适用于板载网卡和小节标题中的任何其他 pci-NIC,因为 IOMMU 设置会影响主板上的整个网络接口。启用 IOMMU 并使用安装介质引导会在一秒钟内引发 AMD I-10/xhci 页面错误,但随后会正常启动,板载网卡完全正常运行(即使使用 r8169 模块)。在配置安装引导过程时,添加 iommu=soft 作为内核参数,以消除引导时的错误信息,并恢复 USB3.0 功能。