netstat
100%

故障排除 · 第 4 课

netstat

了解如何使用 ss 检查 Linux 套接字、监听器、队列和 TCP 状态。

传统的 netstat 工具显示套接字、路由和接口统计信息。在现代 Linux 中,ss 是首选的套接字检查工具,因为它能高效显示内核套接字状态,并随 iproute2 持续维护。

列出监听套接字

以数字形式显示监听中的 TCP 和 UDP 套接字,并在权限允许时显示所属进程:

$ sudo ss -lntup

-l 选择监听器,-n 避免名称查询,-t-u 分别选择 TCP 与 UDP,-p 请求进程数据。UDP 是无连接协议,因此未连接但已绑定的 UDP 套接字没有 TCP 风格的 LISTEN 握手。

排查套接字问题时为什么使用 -n

端口、端点与服务

本地套接字端点由地址、传输协议和端口组合而成。一个 TCP 连接由协议、源地址与端口以及目的地址与端口共同区分。/etc/services 把约定俗成的名称映射为数字,但不能证明当前由哪个进程占用某个端口,也不能证明该进程实际使用哪种应用层协议。

/etc/services 中的 https 443/tcp 条目能确定什么?

解读 TCP 状态

常见状态包括:

  • SYN-SENT:本地端点已发送连接请求,正在等待后续进展。
  • ESTAB:TCP 连接已经建立。
  • CLOSE-WAIT:对端已关闭其发送方向,但本地应用程序尚未关闭套接字。
  • TIME-WAIT:主动关闭连接的端点等待延迟报文段过期,并确保最终交换得到安全处理。

大量或持续增长的 CLOSE-WAIT 往往指向本地应用程序的清理行为。TIME-WAIT 是正常的协议状态;其数量和资源影响决定它在运维上是否值得担忧。

套接字处于 CLOSE-WAIT 时,哪一方仍需将其关闭?

解读队列

Recv-QSend-Q 的含义取决于状态与协议。在已建立的 TCP 套接字上,它们可以表示等待应用程序接收或等待确认传输的数据;在监听套接字上,队列字段描述的是连接积压状态,含义不同于应用程序载荷字节。

单次快照无法证实泄漏或瓶颈。应持续采样,并结合进程行为、应用程序延迟、重传和资源限制进行分析。

为什么单次出现较大的套接字队列不足以完成诊断?

筛选调查范围

将输出限制到相关协议、状态、端点或进程:

$ ss -tn state established
$ ss -ltn 'sport = :443'

监听器只能证明本地传输层已经就绪,无法证明远程可达性或应用程序健康。随后应根据症状执行适当的路由、防火墙、数据包、TLS 和应用程序测试。

443 端口上的 TCP 监听器无法证明什么?

课程已完成

你已完成 netstat

现在,你可以使用 ss 检查套接字状态,而不会把端口与应用程序混为一谈。

  • 以数字形式列出监听器及进程上下文。

  • 区分约定俗成的服务名称与运行时所有者。

  • 从本地端点视角解读 TCP 关闭状态。

  • 结合工作负载上下文持续采样队列。

  • 越过本地监听器,验证远程应用程序行为。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 故障排除