linux 操作系统的一个突出优势就是其提供了稳定而强大的网络功能。linux 通过内核对网络核心功能的运行进行管理。与此同时,在用户空间,linux 也提供了相关工具包对内核层的网络参数进行修改和配置。根据对内核的不同访问方式,linux 系统中先后采用两代网络工具包,net-tools 和 iproute2。
从 net-tools 到 iproute2
net-tools 源于 BSD 的 TCP/IP 工具箱,后来成为老版本 linux 内核中配置管理网络功能的工具。许多常见网络管理工具箱,如 netstat、route、ifconfig,都是由 net-tools 提供的。
linux 的应用发展中,net-tools 工具箱起到重要作用,至今仍是许多 linux 网络管理员手中的常备工具。
但随着技术的发展,net-tools 工具箱逐步有被技术更为先进的 iproute2 工具箱所取代之势。
net-tools 通过 procfs(/proc) 和 ioctl 系统调用去访问和改变内核网络配置,而 iproute2 则通过 netlink 协议与内核进行通讯。在多个任务的情况下,iproute 的效率会更高。与内核通信的不同方式也成为两个工具链的最本质区别。
The /proc interface is known to be more heavyweight than netlink interface.
自 2001 年起,linux 社区已经停止对 net-tools 进行维护。同时,一些 linux distribution 的新版本已经完全抛弃了net-tools,只支持iproute2。如 Arch、Centos、Ubuntu 等,系统默认安装自带 iproute2 包,但是不安装 net-tools 工具包,如需使用要额外安装。
作为与 linux 内核技术配套发展的网络管理配置工具集,iproute2 也随着内核的演进在不断持续更新。除了覆盖 net-tools 能够提供的能力外,iproute2 还能提供许多 net-tools 无法完成的额外功能,如 source-based routing, QoS, VLAN, bonding, bridges 等。
正是因为 iproute2 强大的能力,它也成为一些高层网络配置管理工具的基础依赖组件,比如 Network Manager。
注:network-manager 工具包,包括 nm 系列命令,如 nmcli、nmtui 等。
iproute2 工具集
相较 net-tools,iproute2 提供了更为更丰富的工具集。
这些命令涵盖了网络接口管理(启动/关闭、IP 相关设置)、路与管理、隧道管理、流量控制等功能。
net-tools 与 iproute2 典型指令映射
iproute2 指令集功能实现了对 net-tools 功能的全面覆盖,net-tools 中的指令都能在 iproute2 中找到对应。
net-tools 中的指令 | iproute2 中的指令 |
---|---|
ifconfig -a | ip addr / ip a |
ifconfig eth0 up | ip link set eth0 up |
ifconfig -s / netstat -i | ip -s link |
route -n | ip route / ip r |
route add | ip route add |
route del | ip route del |
ipmaddr | ip maddr |
iptunnel | ip tunnel |
apr -na | ip neigh |
netstat | ss |
netstat -tnlp | ss -tnlp |
从上可见,ip 指令和 ss 指令结合各种参数,就基本能完成对 net-tools 常用指令集的映射,这两个指令也是 iproute2 指令集中最常用的指令。
iproute2 指令特点
(1) 指令格式
在指令的使用格式上,iproute2 相对 net-tools 显得更为整齐和直观,基本采用 “主命令 + 网络资源参数” 的命令的格式,如 ip + 网络资源参数。而各种网络资源参数(如 link、IP 地址、路由和隧道等),都用相关对象的抽象形式去定义,如此,可以让用户使用一致的语法去管理不同的对象。
(2) 结果呈现格式
在结果的输出方式上,虽有少数指令输出的结果一致(如 ipmaddr 和 ip maddr),iproute2 的绝大部分指令输出结果的格式与对应的 net-tools 指令不同。
如 route -n 与 ip route
如 netstat 与 ss
net-tools 工具集结果呈现格式显得更为工整,iproute2 结果则显得更为紧凑。
iproute2 的技术先进性受到了社区的推崇,并成为默认的推荐。但习惯的力量很难改变,多年过去,net-tools 依然还在被广泛使用。同时,linux 大量旧系统的存在也会使的两套工具并用的局面持续下去。