ip 命令:比 ifconfig 更强大、更灵活的网络配置工具

一、背景

几乎所有Linux 发行版都提供了一套命令行工具来方便地配置网络,这些工具来自 net-tools 包,包含 ifconfigroutenameifiwconfigiptunnelnetstatarp 等命令。这些命令曾经是配置网络的标准工具,足以满足任何新手或专家级 Linux 用户的网络配置需求。但由于 Linux 内核的不断发展和 net-tools 包的维护问题,它们逐渐被弃用,取而代之的是功能更强大的替代方案,能够取代所有这些命令。

这个替代方案也存在了一段时间,并且比任何一个上述命令都更加强大。本文重点介绍这个替代方案,并将其与 net-tools 包中的 ifconfig 命令进行比较。

二、ip 命令:ifconfig 的替代方案

ifconfig 存在了很长时间,并且仍然被许多人用来配置、显示和控制网络接口。但现在 Linux 发行版中存在一个比它更强大的替代方案,那就是来自 iproute2util 包的 ip 命令。

虽然这个ip命令乍一看可能有点复杂,但它的功能比 ifconfig 功能更强大,可以替代所有 net-tools 包中的命令。ip 命令在网络协议栈的第二层(链路层)和第三层(IP 层)上都提供了强大的功能,并完成了 net-tools 包中所有上述命令的工作。

ifconfig 主要用于显示或修改系统接口,而 ip 命令能够完成以下任务:

  • 显示或修改接口属性。
  • 添加、删除 ARP 缓存条目,以及为主机创建新的静态 ARP 条目。
  • 显示与所有接口关联的 MAC 地址。
  • 显示和修改内核路由表。

ip 命令与 ifconfig 最主要的区别在于,后者使用 ioctl 进行网络配置,这是一种不太理想的内核交互方式。而前者利用 netlink 套接字机制来实现相同的功能,这是一种更灵活的 ioctl 替代方案,用于内核和用户空间之间的通信,使用 rtnetlink(它增加了网络环境操作能力)。

ifconfigip 命令对比表:

ifconfig (net-tools)ip (iproute2)说明
ifconfigip a, ip link显示和配置网络接口
routeip route管理路由表
arpip neigh管理 ARP 邻居表
netstatss查看网络连接状态
netstat -Mconntrack -L查看连接跟踪信息
netstat -gip maddr查看多播组成员关系
netstat -iip -s link查看网络接口统计信息
netstat -rip route查看路由表
iptunnelip tunnel管理隧道接口
tunctlip tuntap管理虚拟网络接口
brctlbridge管理桥接设备

三、ip 与 ifconfig 命令的比较

现在可以开始重点介绍 ifconfig 的功能以及它们是如何被 ip 命令有效地替代的。下面重点介绍了一些 ifconfig 命令及其使用 ip 命令的替代方案。

3.1、显示所有网络接口

这里,ipifconfig 之间的一个区别是:

  • ifconfig 只显示已启用的接口。
  • ip 命令显示所有接口,无论它们是已启用还是已禁用。

ifconfig 命令:

ifconfig

在这里插入图片描述

ip 命令:

ip a

输出:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:c1:36:f0 brd ff:ff:ff:ff:ff:ff
    inet 172.28.129.124/20 brd 172.28.143.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fec1:36f0/64 scope link
       valid_lft forever preferred_lft forever

3.2、添加或删除 IP 地址

例如,将 IP 地址 192.168.80.174 分配给 eth0 接口。

  • ifconfig 命令:

    ifconfig eth0 add 192.168.80.174  # 添加 IP 地址
    ifconfig eth0 del 192.168.80.174  # 删除 IP 地址
    
  • ip 命令:

    ip a add 192.168.80.174 dev eth0  # 添加 IP 地址
    ip a del 192.168.80.174 dev eth0  # 删除 IP 地址
    

3.3、添加 MAC 地址

例如:将 eth0 接口的硬件地址设置为命令中指定的地址。可以通过检查 ifconfig 命令输出中的 HWaddr 值来验证这一点。

ifconfig 添加 MAC 地址,使用 ifconfig 命令添加 MAC 地址的语法:

ifconfig eth0 hw ether 00:0c:29:33:4e:aa

ip 添加 MAC 地址,使用 ip 命令添加 MAC 地址的语法:

ip link set dev eth0 address 00:0c:29:33:4e:aa

3.4、设置其他网络接口配置

除了设置 IP 地址或硬件地址之外,还可以对接口应用其他配置,包括:

  • MTU(最大传输单元)
  • 多播标志
  • 传输队列长度
  • 监听模式
  • 启用或禁用所有多播模式

ifconfig 命令:

ifconfig eth0 mtu 2000         # 设置 MTU 值: 将 MTU 值设置为 2000
ifconfig eth0 multicast        # 启用多播
ifconfig eth0 txqueuelen 1200  # 设置传输队列长度
ifconfig eth0 promisc          # 启用混杂模式
ifconfig eth0 allmulti         # 启用所有多播

ip 命令:

ip link set dev eth0 mtu 2000         # 设置 MTU 值
ip link set dev eth0 multicast on     # 启用多播
ip link set dev eth0 txqueuelen 1200  # 设置传输队列长度
ip link set dev eth0 promisc on       # 启用混杂模式
ip link set dev eth0 allmulti on      # 启用所有多播

3.5、启用或禁用网络接口

(1)ifconfig 禁用/启用网络接口的命令:例如,禁用 eth0 接口,可以通过 ifconfig 的输出进行验证,默认情况下只显示已启用的接口。要重新启用接口,只需将 down 替换为 up

ifconfig eth0 down  # 禁用接口
ifconfig eth0 up    # 启用接口

(2)ip 禁用/启用网络接口:以下 ip 命令是 ifconfig 的替代方案,用于禁用特定接口。可以通过 ip a 命令的输出进行验证,该命令默认显示所有接口,无论是已启用还是已禁用,并突出显示其状态以及描述。要重新启用接口,只需将 down 替换为 up

ip link set eth0 down  # 禁用接口
ip link set eth0 up    # 启用接口

3.6、启用或禁用 ARP 协议

ifconfig 启用/禁用 ARP 协议:以下命令启用 ARP 协议与 eth0 接口一起使用。要禁用此选项,只需将 arp 替换为 -arp

ifconfig eth0 arp  # 启用 ARP
ifconfig eth0 -arp # 禁用 ARP

ip 启用/禁用 ARP 协议:以下命令是 ifconfigip 替代方案,用于为 eth0 接口启用 ARP。要禁用,只需将 on 替换为 off

ip link set dev eth0 arp on  # 启用 ARP
ip link set dev eth0 arp off # 禁用 ARP

四、总结

ip 命令比 ifconfig 功能更强大,更灵活,并且使用 netlink 套接字机制,比 ifconfigioctl 机制更先进。虽然 ip 命令可能看起来更复杂,但它可以完成 ifconfig 的所有功能,并且提供了更多高级功能。目前,Linux 发行版同时提供 ifconfigip 命令,可以根据自己的需要选择使用。

那么,您认为哪种命令更方便,您更喜欢使用哪种命令呢?
在这里插入图片描述

  • 28
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion Long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值