ifconfig vs ip:有何區別,網路配置的比較

基於Linux的發行版具有一套命令集,可通過命令行以簡單而強大的方式配置網絡。這套命令集來自於net-tools套件,該套件在幾乎所有發行版上長期存在,包括命令如:ifconfigroutenameifiwconfigiptunnelnetstatarp

Ifconfig Vs IP Command

這些命令幾乎足以滿足任何新手或專家Linux用戶想要配置網絡的需求,但由於Linux內核在過去幾年的進步以及這套命令集的難以維護,它們正在被淘汰,而一個更強大的替代方案正在崛起。

這個替代方案也已經存在了一段時間,比這些命令中的任何一個都更強大。接下來的部分將突出這個替代方案並將其與net-tools套件中的一個命令進行比較,即ifconfig

ip – ifconfig的替代方案

ifconfig長期存在,仍被許多人用來配置、顯示和控制網絡接口,但現在Linux發行版上存在一個比它更強大的新替代方案。這個替代方案是來自iproute2util套件的ip命令。

儘管這個指令乍看起來有點複雜,但其功能比ifconfig要廣泛得多。它在兩層網路堆疊上進行功能性組織,即第2層連結層)、第3層IP層),並執行了來自net-tools套件中所有上述命令的工作。

儘管ifconfig主要顯示或修改系統的介面,但這個指令能夠執行以下任務:

  1. 顯示或修改介面屬性。
  2. 添加、刪除ARP快取條目,同時為主機創建新的靜態ARP條目。
  3. 顯示與所有介面關聯的MAC地址。
  4. 顯示和修改核心路由表。

與其古老對應物ifconfig的主要亮點之一是,後者使用ioctl進行網路配置,這是一種較不受歡迎的與核心互動的方式,而前者則利用netlink套接字機制進行相同操作,這是ioctl的一個更靈活的後繼者,用於核心與用戶空間之間的互通,使用rtnetlink(增加了網路環境操作能力)。

我們現在可以開始突出顯示ifconfig的功能,以及它們如何被ip指令有效取代。

ip vs ifconfig 指令

以下部分突出顯示了一些ifconfig指令及其使用ip指令進行替代的情況:

1. 在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/