linux网络工具iproute2的使用简介
一、写本文的目的
本文完全是自己在学习iproute2的过程中搜集的大杂烩,记录在这里,方便以后自己查询学习,图片都是来自网络,在此表示感谢!
二、简单了解iproute2工具套装
iproute2是linux下管理控制TCP/IP网络和流量控制的新一代工具包,旨在替代老派的工具链net-tools,即大家比较熟悉的ifconfig,arp,route,netstat等命令。
要说这两套工具本质的区别,应该是net-tools是通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。
其次,net-tools的用法给人的感觉是比较乱,而iproute2的用户接口相对net-tools来说相对来说,更加直观。比如,各种网络资源(如link、IP地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。
所以,net-tools和iproute2都需要去学习掌握了。
iproute2的核心命令是ip:
三、iproute2的典型应用
本小节,我会使用net-tools和iproute2的命令做对比,做到简单明了,分别演示如何去获取、配置和操作系统网络信息。
以下是net-tools和iproute2的大致对比:
(一)网络接口相关
(1) 查询所有已连接的网络接口(network interface)
使用net-tools:
- root@astrol:~# ifconfig -a
- eth0 Link encap:Ethernet HWaddr 00:0c:29:0d:ce:93
- inet addr:192.168.6.138 Bcast:192.168.6.255 Mask:255.255.255.0
- inet6 addr: fe80::20c:29ff:fe0d:ce93/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:202741 errors:1 dropped:3312 overruns:0 frame:0
- TX packets:60730 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:27472662 (27.4 MB) TX bytes:51025509 (51.0 MB)
- Interrupt:18 Base address:0x2000
- eth0:1 Link encap:Ethernet HWaddr 00:0c:29:0d:ce:93
- inet addr:192.168.6.139 Bcast:192.168.6.255 Mask:255.255.255.0
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- Interrupt:18 Base address:0x2000
- lo Link encap:Local Loopback
- inet addr:127.0.0.1 Mask:255.0.0.0
- inet6 addr: ::1/128 Scope:Host
- UP LOOPBACK RUNNING MTU:65536 Metric:1
- RX packets:5 errors:0 dropped:0 overruns:0 frame:0
- TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:0
- RX bytes:512 (512.0 B) TX bytes:512 (512.0 B)
ifconfig -a显示的是系统所有的网络接口,不管是激活的还是未激活的。
这里简单对ifconfig的输出做个解释:
第一行:Link encap(连接类型) HWaddr(网卡的硬件地址,即MAC地址)
第二行:inet addr(网卡的IPv4地址) Bcast(广播地址) Mask(子网掩码)
第三行:inet6 addr(网卡的IPv6地址)
第四行:UP(代表网卡是激活状态) BROADCAST(支持广播) RUNNING(代表网卡的网线被接上) MULTICAST(支持组播) MTU(最大传输单元) Metric(用于计算路由的成本)
第五、六行: 表示网络启动到现在接收和发送的网络包(packets)数量
第七行:collisions(冲突信息包的数目) txqueuelen(发送队列的大小)
第八行:表示网络启动到现在接收和发送的总字节量(bytes)
HWaddr :网卡的硬件地址,即MAC地址
inet addr:IPv4的IP 地址
Bcast:广播地址
mask:子网掩码
inet6 addr:IPv6地址
MTU:最大传输单元
Metric:用于计算路由的成本
RX:表示网络启动到现在的封包接受情况 (Receive)
packets:表示接包数
errors:表示接包发生错误的数量
dropped:表示丢弃的包数量
overruns:表示接收时因过速而丢失的数据包数
frame:表示发生frame错误而丢失的数据包数
TX:从网络启动到现在传送的情况 (Transmit)
collisions:冲突信息包的数目
txqueuelen:发送队列的大小
RX byte、TX byte:总传送/接受的量
注:由RX和TX可以了解网络是否非常繁忙
注:errors:0 dropped:0 overruns:0 frame:0,都为0 说明网络比较稳定
注:collisions发生太多次表示网络状况不太好
如果只想知道特定网络接口的信息,可以指定具体网络接口名称,例如ifconfig eth0,ifconfig lo
使用iproute2:
- root@astrol:~# ip link show
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
- link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff
同样的,想查看特定网络接口的信息,直接指定网络接口名称即可。
- root@astrol:~# ip link show eth0
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
- link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff
如果想让输出的结果像ifconfig那样详细,可以增加-s选项:
- root@astrol:~# ip -s link show eth0
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
- link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff
- RX: bytes packets errors dropped overrun mcast
- 40288764 244422 1 3651 0 0
- TX: bytes packets errors dropped carrier collsns
- 51239397 62116 0 0 0 0
这样,就可以看到网络接口的流量信息了。
如果只想看当前被激活的网络接口,可以在命令后头增加一个up:
- root@astrol:~# ip link show up
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
- link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff
(2)查询网络设备的IP地址
使用net-tools:
- root@astrol:~# ifconfig eth0
使用iproute2:
- root@astrol:~# ip addr show dev eth0
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
- link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff
- inet 192.168.6.138/24 brd 192.168.6.255 scope global eth0
- valid_lft forever preferred_lft forever
- inet 192.168.6.139/24 brd 192.168.6.255 scope global secondary eth0:1
- valid_lft forever preferred_lft forever
- inet6 fe80::20c:29ff:fe0d:ce93/64 scope link
- valid_lft forever preferred_lft forever
当不指定网络接口时,ip addr其实是ip addr show的简略写法。
(3)设置网络设备的IP地址
使用net-tools:
- root@astrol:~# ifconfig eth0:1 192.168.6.140
- root@astrol:~# ifconfig eth0:1 192.168.6.140 netmask 255.255.255.0
- root@astrol:~# ifconfig eth0:1 192.168.6.140 netmask 255.255.255.0 broadcast 192.168.6.255
使用iproute2:
- root@astrol:~# ip addr add 192.168.6.140/24 brd + dev eth0:1
这里使用的模版是:ip addr add ip_address/net_prefix brd + devinterface
net_prefix隐含指定了子网掩码,brd +表明是标准的广播地址。
需要了解的一点是,通过ip addr可以非常容易地给一块网卡添加多个地址,ifconfig同样可以,是通过叫做“IP别名”的方式做到的。
- root@astrol:~# ip addr add 192.168.6.140/24 broadcast 192.168.6.255 dev eth0
- root@astrol:~# ip addr add 192.168.6.141/24 broadcast 192.168.6.255 dev eth0
- root@astrol:~# ip addr add 192.168.6.142/24 broadcast 192.168.6.255 dev eth0
(4)删除网络设备的IP地址
使用net-tools:
貌似没有什么好办法去做。
使用iproute2:
模版:ip addr del ip_address/net_prefix dev interface
- root@astrol:~# ip -4 addr show dev eth0
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
- inet 192.168.6.138/24 brd 192.168.6.255 scope global eth0
- valid_lft forever preferred_lft forever
- inet 192.168.6.141/24 brd 192.168.6.255 scope global secondary eth0
- valid_lft forever preferred_lft forever
- root@astrol:~# ip addr del 192.168.6.141/24 dev eth0
- root@astrol:~# ip -4 addr show dev eth0
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
- inet 192.168.6.138/24 brd 192.168.6.255 scope global eth0
- valid_lft forever preferred_lft forever
此外,iproute2提供ip addr flush可以一次性删除一个网络设备的所有地址:
- root@astrol:~# ip addr flush dev eth0
默认的,这条命令会删除IPv4和IPv6的地址,如果想分别删除,可以通过分别指定-4和-6选项。
(5)激活或者停用网络接口
使用net-tools:
- root@astrol:~# ifconfig eth0 up
- root@astrol:~# ifcofig eth0 dow
在linux下还可以使用ifup和ifdown来达到同样的目的。
使用iproute2:
- root@astrol:~# ip link set eth0 up
- root@astrol:~# ip link set eth0 down
(6)设置或者改变网络接口的参数(属性)
一个网络接口具体有哪些参数可以供我们去设置呢?输入ip link set eth0,然后按两次TAB键,如下:
可以看到其中的up和down就是用来激活或者停用某个网络接口的。例如,使能或者关闭eth0的多播功能:
使用net-tools:
- root@astrol:~# ifconfig eth0 multicast
- root@astrol:~# ifconfig eth0 -multicast
使用iproute2:
- root@astrol:~# ip link set eth0 multicast on
- root@astrol:~# ip link set eth0 multicast off
通常,调整最大传输单元MTU用的比较多。
使用net-tools:
- root@astrol:~# ifconfig eth0 mtu 1400
- root@astrol:~# ip link show eth0
- 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
- link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff
使用iproute2:
- root@astrol:~# ip link set eth0 mtu 1500
- root@astrol:~# ip link show eth0
- 2: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
- link/ether 00:0c:29:0d:ce:93 brd ff:ff:ff:ff:ff:ff
改变网卡硬件地址,即MAC地址(注意,修改MAC地址前网卡必须先关闭):
使用net-tools:
- root@astrol:~# ifconfig eth0 down
- root@astrol:~# ifconfig eth0 hw ether 00:0c:29:0d:ce:95 up
使用iproute2:
- root@astrol:~# ip link set eth0 down
- root@astrol:~# ip link set eth0 address 00:0c:29:0d:ce:95
- root@astrol:~# ip link set eth0 up
linux网络工具iproute2的使用简介的更多相关文章
- linux 网络虚拟化: network namespace 简介
linux 网络虚拟化: network namespace 简介 network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是 ...
- 【转】Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备
原文:https://www.cnblogs.com/bakari/p/10449664.html -------------------------------------------------- ...
- Linux 网络工具
1 nethogs nethogs 是一个免费的工具,当要查找哪个 PID (注:即 process identifier,进程 ID) 给你的网络流量带来了麻烦时,它是非常方便的.它按每个进程来分组 ...
- Linux 网络工具netcat(nc)的应用
NETCAT netcat是Linux常用的网络工具之一,它能通过TCP和UDP在网络中读写数据,通过与其他工具结合和重定向,可以在脚本中以多种方式使用它. netcat所做的就是在两台电脑之间建立链 ...
- linux网络工具nc命令
nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具. nc命令的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server以TC ...
- Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 在前面一篇文章 ...
- Linux 网络工具中的瑞士军刀 - socat & netcat
独立博客阅读:https://ryan4yin.space/posts/socat-netcat/ 文中的命令均在 macOS Big Sur 和 Opensuse Tumbleweed 上测试通过 ...
- Linux网络工具lsof和netstat
lsof全名为list opened files,即列举系统中已经被打开的文件,基本使用如下: (1) 查看/etc/passwd使用情况 lsof /etc/password (2) 查看监听的so ...
- Linux 网络工具之fping
系统中有个最最常用命令工具--ping,而fping 是ping 工具的加强版本.安装过程很简单: [root@mail /]# wget --limit-rate 500k http://www.f ...
随机推荐
- 常见的NoSQL数据库
NoSQL数据库发展迅猛,据说现在已经有上百种NoSQL数据库了,下面来了解下常见的一些NoSQL数据库 先来看张表,了解下典型的NoSQL数据库的分类 临时性键值存储 永久性键值存储 面向文档的数据 ...
- javascript经典面试题之for循环click
经典重现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...
- OpenStack的架构详解[精51cto]
OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云.小云提供可扩展的.灵活的 ...
- 【 js 基础 】【 源码学习 】 深浅拷贝
underscore的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有传参,实际上只是为了返回数组的副本,例如 underscore 中 clone 的方法: ...
- 自定义jquery公用方法切换当前tab栏
经常在项目中需要写到切换当前栏目的展示效果,定义公共方法 //切换当前选中 /** * 全局切换或滑动标签的函数.一般使用active作为当前激活标签的类名,如果已使用其它类名,请将类名作为二参传入 ...
- MongoDB数据库在centos下的操作
简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库 ...
- 第二十八天- tcp下的粘包和解决方案
1.什么是粘包 写在前面:只有TCP有粘包现象,UDP永远不会粘包 1.TCP下的粘包 因为TCP协议是面向连接.面向流的,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个 ...
- Git 及 GitHub 使用
Git bash 的常用命令 1. pwd 查看当前所在目录 2. cd cd .. 返回上一级 cd 目录 进入对应的目录 3. ls 查看当前文件夹的内容 ...
- Js获取地址栏参数值
function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- PGIS下载离线地图 SQLite+WPF
项目是超高分辨率屏幕墙,实时在线加载PGIS地图速度会比较慢,造成屏幕大量留白.于是使用地图缓存,事先把这个区块的地图全部down下来,使用Sqlite数据库保存.留存. //Task taskDow ...