ifconfig vs ip What's Difference and Comparing Network Configuration?


As network administrators or anyone dabbling in network troubleshooting, you will often come across the terms 'ifconfig' and 'ip'. Both these commands are used in Unix-based operating systems for network interface configuration, but what makes them different? In this article, we will dissect the differences, delve into some examples and their outputs to understand these commands better.

Introduction to Ifconfig

Ifconfig (Interface Configuration) is a system administration utility in Unix and Unix-like operating systems to configure, control, and query TCP/IP network interface parameters. It is a part of the net-tools package which has been there almost since the inception of Linux.

Let’s run a simple ifconfig command to see its output.

$ ifconfig

This could produce an output similar to −

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
   inet 192.168.1.2  netmask 255.255.255.0  broadcast 192.168.1.255
   inet6 fe80::92e2:baff:fe14:5044  prefixlen 64  scopeid 0x20<link>
   ether 90:e2:ba:14:50:44  txqueuelen 1000  (Ethernet)
   RX packets 44675547  bytes 60719045480 (56.5 GiB)
   RX errors 0  dropped 2473  overruns 0  frame 0
   TX packets 32862915  bytes 4461913156 (4.1 GiB)
   TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

In this example, eth0 is the name of the first ethernet interface. Details such as the IP address (IPv4/IPv6), netmask, broadcast address, MAC address, and RX/TX packet details are displayed.

Introduction to Ip

However, since around 2009, the 'ip' command started to replace the traditional ifconfig. The 'ip' command is part of the iproute2 package, which is actively maintained, contrary to the net-tools package.

Ip command provides a lot more features compared to ifconfig. For instance, it provides advanced routing, tunneling, and even policy. It also offers more straightforward syntax and a consistent output, making it easier to use in scripting or programming.

Here's an example of using the 'ip' command −

$ ip addr

This might output −

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 pfifo_fast state UP group default qlen 1000
   link/ether 90:e2:ba:14:50:44 brd ff:ff:ff:ff:ff:ff
   inet 192.168.1.2/24 brd 192.168.1.255 scope global dynamic eth0
      valid_lft 86374sec preferred_lft 75574sec
   inet6 fe80::92e2:baff:fe14:5044/64 scope link 
      valid_lft forever preferred_lft forever

Comparative Analysis

Now that we understand the basic working and outputs of ifconfig and ip commands, let's compare them in detail.

Syntax and Usage

The 'ip' command boasts a more advanced and efficient syntax. The design is more hierarchical, making it easier to manage and configure network interfaces.

For instance, if you want to bring a network interface up using ifconfig, you would use −

$ sudo ifconfig eth0 up

Whereas in 'ip' −

$ sudo ip link set eth0 up

You can see the hierarchical structure in 'ip' command as 'link set' is used to configure network interface parameters.

IPv6 Support

The ifconfig command does not provide full support for IPv6, making it less suitable for modern networks. Conversely, 'ip' offers complete support for IPv6, which is crucial as the internet transitions to IPv6.

Maintenance and Updates

As we mentioned before, ifconfig is part of the net-tools package that has been deprecated and is no longer actively maintained. 'ip', on the other hand, is part of the iproute2 package and is actively maintained, meaning it gets updates, new features, and bug fixes.

Features and Capabilities

While ifconfig is primarily used to configure network interfaces, 'ip' can do much more. It can configure routes, tunnels, and provide advanced network statistics.

For instance, to display the routing table, you would use −

$ ip route show

The output might be −

default via 192.168.1.1 dev eth0 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.2

Ifconfig vs ip in Tabular form

Here is a comparison of the `ifconfig` and `ip` commands represented in tabular form −

Parameter

Ifconfig

Ip

Availability

Part of the deprecated net-tools package. Not actively maintained

Part of the actively maintained iproute2 package

IPv6 Support

Limited support for IPv6

Full support for IPv6

Capabilities

Mainly used for configuring network interfaces

Used for configuring network interfaces, as well as managing routes, tunnels, and providing advanced network statistics

Command Syntax

Simple, flat syntax

More advanced, hierarchical syntax

Usage Example

$ ifconfig eth0 up

$ ip link set eth0 up

Display interfaces

$ ifconfig

$ ip addr

Display routing table

$ route -n

$ ip route show

Add IP Address

$ ifconfig eth0 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255 up

$ ip addr add 192.168.1.2/24 dev eth0

Remove IP Address

Not straightforward

$ ip addr del 192.168.1.2/24 dev eth0

Turn On/Off interface

$ ifconfig eth0 up/down

$ ip link set eth0 up/down

In conclusion, while `ifconfig` might be more familiar to some due to its long history, the `ip` command is more modern, powerful, and versatile. It's recommended to use `ip` over `ifconfig` in modern Linux systems.

Conclusion

While ifconfig has its historical significance and still finds use due to its simplicity and familiarity, the 'ip' command offers a more powerful and comprehensive solution for network configuration and troubleshooting. It is actively maintained, more feature-rich, and supports IPv6 fully, making it more relevant in today's networking scenario.

The transition from ifconfig to ip might feel daunting initially due to differences in syntax and command structure, but once you understand the fundamentals, 'ip' proves to be a highly efficient and versatile tool for network management.

Updated on: 17-Jul-2023

413 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements