[转] Linux TCP/IP网络小课堂:net-tools与iproute2大比较

http://os.51cto.com/art/201409/450886.htm

如今许多系统管理员仍结合使用ifconfig、route、arp和netstat等命令行工具(它们统称为net-tools),管理和排查各 种网络配置。这类工具原先起源于BSD TCP/IP工具箱,旨在配置老式Linux内核的网络功能。自2001年以后,它在Linux社区的发展就止步不前了。Arch Linux和CentOS/RHEL 7等一些Linux发行版已经弃用了net-tools,其他发行版计划弃用net-tools,改而使用iproute2。

iproute2是另一个系列的网络配置工具,它旨在取代net-tools的功能。net-tools可以通过procfs(/proc)和 ioctl系统调用,访问和更改内核网络配置,iproute2则通过网络链路套接字接口与内核进行联系。/proc接口比网络链路接口来得更笨拙。抛开 性能不讲,iproute2的用户界面比net-tools的用户界面要来得直观。比如说,网络资源(比如链路、IP地址、路由和隧道等)用“对象”抽象 进行了恰当的定义,你可以使用一致的语法来管理不同的对象。最重要的是,迄今为止iproute2一直在积极开发当中。

如果你仍在使用net-tools,是时候改用iproute2了,如果你想跟上Linux内核的最新最好的网络功能特性,更是如此。很可能有好多 操作可以用iproute2来实现,却无法用net-tools来实现,无论是基于源的路由、服务质量、虚拟局域网(VLAN)、绑定,还是网桥其他什么 操作。另外值得一提的是,网络管理器等更高级网络配置工具依赖iproute2。

对于想要改用iproute2的那些人来说,下面对net-tools与iproute2进行了一番全面的比较。

显示所有连接的网络接口

下列命令显示了所有可用的网络接口(无论是不是活动网络接口)。

使用net-tools:

  1. $ ifconfig -a

使用iproute2:

  1. $ ip link show

激活或禁止网络接口

想激活/禁止某一个网络接口,可以使用这些命令。

使用net-tools:

  1. $ sudo ifconfig eth1 up
  2. $ sudo ifconfig eth1 down

使用iproute2:

  1. $ sudo ip link set down eth1
  2. $ sudo ip link set up eth1

将一个或多个IPv4地址分配给网络接口

使用这些命令,即可配置网络接口的IPv4地址。

使用net-tools:

  1. $ sudo ifconfig eth1 10.0.0.1/24

使用iproute2:

  1. $ sudo ip addr add 10.0.0.1/24 dev eth1

注意:如果使用iproute2,你可以将多个IP地址分配给某个接口;如果换成ifconfig,就无法做到这点。就ifconfig而言,一个变通办法就是使用IP别名。

  1. $ sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1
  2. $ sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1
  3. $ sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1

从网络接口删除IPv4地址

就删除IP地址而言,如果使用net-tools,除了分配0给接口外,没有合适的方法从网络接口删除IPv4地址。iproute2可以合理地处理这个问题。

使用net-tools:

  1. $ sudo ifconfig eth1 0

使用iproute2:

  1. $ sudo ip addr del 10.0.0.1/24 dev eth1

显示网络接口的一个或多个IPv4地址

可以通过下列方法,检查某一个网络接口的IPv4地址。

使用net-tools:

  1. $ ifconfig eth1

使用iproute2:

  1. $ ip addr show dev eth1

同样,要是有多个IP地址分配给了某个接口,iproute2就会显示所有IP地址,而net-tools只能显示一个IP地址。

分配IPv6地址给网络接口

使用这些命令,即可将一个或多个IPv6地址添加给某个网络接口。net-tools和iproute2都让你可以将多个IPv6地址添加给某个接口。

使用net-tools:

  1. $ sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64
  2. $ sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64

使用iproute2:

  1. $ sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1
  2. $ sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1

显示网络接口的一个或多个IPv6地址

可以通过以下方法显示某一个网络接口的IPv6地址。net-tools和iproute2都能显示所有已分配的IPv6地址。

