Ubuntu 22.04 iproute2(ip/ss) 安装与命令参数详解
在 Ubuntu 22.04 上安装 iproute2(ip/ss)并逐参数实测 ip、ss 常用命令的输入输出,涵盖地址、链路、路由、邻居与套接字排障。
Ubuntu 22.04 iproute2(ip/ss) 安装与命令参数详解
目标:在 Ubuntu 22.04 上安装 iproute2,并逐参数实测
ip与ss两大命令族常用命令的输入与输出,覆盖地址查看、链路状态、路由、ARP 邻居表、套接字监听与连接排障。本文所有命令与输出均为 Ubuntu 22.04(iproute2-5.15.0)实测回显。
环境信息
- 操作系统:Ubuntu 22.04 LTS,内核 5.15.0 系列
- iproute2 版本:iproute2-5.15.0
- 网卡:eth0(veth 虚拟网卡),IP
172.22.0.2/16,MAC72:18:8c:51:b4:75,接口别名eth0@ifN - 对端主机:共处
172.22.0.0/16网段,IP172.22.0.3,监听 8000 端口(python3 简易 HTTP) - 说明:命令输出中的
# Server之类头尾为采集标注,非命令本身输出
工具概述
iproute2 是现代 Linux 网络配置与诊断的基础工具集,随内核 netlink 机制工作。其中:
ip:统一管理地址(addr)、链路(link)、路由(route)、邻居(neigh/ARP)、规则(rule)等,取代 ifconfig 与 route。ss:显示套接字(socket)统计、监听端口与连接状态,取代 netstat。
相比传统 net-tools,iproute2 输出信息更细、支持 JSON 机器可读、支持网络命名空间,是排查网络问题的首选。
安装
在线安装(apt)
Ubuntu 22.04 系统默认已预装 iproute2,若需显式安装或升级:
sudo apt update
sudo apt install -y iproute2
安装完成后验证:
ip -V
ip utility, iproute2-5.15.0, libbpf 2.0
ss -V
ss utility, iproute2-5.15.0
离线安装(.deb 包)
在无法联网的服务器上,可先在可联网机器下载 .deb 及其依赖,再拷贝安装:
# 在可联网机器上先下载(仅下载不安装)
mkdir -p /opt/netdiag-offline
cd /opt/netdiag-offline
apt-get download iproute2 iproute2-doc
# 将 .deb 传到目标机后,本地离线安装
sudo dpkg -i iproute2_*.deb
# 若报依赖缺失,再补齐 lib 依赖
sudo dpkg -i libelf1_*.deb libmnl0_*.deb 2>/dev/null || true
ip 命令族实测
ip addr show —— 查看全部接口的 IP 地址
用途:列出所有网卡的 IPv4/IPv6 地址、掩码、广播地址与有效期。
ip addr show
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@if980: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 72:18:8c:51:b4:75 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.22.0.2/16 brd 172.22.255.255 scope global eth0
valid_lft forever preferred_lft forever
字段解读:mtu 1500 最大传输单元;qdisc noqueue 排队规则;state UP 接口状态;link/ether 为 MAC 地址;inet 为 IPv4 与前缀长度;valid_lft/preferred_lft 为地址有效期(宿主机地址为 forever)。
ip addr show eth0 —— 查看指定接口地址
用途:只看某一块网卡的地址,避免输出干扰。
ip addr show eth0
2: eth0@if980: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 72:18:8c:51:b4:75 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.22.0.2/16 brd 172.22.255.255 scope global eth0
valid_lft forever preferred_lft forever
ip -br addr —— 精简模式查看地址
用途:每接口一行,适合快速总览与脚本解析。
ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0@if980 UP 172.22.0.2/16
ip link show —— 查看链路层状态
用途:查看接口的链路层标志(UP/DOWN)、MAC、MTU,判断物理/虚拟链路是否在线。
ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0@if980: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 72:18:8c:51:b4:75 brd ff:ff:ff:ff:ff:ff link-netnsid 0
ip -s link —— 查看收发统计
用途:查看每个接口收发字节/报文/错误/丢包,判断是否存在网卡层丢包。
ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped missed mcast
429955 5793 0 0 0 0
TX: bytes packets errors dropped carrier collsns
429955 5793 0 0 0 0
2: eth0@if980: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 72:18:8c:51:b4:75 brd ff:ff:ff:ff:ff:ff link-netnsid 0
RX: bytes packets errors dropped missed mcast
72593021 32186 0 0 0 0
TX: bytes packets errors dropped carrier collsns
3492898 28492 0 0 0 0
字段解读:RX/TX 为收发方向;bytes 字节数、packets 报文数、errors 错误数、dropped 丢包数(此处 0 表示健康)、mcast 组播数。
ip route show —— 查看路由表
用途:查看默认路由与直连网段路由,判断流量是否可达目标网段。
ip route show
default via 172.22.0.1 dev eth0
172.22.0.0/16 dev eth0 proto kernel scope link src 172.22.0.2
字段解读:第一行为默认路由(去往任何未匹配网段都走 172.22.0.1),第二行为直连网段(Kernel 自动生成,proto kernel)。
ip route get 172.22.0.3 —— 查看到达某 IP 的实际转发
用途:模拟内核为某目的选路,返回实际出口网卡与实际源地址,排障时非常实用。
ip route get 172.22.0.3
172.22.0.3 dev eth0 src 172.22.0.2 uid 0
cache
ip neigh show —— 查看 ARP/邻居表
用途:查看二层地址解析结果(IP → MAC 映射),判断同网段主机是否可达。
ip neigh show
172.22.0.3 dev eth0 lladdr 72:18:8c:51:b4:75 STALE
172.22.0.1 dev eth0 lladdr be:d6:0f:cf:f5:0c STALE
字段解读:lladdr 为对端 MAC,STALE 表示缓存已过期限但未失效。
ip -j 输出 JSON(配合 -p 缩进)
用途:-j 输出机器可读 JSON(配 -p 可格式化缩进),供脚本解析。
ip -j -p addr show eth0
[ {
"ifindex": 2,
"ifname": "eth0",
"flags": [ "BROADCAST", "MULTICAST", "UP", "LOWER_UP" ],
"mtu": 1500,
"qdisc": "noqueue",
"operstate": "UP",
"group": "default",
"addr_info": [ {
"family": "inet",
"local": "172.22.0.2",
"prefixlen": 16,
"broadcast": "172.22.255.255",
"scope": "global",
"dynamic": false,
"label": "eth0"
} ]
} ]
ss 命令族实测
ss -tlnp —— 查看监听端口(TCP、listen、数字、进程)
用途:最常用的查端口占用命令,列出监听中的 TCP 端口与对应进程。
ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.11:47237 0.0.0.0:* users:(("dnsmasq",pid=321,fd=3))
LISTEN 0 5 0.0.0.0:8000 0.0.0.0:* users:(("python3",pid=3219,fd=3))
参数解读:-t TCP、-l 仅监听、-n 数字形式不反解服务名、-p 显示进程名与 PID。127.0.0.11 是 Docker 内嵌 DNS。
ss -s —— 查看汇总统计
用途:快速了解当前整机 socket 总数、TCP 各状态分布。
ss -s
Total: 7
TCP: 738 (estab 0, closed 736, orphaned 0, timewait 1)
Transport Total IP IPv6
RAW 0 0 0
UDP 1 1 0
TCP 2 2 0
INET 3 3 0
FRAG 0 0 0
解读:closed 736 为内核已关闭 socket 的历史计数,非常在连接;estab 0 表示当前无 ESTABLISHED 连接。
ss -lnt —— 纯数字监听端口
用途:只列监听中的 TCP 端口(数字形式),省略进程列,脚本友好。
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 4096 127.0.0.11:47237 0.0.0.0:*
LISTEN 0 5 0.0.0.0:8000 0.0.0.0:*
ss -tunap —— 全部 TCP/UDP 连接含进程
用途:查看包括对外建立的 TCP、UDP 在内的全部连接,并带端口与进程。
ss -tunap
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.11:52662 0.0.0.0:* users:(("dnsmasq",pid=321,fd=3))
tcp LISTEN 0 5 0.0.0.0:8000 0.0.0.0:* users:(("python3",pid=3219,fd=3))
tcp LISTEN 0 4096 127.0.0.11:47237 0.0.0.0:* users:(("dnsmasq",pid=321,fd=3))
tcp TIME-WAIT0 0 172.22.0.2:8000 172.22.0.3:... users:(("",))
参数解读:-t TCP、-u UDP、-n 数字、-a 全部状态(含监听与已建立)、-p 进程。
ss -tanp —— 全部 TCP 连接含进程与对外连接
用途:查看包括 ESTABLISHED 对外连接在内的全部 TCP 连接状态。
ss -tanp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 5 0.0.0.0:8000 0.0.0.0:* users:(("python3",pid=3219,fd=3))
LISTEN 0 4096 127.0.0.11:47237 0.0.0.0:* users:(("dnsmasq",pid=321,fd=3))
ESTAB 0 0 172.22.0.2:60214 172.22.0.3:8000 users:(("python3",pid=3219,fd=6))
TIME-WAIT 0 0 172.22.0.2:8000 172.22.0.3:59982 users:(("",))
解读:ESTAB 行为当前正在进行的已建立连接(本机是 HTTP 服务端,故与对端 8000 建立连接)。
ss -t state established ( dport = :8000 )
用途:按状态与目标端口过滤连接,快速定位到具体业务连接的成员。
ss -t state established ( dport = :8000 )
Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0 0 172.22.0.2:60214 172.22.0.3:8000 users:(("python3",pid=3219,fd=6))
参数解读:state established 限定为 ESTABLISHED 状态,(dport = :8000) 过滤目标端口为 8000。
ss -i —— 查看内核套接字内部信息
用途:显示拥塞算法、窗口、往返时间等内核级信息,适合深入调优。
ss -i
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
(采集时刻无可测内部信息的活动连接,故仅输出表头。)
帮助输出
ip --help(节选)
ip --help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
where OBJECT := { link | address | addrlabel | route | rule | neigh |
ntable | tunnel | tuntap | maddress | mroute | mrule |
monitor | xfrm | netns | l2tp | tcp_metrics | token | macsec }
where COMMAND := { show | add | del | flush | get | help }
ss --help(节选)
ss --help
Usage: ss [ OPTIONS ]
ss [ OPTIONS ] [ FILTER ]
-n, --numeric don't resolve service names
-r, --resolve resolve host names
-a, --all display all sockets
-l, --listening display listening sockets
-i, --info show internal tcp information
-e, --extended show detailed socket information
-m, --memory show socket memory usage
-p, --processes show process using socket
-s, --summary show socket usage summary
-t, --tcp display only TCP sockets
-u, --udp display only UDP sockets
常见问题
ip命令不存在:通常因未安装 iproute2,按上文apt install iproute2即可。- 端口被反解为服务名(如 8000 变成 irdmi):Ubuntu 机若无
/etc/services则端口保持数字;某些系统会反解。排查时建议恒加-n关闭反解。 ss看不到连接:确认是否漏加-a(全部状态)或-t/-u协议限定;仅列监听用-l。- IP 地址有效期为 forever:静态/容器地址默认永久;DHCP 地址才有具体有效期。
参考链接
- Ubuntu 手册:
man ip、man ip-address、man ss - iproute2 官网:https://kernel.org/pub/linux/utils/net/iproute2/
- net-tools 与 iproute2 对照表见《net-tools(ifconfig/netstat/route)Ubuntu 22.04 安装与命令详解》