ifconfig 与 ip:网络配置有何区别和比较
基于 Linux 的发行版具有一组功能强大的命令,可通过命令行以简单而强大的方式配置网络。这些命令集可从net-tools包中获得,该包在几乎所有发行版中都已存在很长时间,包括以下命令:ifconfig、route、nameif、iwconfig、iptunnel、netstat、arp。
这些命令足以以任何新手或专家 Linux 用户想要的方式配置网络,但由于过去几年 Linux 内核的进步以及这套命令包的不可维护性,它们已被弃用,并且一种能够替代所有这些命令的更强大的替代方案正在出现。
此替代方案也已经存在了相当长一段时间,并且比上述任何命令都强大得多。其余部分将重点介绍此替代方案,并将其与 net-tools 包中的命令之一(即ifconfig )进行比较。
ip – ifconfig 的替代品
ifconfig已经存在很长时间了,许多人仍然使用它来配置、显示和控制网络接口,但是 Linux 发行版中现在出现了一种比它功能更强大的新替代方案。该替代方案是来自iproute2util包ip
的命令。
尽管这个命令乍一看可能有点复杂,但它的功能比ifconfig广泛得多。它在功能上分为网络堆栈的两层,即第 2 层(链路层)、第 3 层(IP 层),并执行 net-tools 包中上述所有命令的工作。
虽然ifconfig主要显示或修改系统的接口,但该命令能够执行以下任务:
- 显示或修改接口属性。
- 添加、删除 ARP 缓存条目以及为主机创建新的静态 ARP 条目。
- 显示与所有接口关联的 MAC 地址。
- 显示和修改内核路由表。
它与其古老的对应物ifconfig 的主要区别之一在于后者使用ioctl进行网络配置,这是一种不太受重视的与内核交互的方式,而前者利用 netlink 套接字机制进行网络配置,这是一种比 ioctl 更灵活的后继者,用于使用 rtnetlink(增加了网络环境操作能力)在内核和用户空间之间进行通信。
现在我们可以开始强调ifconfig的功能以及如何通过ip命令有效地替代它们。
ip 与 ifconfig 命令
以下部分重点介绍一些ifconfig命令以及使用ip命令替换它们:
1.显示 Linux 中的所有网络接口
这里,ip和ifconfig之间的一个显著特征是,ifconfig 仅显示启用的接口,而 ip 显示所有接口,无论是启用的还是禁用的。
ifconfig 命令
$ ifconfig
ip 命令
$ ip a
2. 在 Linux 中添加或删除 IP 地址
以下命令将 IP 地址192.168.80.174分配给接口eth0
。
ifconfig – 添加/删除 IP 地址
# ifconfig eth0 add 192.168.80.174
使用 ifconfig 命令添加/删除接口的语法:
# ifconfig eth0 add 192.168.80.174 # ifconfig eth0 del 192.168.80.174
ip – 添加/删除 IP 地址
# ip a add 192.168.80.174 dev eth0
使用 ip 命令添加/删除接口的语法:
# ip a add 192.168.80.174 dev eth0 # ip a del 192.168.80.174 dev eth0
4.将 MAC 硬件地址添加到网络接口
以下命令将接口的硬件地址设置eth0
为命令中指定的值。可以通过检查ifconfigHWaddr
命令输出中的值来验证这一点。
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
4.设置网络接口的其他配置
除了设置 IP 地址或硬件地址外,可应用于接口的其他配置包括:
- MTU(最大传输单元)
- 多播标志
- 传输队列长度
- 混杂模式
- 启用或禁用所有多播模式
ifconfig – 其他网络配置
ip – 其他网络配置
a. 将 MTU 值设置为 2000。
# ifconfig eth0 mtu 2000
# ip link set dev eth0 mtu 2000
b. 启用或禁用多播标志。
# ifconfig eth0 multicast
# ip link set dev eth0 multicast on
c. 设置传输队列长度。
# ifconfig eth0 txqueuelen 1200
# ip link set dev eth0 txqueuelen 1200
d. 启用或禁用混杂模式。
# ifconfig eth0 promisc
# ip link set dev eth0 promisc on
e. 启用或禁用所有多播模式。
# ifconfig eth0 allmulti
# ip link set dev eth0 allmulti on
5. 启用或禁用网络接口
以下命令启用或禁用特定的网络接口。
ifconfig – 禁用/启用网络接口
以下命令禁用接口,并通过ifconfigeth0
的输出进行验证,默认情况下仅显示处于启动状态的接口。
# ifconfig eth0 down
要重新启用接口,只需将down替换为up。
# ifconfig eth0 up
ip – 禁用/启用网络接口
下面的ip命令是 ifconfig 的替代命令,用于禁用特定接口。可以通过命令的输出验证这一点,'ip a'
该命令默认显示所有接口,无论是开启还是关闭,但会突出显示它们的状态以及说明。
# ip link set eth0 down
要重新启用接口,只需将down替换为up。
# ip link set eth0 up
6.启用或禁用ARP协议
以下命令在特定网络接口上启用或禁用 ARP 协议。
ifconfig – 启用/禁用 ARP 协议
该命令启用 ARP 协议与接口eth0一起使用。要禁用此选项,只需将 arp 替换为-arp
。
# ifconfig eth0 arp
ip – 启用/禁用 ARP 协议
此命令是 ip 的替代方法,用于为接口 eth0 启用 ARP。要禁用,只需将on替换为off。
# ip link set dev eth0 arp on
结论
因此,我们重点介绍了ifconfig命令的功能以及如何使用ip命令来实现这些功能。目前,Linux 发行版为用户提供了这两个命令,以便用户可以根据自己的方便使用。那么,哪个命令对您来说比较方便,您更喜欢使用哪个命令?请在您的评论中提及这一点。
如果您想了解有关这两个命令的更多信息,那么您应该阅读我们之前的文章,其中更详细地展示了 ifconfig 和 ip 命令的一些实际示例。