使用net-tools:

  1. $ ifconfig eth1

使用iproute2:

  1. $ ip -6 addr show dev eth1

删除网络接口的IPv6地址

使用这些命令即可删除某个接口的任何不必要的IPv6地址。

使用net-tools:

  1. $ sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64

使用iproute2:

  1. $ sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1

更改网络接口的MAC地址

若想欺骗网络接口的MAC地址,请使用下列命令。要注意:在更改MAC地址之前,你需要先禁止该接口。

使用net-tools:

  1. $ sudo ifconfig eth1 hw ether 08:00:27:75:2a:66

使用iproute2:

  1. $ sudo ip link set dev eth1 address 08:00:27:75:2a:67

查看IP路由表

net-tools有两个选项可用于显示内核的IP路由表:route或netstat。如果是iproute2,只需使用ip route命令。

使用net-tools:

  1. $ route -n $ netstat -rn

使用iproute2:

  1. $ ip route show

添加或改动默认路由

下面这些命令可以添加或改动内核IP路由表中的默认路由。要注意:如果使用net-tools,只要添加一个新的默认路由,就可以实现改动默认路由这个操作。如果使用iproute2,只需使用ip route replace命令。

使用net-tools:

  1. $ sudo route add default gw 192.168.1.2 eth0
  2. $ sudo route del default gw 192.168.1.1 eth0

使用iproute2:

  1. $ sudo ip route add default via 192.168.1.2 dev eth0
  2. $ sudo ip route replace default via 192.168.1.2 dev eth0

添加或删除静态路由

可使用下列命令添加或删除静态路由。

使用net-tools:

  1. $ sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0
  2. $ sudo route del -net 172.16.32.0/24

使用iproute2:

  1. $ sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0
  2. $ sudo ip route del 172.16.32.0/24

查看套接字统计数据

下面这些命令可以查看套接字统计数据(比如激活/侦听TCP/UDP套接字)。

使用net-tools:

  1. $ netstat
  2. $ netstat -l

使用iproute2:

  1. $ ss
  2. $ ss -l

查看ARP表

你可以使用这些命令来显示内核的ARP表。

使用net-tools:

  1. $ arp -an

使用iproute2:

  1. $ ip neigh

添加或删除静态ARP项

添加或删除本地ARP表中的静态ARP项可通过以下方法来实现。

使用net-tools:

  1. $ sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef
  2. $ sudo arp -d 192.168.1.100

使用iproute2:

  1. $ sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0
  2. $ sudo ip neigh del 192.168.1.100 dev eth0

添加、删除或查看多播地址

想配置或查看某个网络接口上的多播地址,可以使用下列命令。

使用net-tools:

  1. $ sudo ipmaddr add 33:44:00:00:00:01 dev eth0
  2. $ sudo ipmaddr del 33:44:00:00:00:01 dev eth0
  3. $ ipmaddr show dev eth0
  4. $ netstat -g

使用iproute2:

  1. $ sudo ip maddr add 33:44:00:00:00:01 dev eth0
  2. $ sudo ip maddr del 33:44:00:00:00:01 dev eth0
  3. $ ip maddr list dev eth0

英文原文:http://xmodulo.com/2014/09/linux-tcpip-networking-net-tools-iproute2.html

时间: 2024-10-11 12:05:05

[转] Linux TCP/IP网络小课堂:net-tools与iproute2大比较的相关文章

关于linux内核的tcp ip网络框架实现

关于linux内核的tcp ip网络框架实现 上图是linux内核的tcp ip网络框架实现 需要注意的是,linux采用函数指针的方式来模拟"面向对象"概念的动态函数绑定.所以需要仔细看上面的函数指针实际指向的函数,才能知道上面的tcp.ip的函数如何被调用到的.上图需要仔细看. 注意箭头方向,表明了函数传递数据和获取数据的方向. 下面引用一下<深入Linux内核架构>的图 更详细的内容请参见我的视频课程:<深入linux内核>https://edu.51ct

TCP/IP网络编程系列之三

