ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token }
OPTIONS := { -V[ersion] | -h[uman-readable] | -s[tatistics] | -d[etails] | -r[esolve] | -iec | -f[amily] { inet | inet6 | ipx | dnet | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] { maxi‐mum-addr-flush-attempts } | -o[neline] | -rc[vbuf] [size] | -t[imestamp] | -ts[hort] | -n[etns] name | -a[ll] }
- link - network device. 网络设备
- address - protocol (IP or IPv6) address on a device. 设备上的协议(IP或IPv6)地址
- addrlabel - label configuration for protocol address selection. 协议地址选择的标签配置
- route - routing table entry. 路由表条目
- rule - rule in routing policy database. 路由策略数据库中的规则
- neighbour - manage ARP or NDISC cache entries.
- ntable - manage the neighbor cache's operation.
- tunnel - tunnel over IP.
- tuntap - manage TUN/TAP devices.
- maddress - multicast address.
- mroute - multicast routing cache entry.
- mrule - rule in multicast routing policy database.
- monitor - watch for netlink messages.
- xfrm - manage IPSec policies.
- netns - manage network namespaces.
- l2tp - tunnel ethernet over IP (L2TPv3).
- tcp_metrics/tcpmetrics - manage TCP Metrics
- token - manage tokenized interface identifiers.
- -V[ersion] 显示指令版本信息
- -h[uman-readable] 输出人类可读的统计信息和后缀
- -s[tatistics] 输出统计详细信息
- -d[etails] 输出详细信息
- -r[esolve]
- -iec
- -f[amily] { inet | inet6 | ipx | dnet | link }
- -4
- -6
- -I
- -D
- -B
- -0 将每条记录输出到一行,用‘\’字符替换换行符
- -l[oops] { maxi‐mum-addr-flush-attempts }
- -o[neline]
- -rc[vbuf] [size]
- -t[imestamp]
- -ts[hort]
- -n[etns] name
- -a[ll]
# 显示网卡及配置的地址信息
ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
inet 192.168.0.24/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
输出内容详解: 首先这个系统有两个接口:lo和eth0,lo是环回接口,而我们重点关注的则是eth0这个普通网络接口;下面在看看每个子项的含义:
- <BROADCAST,MULTICAST,UP,LOWER_UP>:
- BROADCAST 表示该接口支持广播;
- MULTICAST 表示该接口支持多播;
- UP 表示该网络接口已启用;
- LOWER_UP 表示网络电缆已插入,设备已连接至网络
- LOOPBACK 环回接口
- mtu 1500:最大传输单位(数据包大小)为1,500字节
- qdisc pfifo_fast:用于数据包排队
- state UP:网络接口已启用
- qlen 1000:传输队列长度
- link/ether 00:1e:4f:c8:43:fc:接口的MAC(硬件)地址
- brd ff:ff:ff:ff:ff:ff:广播地址
- inet 192.168.0.24/24:IPv4地址
- brd 192.168.0.255:广播地址
- scope global eth0:全局有效
- valid_lft forever:IPv4地址的有效使用期限
- preferred_lft forever:IPv4地址的首选生存期
其他:
- dynamic enp0s25:地址是动态分配的
- inet6 fe80::2c8e:1de0:a862:14fd/64:IPv6地址
- scope link:仅在此设备上有效
- valid_lft forever:IPv6地址的有效使用期限
- preferred_lft forever:IPv6地址的首选生存期
# 设置IP
ip address add 192.168.0.123/24 dev eth0
# 删除配置的IP
ip address del 192.168.0.123/24 dev eth0
# 启用被禁用的网卡
ip link set eth0 up
# 禁用网卡
ip link set eth0 down
route [-nee]
route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]
观察的参数:
-n :不要使用通讯协议或主机名,直接使用 IP 或 port number;
-ee :使用更详细的信息来显示
增加 (add) 与删除 (del) 路由的相关参数:
-net :表示后面接的路由为一个网域;
-host :表示后面接的为连接到单部主机的路由;
netmask :与网域有关,可以设定 netmask 决定网域的大小;
gw :gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;
dev :如果只是要指定由那一块网络卡联机出去,则使用这个设定,后面接 eth0 等
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.1.1 0.0.0.0 UG 100 0 0 ens192
10.0.1.1 0.0.0.0 255.255.255.255 UH 100 0 0 ens192
10.0.8.0 0.0.0.0 255.255.255.0 U 100 0 0 ens192
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
route add -net 192.168.100.0 netmask 255.255.255.0 dev ens192
route add default gw 192.168.1.250s
route del -net 192.168.100.0 netmask 255.255.255.0 dev ens192
输出内容详解:
-
Destination
-
Genmask Destination, Genmask 这两个玩意儿就是分别是 network 与 netmask 啦!所以这两个咚咚就组合成为一个完整的网域啰!
-
Gateway:该网域是通过哪个 gateway 连接出去的?如果显示 0.0.0.0 表示该路由是直接由本机传送,亦即可以透过局域网络的 MAC 直接传讯;如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。
-
Flags
- U (route is up):该路由是启动的;
- H (target is a host):目标是一部主机 (IP) 而非网域;
- G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
- R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的旗标;
- D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由
- M (modified from routing daemon or redirect):路由已经被修改了;
- ! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)
-
Metric
-
Ref
-
Use
-
Iface 这个路由传递封包的接口
# 查看路由信息
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.1.1 0.0.0.0 UG 100 0 0 ens192
10.0.1.1 0.0.0.0 255.255.255.255 UH 100 0 0 ens192
10.0.8.0 0.0.0.0 255.255.255.0 U 100 0 0 ens192
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
$ ip route show
default via 10.0.1.1 dev ens192 proto static metric 100
10.0.1.1 dev ens192 proto static scope link metric 100
10.0.8.0/24 dev ens192 proto kernel scope link src 10.0.8.10 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
输出内容详解:
- scope link
- metric 1002:跳跃计数,确定网关的优先级,默认20,数值越小优先级越高
- proto kernel:该路由的协议,主要有 redirect,kernel,boot,static,ra 等,其中 kernel 指的是直接由核心判断自动设定
ip route [add|del] [IP或网域] [via gateway] [dev 装置]
选项与参数:
add|del :增加 (add) 或删除 (del) 路由的意思。
IP或网域:可使用 192.168.50.0/24 之类的网域或者是单纯的 IP ;
via :从那个 gateway 出去,不一定需要;
dev :由那个装置连出去,这就需要了!
mtu :可以额外的设定 MTU 的数值喔!
ip route add 192.168.5.0/24 dev eth0
ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
ip route add default via 192.168.1.254 dev eth0
ip route del 192.168.10.0/24
ip route del 192.168.5.0/24
# 通过 IP 地址查询路由包从哪条路由来
$ ip route get 10.0.8.13
10.0.8.13 dev ens192 src 10.0.8.10
cache
$ ip route get 119.75.216.20
119.75.216.20 via 10.0.1.1 dev ens192 src 10.0.8.10
cache
# 刷新路由表
ip route flush cache
这个显示网络统计数据则是 ip 命令非常重要的一个功能,很多时候,我们都依靠该功能来进行排除网络故障。
# 显示所有网络接口的统计数据
ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
361849729592 174114258 0 0 0 0
TX: bytes packets errors dropped carrier collsns
361849729592 174114258 0 0 0 0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:16:3e:08:08:55 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
32345193376 115901261 0 0 0 0
TX: bytes packets errors dropped carrier collsns
139742200499 114451909 0 0 0 0
输出重点内容详解:
-
<BROADCAST,MULTICAST,UP,LOWER_UP>
- BROADCAST 表示该接口支持广播;
- MULTICAST 表示该接口支持多播;
- UP 表示该网络接口已启用;
- LOWER_UP 表示网络电缆已插入,设备已连接至网络
- LOOPBACK
-
mtu 1500 最大传输单位(数据包大小)为1,500字节
-
qdisc pfifo_fast 用于数据包排队
-
state UP 网络接口已启用
-
mode DEFAULT 网卡模式(默认模式或者混杂模式)
-
qlen 1000 传输队列长度
-
link/ether 00:16:3e:08:08:55
-
brd ff:ff:ff:ff:ff:ff
-
RX:表示接收
- bytes 接收的字节数
- packets 接收的包数
- errors 接收的带有错误的包总数
- dropped 由于处理资源不足导致接收的丢弃的包数
- overrun 因接收溢出(环形缓冲区)导致丢失的包;通常如果接口溢出,则表示内核中存在严重问题,或者说服务器上该网络设备的处理设备太慢
- mcast 接收到的多播包数
-
TX:表示发送
- bytes 发送的字节数
- packets 发送的包数
- errors 发送的带有错误的包总数
- dropped 由于处理资源不足导致接发送的丢弃的包数
- carrier 因数据链路错误导致发送失败的包数
- collsns 因在网络上发送冲突而导致的失败数
# 获取一个特定网络接口的信息;在网络接口名字后面添加选项 ls 即可。使用多个选项 -s 会输出指定接口详细的信息;特别是在排除网络连接故障时,这会非常有用。
ip -s -s link ls eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:16:3e:08:08:55 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
32469801665 116402997 0 0 0 0
RX errors: length crc frame fifo missed
0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
140235841575 115066014 0 0 0 0
TX errors: aborted fifo window heartbeat transns
0 0 0 0 2
输出重点内容详解:
- RX errors:
- length
- crc
- frame
- fifo
- missed
- TX errors
- aborted
- fifo
- window
- heartbeat
- transns
# ip monitor
# manage ARP or NDISC cache entries
ip neighbour
10.0.1.1 dev ens192 lladdr 00:50:56:9b:20:dd DELAY
- STABLE neighbor 是有效的,但可能已经不可达,因此内核将在第一次传输时尝试对其进行检查
- REACHABLE neighbor 是有效的,并且可达
- DELAY 已将数据包发送到稳定 neighbor,并且内核正在等待确认
# Delete an ARP entry:
ip neighbour del (ip_address) dev interface
ip neighbour del 192.168.0.200 dev enp3s0
# Add an ARP entry:
ip neighbour add (ip_address) dev interface
ip neighbour add 192.168.0.200 dev enp3s0