net-tools 和 iproute2 对比

    如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具(统称为net-tools)来配置网络功能,解决网络故障。net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具。但自2001年起,Linux社区已经对其停止维护。同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2。
    作为网络配置工具的一份子,iproute2是linux下管理控制TCP/IP网络和流量控制的新一代工具包,旨在替代老派的工具链net-tools,即大家比较熟悉的ifconfig,arp,route,netstat等命令。。net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。抛开性能而言,net-tools的用法给人的感觉是比较乱,而iproute2的用户接口相对net-tools来说相对来说,更加直观。比如,各种网络资源(如link、IP地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。。更重要的是,到目前为止,iproute2仍处在持续开发中。

    所以,net-tools和iproute2都需要去学习掌握了。

    如果你仍在使用net-tools,而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话,那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。

    对于那些想要转到使用iproute2的用户,有必要了解下面有关net-tools和iproute2的众多对比。

iproute2的核心命令是ip:
linux ip命令和ifconfig命令_第1张图片linux ip命令和ifconfig命令_第2张图片
iproute2 ip 命令常用备忘ip地址管理
linux ip命令和ifconfig命令_第3张图片
linux ip命令和ifconfig命令_第4张图片linux ip命令和ifconfig命令_第5张图片
(一)网络接口相关

(1) 查询所有已连接的网络接口(network interface)
使用net-tools:
linux ip命令和ifconfig命令_第6张图片
ifconfig -a显示的是系统所有的网络接口,不管是激活的还是未激活的。
这里简单对ifconfig的输出做个解释:
第一行:Link encap(连接类型) HWaddr(网卡的硬件地址,即MAC地址)
第二行:inet addr(网卡的IPv4地址) Bcast(广播地址) Mask(子网掩码)
第三行:inet6 addr(网卡的IPv6地址)
第四行:UP(代表网卡是激活状态) BROADCAST(支持广播) RUNNING(代表网卡的网线被接上) MULTICAST(支持组播) MTU(最大传输单元) Metric(用于计算路由的成本)
第五、六行: 表示网络启动到现在接收和发送的网络包(packets)数量
第七行:collisions(冲突信息包的数目) txqueuelen(发送队列的大小)
第八行:表示网络启动到现在接收和发送的总字节量(bytes)
linux ip命令和ifconfig命令_第7张图片
注:由RX和TX可以了解网络是否非常繁忙
注:errors:0 dropped:0 overruns:0 frame:0,都为0 说明网络比较稳定
注:collisions发生太多次表示网络状况不太好
如果只想知道特定网络接口的信息,可以指定具体网络接口名称,例如ifconfig eth0,ifconfig lo
使用iproute2:
linux ip命令和ifconfig命令![]
如果想让输出的结果像ifconfig那样详细,可以增加-s选项:
linux ip命令和ifconfig命令_第8张图片
这样,就可以看到网络接口的流量信息了。
如果只想看当前被激活的网络接口,可以在命令后头增加一个up:linux ip命令和ifconfig命令
(2)查询网络设备的IP地址
使用net-tools
linux ip命令和ifconfig命令
使用iproute2:
linux ip命令和ifconfig命令_第9张图片
当不指定网络接口时,ip addr其实是ip addr show的简略写法。
(3)设置网络设备的IP地址
使用net-tools:
linux ip命令和ifconfig命令

使用iproute2:
linux ip命令和ifconfig命令
这里使用的模版是:ip addr add ip_address/net_prefix brd + devinterface
net_prefix隐含指定了子网掩码,brd +表明是标准的广播地址。
需要了解的一点是,通过ip addr可以非常容易地给一块网卡添加多个地址,ifconfig同样可以,是通过叫做“IP别名”的方式做到的。
linux ip命令和ifconfig命令
(4)删除网络设备的IP地址
使用net-tools:
貌似没有什么好办法去做:ifconfig eth0 0 。
就IP地址的移除而言,除了给接口分配全0地址外,net-tools没有提供任何合适的方法来移除网络接口的IPv4地址
使用iproute2:
模版:ip addr del ip_address/net_prefix dev interface

linux ip命令和ifconfig命令_第10张图片
此外,iproute2提供ip addr flush可以一次性删除一个网络设备的所有地址:
linux ip命令和ifconfig命令
默认的,这条命令会删除IPv4和IPv6的地址,如果想分别删除,可以通过分别指定-4和-6选项。
(5)激活或者停用网络接口
使用net-tools:
linux ip命令和ifconfig命令
在linux下还可以使用ifup和ifdown来达到同样的目的。
使用iproute2:
linux ip命令和ifconfig命令(6)设置或者改变网络接口的参数(属性)
一个网络接口具体有哪些参数可以供我们去设置呢?输入ip link set eth0,然后按两次TAB键,如下:linux ip命令和ifconfig命令可以看到其中的up和down就是用来激活或者停用某个网络接口的。例如,使能或者关闭eth0的多播功能:
使用net-tools:linux ip命令和ifconfig命令
使用iproute2:
linux ip命令和ifconfig命令通常,调整最大传输单元MTU用的比较多。
使用net-tools:linux ip命令和ifconfig命令
使用iproute2:linux ip命令和ifconfig命令改变网卡硬件地址,即MAC地址(注意,修改MAC地址前网卡必须先关闭):
使用net-tools:linux ip命令和ifconfig命令
使用iproute2:
linux ip命令和ifconfig命令类似的,需要先关闭网卡再设置的属性有name

linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。linux ip命令和ifconfig命令_第11张图片linux ip命令和ifconfig命令_第12张图片