TCP/IP网络编程系列之三-地址族与数据序列 分配给套接字的IP地址和端口 IP是Internet Protocol (网络协议)的简写,是为首发网络数据而分配给计算机的值.端口号并非赋予计算机值,而是为了区分程序中创建的套接字而分配给套接字的序号. 网络地址 网络地址分为IPV4和IPV6,分别你别为4个字节地址簇和6个字节地址簇.IPV4标准的4个字节的地址分为网络地址和主机地址,且分为A.B.C.D.E 等类型.一般很少用到E类型.如下图所示:net-id指网络ID,host-id指主机

TCP/IP网络编程系列之三(初级)

TCP/IP网络编程系列之三-地址族与数据序列 分配给套接字的IP地址和端口 IP是Internet Protocol (网络协议)的简写,是为首发网络数据而分配给计算机的值.端口号并非赋予计算机值,而是为了区分程序中创建的套接字而分配给套接字的序号. 网络地址 网络地址分为IPV4和IPV6,分别你别为4个字节地址簇和6个字节地址簇.IPV4标准的4个字节的地址分为网络地址和主机地址,且分为A.B.C.D.E 等类型.一般很少用到E类型.如下图所示:net-id指网络ID,host-id指主机

[转帖]Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点

Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点 http://network.51cto.com/art/201909/603780.htm 可以毫不夸张的说现如今的互联网是基于TCP/IP构建起来的网络.弄懂协议栈的原理,无论对调试网络IO性能还是解决网络问题都是有很大帮助的.本片文章就带领大家来看看内核是如何控制网络数据流的. 作者:底层软件架构来源:今日头条|2019-09-30 09:28 收藏 分享 可以毫不夸张的说现如今的互联网是基于TCP/IP构建起来的网络.弄懂

TCP/IP网络协议

什么是协议?协议就是双方约定的规则.同理,在网络中,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议. 下面是我百度的定义: TCP/IP是“transmission Control Protocol/Internet Protocol”的简写,中文译名为传输控制协议/互联网络协议)协议, TCP/IP(传输控制协议/网间协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式.TCP/IP是INTERNET的基础协议,也

《TCP/IP网络编程》

<TCP/IP网络编程> 基本信息 作者: (韩)尹圣雨 译者: 金国哲 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115358851 上架时间:2014-6-19 出版日期:2014 年6月 开本:16开 页码:1 版次:1-1 所属分类:计算机 > 计算机网络 > 网络协议 > TCP/IP 更多关于>>><TCP/IP网络编程> 编辑推荐 为初学者准备的网络编程 本书涵盖操作系统.系统编程.TCP/IP协议等多种

TCP/IP网络编程系列之一

概述 网络编程实际上就是编写程序使两台联网的计算机相互的交换数据.操作系统会提供名为“ 套接字 ”的部件.套接字是网络数据传输的软件设备,即使对网络数据传输原理不太熟悉也无关紧要.我们也能通过套接字完成数据传输,因此网络编程又叫套接字编程. 过程  我们可以把套接字理解为我们平时的电话机,我们先看一下套接字的创建过程: 首先你如果要和别人沟通肯定要安装好电话机才可以,所以对应套接字的是调用socket函数时进行对话. #include<sys/socket.h> int socket(int

浅谈TCP/IP网络编程中socket的行为

我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: . TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) . Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为. . 编写Performant, Scalable的服务器程序.包括多线程.IO Multiplexing.非阻塞.异步等各种技术. 关于TCP/IP协议,建议参考Richard Stevens的<TCP/IP Illust

TCP/IP网络编程系列之四(初级)

TCP/IP网络编程系列之四-基于TCP的服务端/客户端 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流的套接字.在了解TCP之前,先了解一下TCP所属的TCP/IP协议栈. 如图所示,TCP/IP协议栈共分为4层,可以理解成数据收发分成了4个层次化过程. 链路层 它是物理链接领域标准化结果,也是最基本的领域,专门定义LAN.WAN.MAN等网络标准.若两台计算机通过网络进行数据交换,链路层就负责整个物