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

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 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 软件包包含了 netctl-ifplugd@.service,否则你可以使用 ifplugd 软件包中的 ifplugd@.service。例如启用 ifplugd@eth0.service

疑难解答

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

许多有线网络运营商(例如加拿大最大的有线电视公司 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 解决。

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 功能。