Linux ss 命令详解与 Netlink 原理

张开发
2026/4/3 15:03:37 15 分钟阅读
Linux ss 命令详解与 Netlink 原理
Linuxss命令详解与 Netlink 原理目录概述一、ss是做什么的二、常用场景与命令示例三、ss -tinp参数拆解四、实现原理Netlink 与netstat对比五、数据流示意六、Netlink 工作机制简述七、ss/netstat/lsof/ip对比八、选项按场景速查九、实战组合速记十、权限说明十一、典型排查场景与输出行字段十二、网络命名空间中的ss附录选项组合思维导图ASCII免责声明概述sssocket statistics属于iproute2套件用于查看 Linux 上TCP/UDP/UNIX等套接字的连接、监听与内核侧状态。相比传统netstat它通常更快、在部分场景下信息更细如 TCP 内部统计需配合-i是现代发行版中排查网络与端口的首选工具之一。iproute2 工具族关系示意┌─────────────────────────────┐ │ iproute2 套件 │ └─────────────────────────────┘ ┌────────────┬────────────┬────────────┬────────────┐ ▼ ▼ ▼ ▼ ▼ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ ip │ │ ss │ │ tc │ │bridge│ │ … │ │地址/路由│ │套接字 │ │流量控制│ │桥 │ │ │ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘本文聚焦ss查接口/路由请配合ip addr/ip route。一、ss是做什么的能力说明查看连接当前TCP/UDP及 RAW、UNIX 等连接与状态状态LISTEN、ESTAB、TIME-WAIT等端口与进程谁监听/占用某端口-p常需 root内核细节RTT、重传、拥塞窗口等-i依内核与版本而异1.1 在诊断链路中的位置示意应用连不上 / 端口冲突 / 连接过多 │ ├─► ss -lntp / ss -tnp ← 套接字与进程本文 ├─► ip addr / ip route ← 地址与路由 ├─► ping / mtr / tcpdump ← 连通与抓包 └─► iptables/nft / conntrack ← 防火墙与跟踪表二、常用场景与命令示例2.1 查看监听端口最常用ss-l# 所有监听套接字ss-ltnp# TCP 数字端口 进程排查端口占用参数含义-llistening仅监听-tTCP-n数字形式显示端口/IP不解析服务名/主机名-p显示进程PID/名称2.2 查看已建立 TCP 连接ss-tnss-tnp# 带进程2.3 按端口过滤ss-lntpsport:80# 或ss-lntp|grep:802.4 UDPss-unss-unlp# UDP 监听 进程2.5 按 TCP 状态过滤ss-tanstate established ss-tanstate time-wait状态名以本机ss为准man ss中state可写established、time-wait等关键字。2.6 整体统计ss-s# 各协议套接字数量摘要2.7 TCP 状态与排查关联速查表state过滤关键字示例常见含义排查时可能关注点listen监听服务是否起来、绑定地址是否为0.0.0.0/::established已建立活跃连接数、是否异常暴增syn-recv半连接队列SYN 洪水、积压time-wait主动关闭后等待数量过多与端口耗尽、短连接服务close-wait对端已关、本端未关应用未 close、句柄泄漏fin-wait-1/2断开过程中长时间停留可能需结合抓包完整状态机以 TCP 协议与内核实现为准上表便于和ss state …对照使用。三、ss -tinp参数拆解等价于ss -t -i -n -p选项作用-t仅TCP-i显示TCP 内部信息如 RTT、重传、cwnd等具体字段因内核而异-n不解析服务名与主机名便于脚本与快速输出-p显示进程PID、命令名、fd查看他人进程通常需root典型用途性能与连通性排查慢连接、重传、队列并结合进程定位归属。输出示意结构说明非真实完整行ESTAB 0 0 192.168.1.10:22 192.168.1.5:54321 ... 内核 TCP 信息行rtt / retrans 等视 -i 与版本而定 ... users:((sshd,pid1022,fd3))常用变体ss-tinpstate established ss-lntp# 监听场景更常用四、实现原理Netlink 与netstat对比4.1netstat传统路径读取/proc/net/tcp、/proc/net/udp等文本接口结合/proc/pid/fd等解析进程关联特点实现简单连接数很大时读/解析多次可能偏慢部分细节不如 Netlink 路径统一。4.2ssNetlink 路径通过Netlink如NETLINK_INET_DIAG等向内核查询套接字表以结构化消息批量返回减少反复扫/proc文本的开销。对比项netstatss主要数据来源/proc/net/*等内核 Netlink典型性能连接多时偏慢通常更快TCP 扩展信息有限-i可暴露更多内核侧指标视版本维护趋势多系统标为 legacy推荐4.3 两条路径对照ASCIInetstat 路径 ss 路径 ┌──────────────┐ ┌──────────────┐ │ 读 /proc/net │ │ Netlink 套接字 │ │ 文本解析 │ │ 结构化请求/应答 │ └──────┬───────┘ └──────┬───────┘ │ │ └──────────► 内核 socket 表 ◄──┘五、数据流示意┌─────────────┐ Netlink 消息 ┌─────────────┐ │ 用户态 ss │ ◄────────────────────────► │ Linux 内核 │ └─────────────┘ 请求 / 应答二进制 └──────┬──────┘ │ │ │ 格式化输出 │ 维护 ▼ ▼ 终端表格/文本 TCP/UDP/socket 子系统 连接表、监听队列、状态机等5.1 Netlink 交互时序Mermaidsocket 子系统内核 Netlink用户态 sssocket 子系统内核 Netlink用户态 ss发送诊断请求如 INET_DIAG查询套接字表/统计返回套接字条目多条 Netlink 应答消息解析并打印表格六、Netlink 工作机制简述Netlink是 Linux 下用户态与内核态之间的一种基于套接字的 IPC常用于网络配置、路由、防火墙与套接字诊断等。步骤说明1用户态程序创建Netlink socket2构造请求消息发往内核对应子系统3内核处理后将结果以多条 Netlink 消息返回4ss解析消息并打印为人类可读表格与「逐文件读/proc」相比通常系统调用次数更少、数据更结构化。七、ss/netstat/lsof/ip对比工具主要定位典型强项与ss关系ss套接字统计、连接状态快、状态过滤、-iTCP 细节本文主角netstat传统网络状态查看习惯兼容、老文档多功能重叠优先sslsof列举打开的文件与 fd任意类型文件描述符、进程视角可查网络连接但不如ss专精套接字表ipiproute2接口、地址、路由、邻居等二层/三层配置与诊断与ss同属 iproute2互补而非替代选型提示查「谁在监听/谁连了谁」→ss查路由/策略路由 →ip route查某进程打开了哪些文件 →lsof。7.1 多维度对照定性高 / 中 / 低维度ssnetstatlsofip套接字列表速度与规模化高中中—TCP 内核扩展信息-i高低——按进程反查 fd / 文件中-p中高—路由/接口/邻居———高老文档与脚本兼容中高高中「—」表示非该工具主战场。八、选项按场景速查8.1 协议选项含义-tTCP-uUDP-wRAW-xUNIX 域套接字-4/-6仅 IPv4 / IPv6ss-tu# TCP UDP8.2 输出控制选项含义-n数字地址与端口-p进程信息-iTCP 内部信息-m内存/缓冲相关信息-o计时器等信息如 keepalive视连接而定-e扩展信息如 uid、inode 等依版本8.3 过滤状态 / 地址 / 端口ss-tanstate established ss-tanstate time-wait ss-tansport:80 ss-tandport:443 ss dst192.168.1.1008.4 其它选项含义-l仅监听-a所有监听 非监听依默认行为与组合-s统计摘要-H不打印表头适合脚本完整选项以man ss与当前 iproute2 版本为准。九、实战组合速记需求命令监听 进程ss -lntp已建立 TCP 细节 进程ss -tinp state established某端口谁监听ss -lntp sport :3306TIME-WAIT 数量粗略ss -tan state time-wait | wc -l全局摘要ss -s脚本去表头ss -H -tan state established助记l监听、t/u协议、n数字、p进程、i内核 TCP 信息、s统计、H无表头。十、权限说明身份一般可见范围普通用户套接字列表通常可见他人进程的-p信息常受限root可看到更完整的进程与套接字关联十一、典型排查场景与输出行字段11.1 场景 → 命令表场景建议命令端口被占用ss -lntp sport :port本机连了哪些外部地址ss -tnp state established半连接是否堆积ss -tan state syn-recvTIME-WAIT 是否过多ss -tan state time-wait | wc -l怀疑应用未关连接ss -tan state close-wait结合 TCP 重传/RTTss -tinp state established11.2 默认表头中 Recv-Q / Send-Q常见解释TCP 典型表头State Recv-Q Send-Q Local Address:Port Peer Address:Port列常见含义简述Recv-Q接收队列中未取走的字节数已入内核、应用尚未readSend-Q发送队列中已提交尚未确认发出/确认的数据量与内核缓冲、对端窗口有关LISTEN时Recv-Q常与已完成三次握手、等待accept的连接数相关Send-Q常为监听套接字 backlog 上限相关具体以内核与文档为准。出现Recv-Q 很大而应用慢可能应用读慢或阻塞Send-Q 堆积可能对端慢、窗口小、网络差需结合-i、抓包分析。十二、网络命名空间中的ss容器、ip netns等场景下套接字表是按命名空间隔离的。# 在指定 netns 中执行 ss示例sudoipnetnsexecns_namess-lntp宿主机上执行的ss默认只看到默认命名空间排查Docker/K8s内监听端口时需进入相应 netns 或在容器内执行ss。附录选项组合思维导图ASCIIss │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ 协议 -t/u/w/x 范围 -l / -a 输出 -n -p -i -m -o │ │ │ └────────┬──────────┴────────┬────────┘ ▼ ▼ state / sport / dport / src / dst │ ▼ 终端输出 或 管道 wc/grep免责声明本文根据公开技术资料整理用于学习与排障ss输出字段、Netlink 族与内核版本相关行为以man ss、iproute2 文档及本机实测为准。主题Linux 网络诊断 —ss用法、原理与工具选型。

更多文章