Arch Linux 网络相关命令
NetworkManager
NetworkManager (NM) 是现代 Linux 桌面网络管理的基石。它是一个系统后台服务 (daemon),因此可以通过
1 | systemctl status NetworkManager |
查看工作状态。
NetworkManager 的核心工作是让网络“自动工作”,它会自动检测硬件(“发现了一张 Wi-Fi 网卡”、“一根网线插进来了”),自动扫描,自动连接到你配置好的网络,并自动从 DHCP 服务器获取 IP、网关和 DNS。
nmcli
NetworkManager 的命令行工具。
WiFi 连接命令
下述常用命令能够在图形界面抽风的时候解决 WiFi 连接的问题。
1 | nmcli device status # 列出所有网络硬件(网卡)及其状态 |
除此之外还有开启和关闭网络的命令:
1 | # 彻底关闭/开启 NetworkManager 的网络管理(总开关) |
连接信息查看
运行
1 | nmcli device show <device> |
可以得到类似下文的输出,基本包含了连接的所有信息:
1 | nmcli device show wlp0s20f3 |
如果连接的是以太网,还会有一个 GENERAL.SPEED 字段表示协商速率;对于 WiFi 来说,nmcli device wifi list 中会给出各个 WiFi 的一个估算速率。
如果想要知道 IP 地址的获取方式(自动还是手动),可以运行
1 | nmcli connection show <SSID> | grep method |
输出信息类似下文:
1 | nmcli connection show SJTU | grep method |
图形界面
nm-connection-editor 和 gnome-control-center 等都是常用的图形界面,这些提供的都是前台的交互,实际的工作依然由 NetworkManager 执行。
iproute2
iproute2 是现代 Linux 内核中用于网络配置的核心工具包。它取代了上一代的老工具(统称为 net-tools),比如 ifconfig, route, arp, netstat 等。
ip 命令
ip link (管理网络设备)
这组命令用于查看和管理你的网络接口(网卡)本身。
1 | ip link show # 列出系统上所有的网络接口(wlp0s20f3, enp3s0, lo 等) |
ip addr (管理 IP 地址)
这组命令用于管理接口上的 IP 地址。这是 ip 命令最常用的功能之一。
1 | ip addr show # 显示所有接口及其绑定的所有 IP 地址 |
输出信息解释:
1 | ip addr show |
lo (Loopback): 表示一个虚拟的网络接口,不对应任何物理硬件。访问127.0.0.1或localhost时,就是在和这个接口通信。主要用于程序测试和内部服务。<LOOPBACK,UP,LOWER_UP>:LOOPBACK: 回环接口。UP, LOWER_UP: 接口是激活的(lo总是激活的)。
inet 127.0.0.1/8: IPv4 地址。inet6 ::1/128: IPv6 地址,是localhost的 IPv6 版本。valid_lft forever:lft(lifetime) 指的是租期。forever表示这个地址永不过期。
wlp0s20f3: 物理 Wi-Fi 网卡在 Linux 上的名称。<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000BROADCAST,MULTICAST表示网卡有能力发送“广播”和“多播”数据包UP表示接口启用(ip link set ... up)LOWER_UP表示物理层已接通(WiFi:成功连接并认证;有线网:网线插好并协商成功)。mtu 1500: MTU (Maximum Transmission Unit)。网卡能发送的最大数据包大小。1500 字节是 Wi-Fi 和以太网的标准值。qdisc noqueueqdisc: (Queueing Discipline),排队规则,决定内核接收数据包的顺序。noqueue: 表示内核层面不排队。常见于 Wi-Fi 设备,内核只是简单地把包扔给硬件,由硬件自己去管理队列。
state UP: 一个综合状态,是UP和LOWER_UP都为true时的结果qlen 1000: (Queue Length),传输队列的长度。如果qdisc不是noqueue,这里就定义了队列能缓存多少个包。
link/ether 34:cf:f6:90:e7:c3 brd ff:ff:ff:ff:ff:ff34:cf:f6:90:e7:c3: 网卡的 MAC 地址 (硬件地址)。brd ff:ff:ff:ff:ff:ff: 物理层的广播地址。所有发往这个 MAC 地址的包,都会被局域网上的设备接收(BROADCAST标志的实际应用)。
inet 192.168.1.120/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp0s20f3inet: 表示 IPv4 地址。192.168.1.120/24: IP 地址和子网掩码。brd 192.168.1.255:192.168.1.0/24这个子网的广播地址。scope global:global表示这个 IP 是一个标准的公网或私网 IP,可以用来和局域网及(通过网关)互联网通信。dynamic: 表示这个 IP 是动态获取的 (通过 DHCP)。noprefixroute: 一个内核标志,告诉系统不要自动为这个 IP 的子网 (192.168.1.0/24) 创建路由。
valid_lft 6036sec preferred_lft 6036seclink/ether: 一个使用以太网 MAC 地址的接口valid_lft(Valid Lifetime): 租期有效时间。这个 IP 在 6036 秒后会失效preferred_lft(Preferred Lifetime): 在这段时间内,系统会用这个 IP 发起新连接。
inet6 fe80::43e1:ac02:ff76:b716/64 scope link noprefixrouteinet6: 表示 IPv6 地址。scope link:link表示这是一个“链路本地地址”(Link-Local),不能用于访问互联网,仅用于局域网内部通信
ip route (管理路由表)
1 | ip route show # 显示当前的路由表 |
输出信息解释:
1 | ip route show |
default via 192.168.1.1 dev wlp0s20f3 proto dhcp src 192.168.1.120 metric 600default:路由表默认规则via 192.168.1.1:192.168.1.1是网关地址,在这里是路由器 ipdev wlp0s20f3:表示使用的设备,这里使用的是无线网卡wlp0s20f3proto dhcp:说明这条路由规则是由 DHCP 协议自动配置的。即路由器(DHCP 服务器)在分配给电脑 IP 的同时,也电脑网关的 ip。src 192.168.1.120:电脑自身 ip。metric 600:跃点数为 600,这是这条路由的“优先级”。如果同时插了网线(metric可能是100),系统会优先使用metric值更低(成本更低)的网线
192.168.1.0/24 dev wlp0s20f3 proto kernel scope link src 192.168.1.120 metric 600192.168.1.0/24:局域网所有设备地址,表示这是局域网的路由规则proto kernel:这条规则是 Linux 内核在用户为wlp0s20f3配置192.168.1.120/24这个 IP 地址时,自动添加的。scope link:表示192.168.1.0/24整个网络在链路上,不需要经过网关。
ip 和 nmcli 的关系
nmcli是上层的网络管理工具;ip是配置工具,直接与 Linux 内核的网络栈对话。ip用于配置内核中的对象,如:IP 地址(ip addr)、路由表(ip route)和网络接口的状态(ip link set up/down)。nmcli在幕后会使用ip(或类似的功能) 来完成实际的工作。
有线网协商速率获取
前面的 nmcli 有时可能无法获取协商速率,此时需要使用别的方法。
- 使用
ethtool:ethtool <dev> - 使用
/sys文件系统:cat /sys/class/net/<dev>/speed
其中使用 ethtool 得到的结果形如:
1 | ethtool enp0s20f0u1u1 |
ethtool 和 ip 的关系
ip在内核层面工作,不关心硬件的“协商速率”或“双工模式”,它只关心内核如何看待这个接口。ethtool更加底层,直接与网络设备驱动程序 (driver) 对话。它的工作是查询和设置物理网卡(PHY)本身的参数。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Zhuxz's Blog!
评论



