Ubuntu 22.04 iproute2(ip/ss) 安装与命令参数详解

在 Ubuntu 22.04 上安装 iproute2(ip/ss)并逐参数实测 ip、ss 常用命令的输入输出,涵盖地址、链路、路由、邻居与套接字排障。

Linux 网络诊断与调试iproute2Linux命令行网络诊断2026/10/06

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,MAC 72:18:8c:51:b4:75,接口别名 eth0@ifN
  • 对端主机:共处 172.22.0.0/16 网段,IP 172.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

用途:查看接口的链路层标志(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
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

常见问题

  1. ip 命令不存在:通常因未安装 iproute2,按上文 apt install iproute2 即可。
  2. 端口被反解为服务名(如 8000 变成 irdmi):Ubuntu 机若无 /etc/services 则端口保持数字;某些系统会反解。排查时建议恒加 -n 关闭反解。
  3. ss 看不到连接:确认是否漏加 -a(全部状态)或 -t/-u 协议限定;仅列监听用 -l。
  4. IP 地址有效期为 forever:静态/容器地址默认永久;DHCP 地址才有具体有效期。

参考链接