ifconfig与ip:区别和网络配置比较

基于Linux的发行版具有一套命令,通过命令行提供了一种简单而强大的方式来配置网络。这些命令集来自于net-tools软件包,几乎所有发行版都已经存在很长时间,其中包括命令如:ifconfigroutenameifiwconfigiptunnelnetstatarp

Ifconfig Vs IP Command

这些命令在配置网络方面已经足够满足任何新手或专家Linux用户的需求,但由于Linux内核在过去几年的发展以及这套打包命令的不可维护性,它们正在被弃用,而一个更强大的替代方案正在崭露头角。

这个替代方案也已经存在了相当长的时间,比这些命令中的任何一个都更加强大。接下来的部分将重点介绍这个替代方案,并将其与net-tools软件包中的一个命令进行比较,即ifconfig

ip – ifconfig的替代品

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

尽管这个命令乍看起来有点复杂,但它的功能要比ifconfig广泛得多。它在两层网络堆栈上进行功能组织,即第二层链路层),第三层IP层),并且可以执行net-tools软件包中提到的所有命令的工作。

虽然ifconfig主要用于显示或修改系统的接口,但这个命令可以执行以下任务:

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

它与其古老的对应物ifconfig之间的一个主要区别是,后者使用ioctl进行网络配置,这是一种不太受欢迎的与内核交互的方式,而前者利用netlink套接字机制进行相同操作,这是ioctl的一个更灵活的后继者,用于内核和用户空间之间的互通,使用rtnetlink(增加了网络环境操作能力)。

我们现在可以开始突出ifconfig的特点以及它们如何被ip命令有效替代。

ip与ifconfig命令

以下部分突出了一些ifconfig命令及其使用ip命令进行替代的情况:

在Linux中显示所有网络接口

在这里,ipifconfig之间的一个区别是,ifconfig只显示已启用的接口,而ip则显示所有接口,无论是启用还是禁用。

ifconfig命令
$ ifconfig
ifconfig: Check IP Address
ip命令
$ ip a
ip: Check IP Address

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的硬件地址设置为命令中指定的值。这可以通过检查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

4. 设置网络接口的其他配置

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

  1. MTU(最大传输单元)
  2. 多播标志
  3. 传输队列长度
  4. 混杂模式
  5. 启用或禁用所有组播模式
ifconfig – 其他网络配置
ip – 其他网络配置

a. Set MTU value to 2000.

 

# ifconfig eth0 mtu 2000
# ip link set dev eth0 mtu 2000

b. Enable or Disable multicast flag.

 

# ifconfig eth0 multicast
# ip link set dev eth0 multicast on

c. Setting the transmit queue length.

 

# ifconfig eth0 txqueuelen 1200
# ip link set dev eth0 txqueuelen 1200

d. Enabling or disabling promiscuous mode.

 

# ifconfig eth0 promisc
# ip link set dev eth0 promisc on

e. Enable or disable all multicast mode.

 

# ifconfig eth0 allmulti
# ip link set dev eth0 allmulti on

5. 启用或禁用网络接口

以下命令启用或禁用特定的网络接口。

ifconfig – 禁用/启用网络接口

以下命令禁用接口 eth0,并通过 ifconfig 的输出来验证,默认情况下,它只显示那些已启动的接口。

# 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协议

该命令启用接口 eth0 上的ARP协议。要禁用此选项,只需将arp替换为 -arp

# ifconfig eth0 arp
ip – 启用/禁用ARP协议

该命令是启用接口eth0的ARP的ip替代方案。要禁用,只需将on替换为off

# ip link set dev eth0 arp on

结论

因此,我们已经突出了ifconfig命令的特性以及如何使用ip命令来实现这些特性。目前,Linux发行版为用户提供了这两个命令,以便他可以根据自己的方便使用。那么,根据你的方便,你更倾向于使用哪个命令?请在评论中提及这一点。

如果你想了解更多关于这两个命令的信息,那么你应该阅读我们之前的文章,这些文章以更详细的方式展示了ifconfig和ip命令的一些实际例子。

不容错过:15个“ifconfig”示例,用于在Linux中配置网络接口

不容错过:10个“ip”命令示例,用于在Linux中配置网络接口

Source:
https://www.tecmint.com/ifconfig-vs-ip-command-comparing-network-configuration/