在管理和维护基于CentOS操作系统的服务器时,网络端口的监控与诊断是一项至关重要的日常工作,UDP(User Datagram Protocol,用户数据报协议)作为一种无连接的传输层协议,以其低开销和快速传输的特性,被广泛应用于DNS(域名系统)、NTP(网络时间协议)、DHCP(动态主机配置协议)、SNMP(简单网络管理协议)以及在线视频流和语音通话等场景,由于UDP不建立持久的连接,其状态的监控方式与TCP有所不同,掌握在CentOS系统中有效查看UDP端口状态的方法,对于系统管理员排查网络问题、确保服务安全以及优化系统性能具有不可或缺的作用,本文将详细介绍几种主流且高效的命令行工具,帮助您全面了解如何在CentOS中查看UDP端口。

使用 ss 命令:现代高效的选择
ss(socket statistics)是 iproute2 工具包的一部分,它被设计用来取代经典的 netstat 命令,相较于 netstat,ss 的执行速度更快,尤其是在处理大量网络连接时,其性能优势更为明显,它能够直接从内核获取信息,避免了 netstat 通过 /proc 文件系统读取数据所带来的性能开销,在所有现代Linux发行版(包括CentOS 7及更高版本)中,ss 都是首选的网络状态查看工具。
要查看当前系统所有正在监听的UDP端口,可以使用以下命令组合:
ss -ulnp
为了更好地理解这个命令,下表对其参数进行了详细分解:
| 参数 | 全称/含义 | 描述 |
|---|---|---|
-u |
UDP | 显示UDP套接字。 |
-l |
Listening | 仅显示处于监听状态的套接字,对于UDP,这表示有进程绑定了该端口并准备接收数据。 |
-n |
Numeric | 不解析服务名称,直接显示端口号,这使得输出更快速、更清晰。 |
-p |
Processes | 显示使用该套接字的进程信息(PID和进程名称)。 |
输出示例与解读:
执行 ss -ulnp 后,您可能会看到类似以下的输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=682,fd=3))
UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=1234,fd=6))
UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=682,fd=4))
- State: 对于UDP,状态通常是
UNCONN(未连接)。 - Recv-Q / Send-Q: 分别表示接收队列和发送队列中的数据包数量,通常为0。
- Local Address:Port: 本地监听的IP地址和端口号。
0.0.0:68表示监听在所有网络接口的68端口(DHCP客户端服务),而0.0.1:323表示仅监听在本地回环地址的323端口(Chrony时间同步服务)。 - Peer Address:Port: 对于监听状态的套接字,此列显示为 或
0.0.0:*。 - Process: 这一列(由
-p参数提供)清晰地指出了是哪个进程(chronyd或dhclient)以及其进程ID(PID)正在使用该端口。
使用 netstat 命令:经典传统的工具
netstat 是一个历史悠久且广为人知的网络工具,尽管 ss 是更现代的推荐选择,但许多系统管理员仍然习惯于使用 netstat,在较旧的CentOS系统(如CentOS 6)上,它是默认的工具,在CentOS 7/8上,它可能默认未安装,您可以通过 yum 或 dnf 进行安装:
sudo yum install net-tools
查看UDP监听端口的 netstat 命令与 ss 非常相似:

netstat -ulnp
这里的参数 -u, -l, -n, -p 与 ss 命令中的含义完全相同。netstat 的输出格式也与 ss 类似,提供了进程名、PID、协议、本地地址和外部地址等信息,虽然功能上可以满足需求,但在连接数庞大的服务器上,netstat 的响应速度会明显慢于 ss。
使用 lsof 命令:进程视角的深度洞察
lsof(List Open Files)是一个功能极其强大的工具,它的核心理念是“在Unix中,一切皆文件”,网络套接字也被视为一种文件,lsof 可以用来列出当前系统打开的网络连接,并直接关联到具体进程。
要查看所有UDP类型的网络“文件”,可以使用:
sudo lsof -iUDP
-i 参数用于筛选网络文件,后面跟 UDP 表示只显示UDP协议相关的条目,使用 sudo 是因为查看所有进程信息通常需要管理员权限。
输出示例与解读:
lsof 的输出信息非常丰富:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 682 chrony 3u IPv4 18212 0t0 UDP localhost:323
chronyd 682 chrony 4u IPv6 18214 0t0 UDP localhost:323
dhclient 1234 root 6u IPv4 25678 0t0 UDP *:bootps
- COMMAND/PID/USER: 分别是进程名、进程ID和运行用户。
- FD: 文件描述符。
- TYPE: 文件类型,这里是
IPv4或IPv6。 - NAME: 显示了协议(UDP)、地址和端口。
*:bootps表示监听在所有接口的bootps端口(即DHCP服务端口67)。
lsof 的一个巨大优势是,即使一个UDP服务刚刚启动,尚未收到任何数据包,lsof 也能准确地显示出该进程已经绑定了端口,而 ss 或 netstat 有时可能不会立即显示一个“空闲”的UDP监听端口。

方法对比与小编总结
为了帮助您根据不同场景选择最合适的工具,下表对上述三种方法进行了小编总结对比:
| 工具 | 主要用途 | 常用命令 | 优点 | 缺点 |
|---|---|---|---|---|
ss |
快速查看套接字统计信息 | ss -ulnp |
速度快,信息详细,现代系统标配 | 输出格式对新手可能稍显复杂 |
netstat |
传统网络状态查看 | netstat -ulnp |
兼容性好,广为人知 | 性能较差,在新系统上可能需手动安装 |
lsof |
列出进程打开的文件(含网络) | lsof -iUDP |
能直接关联到进程,信息最全面,能发现“空闲”端口 | 执行速度相对较慢,输出信息量大 |
在实际操作中,建议将 ss 作为日常快速检查的首选工具,当需要深入排查是哪个具体进程占用了端口,或者 ss 的输出不符合预期时,可以借助 lsof 进行更深入的分析,而 netstat 则可以作为备用或在与习惯使用它的团队协作时使用。
相关问答FAQs
为什么我使用 ss -ulnp 或 netstat -ulnp 有时看不到某个UDP服务端口,但该服务确实在运行?
解答: 这是UDP协议无连接特性导致的一个常见现象,一个UDP服务进程启动后,它会向内核申请并绑定(bind)一个端口。ss 和 netstat 在显示监听状态时,通常依赖于内核中活跃的套接字哈希表,如果一个UDP端口绑定了之后,很长时间没有收到或发送任何数据包,它可能不会出现在 ss -l 或 netstat -l 的监听列表中,因为它实际上处于“空闲”状态,而 lsof -iUDP 命令是通过遍历所有进程的文件描述符来查找信息,因此它能准确地发现哪个进程持有了这个端口的绑定,无论该端口是否活跃,当您怀疑服务在运行但 ss 看不到时,使用 sudo lsof -i :<端口号> 是一个更可靠的确认方法。
我已经确认服务正在监听某个UDP端口,但从外部网络无法访问,应该如何排查?
解答: 服务在本地监听并不意味着外部网络可以访问,这通常意味着中间存在网络层面的拦截,排查步骤应遵循从内到外的原则:
- 检查本地防火墙:CentOS 7/8 默认使用
firewalld,首先检查防火墙是否允许该UDP端口的流量,使用命令sudo firewall-cmd --list-ports查看已开放的端口列表,如果您的端口(例如123/udp)不在其中,需要使用sudo firewall-cmd --add-port=123/udp --permanent添加,然后执行sudo firewall-cmd --reload使配置生效,对于更老的系统使用iptables,则需用sudo iptables -L -n -v | grep 123检查规则。 - 检查安全组/网络ACL:如果您的CentOS服务器部署在云平台(如阿里云、腾讯云、AWS)上,云平台本身还有一层安全组策略,您必须登录云控制台,确保在对应的安全组入方向规则中,允许了目标UDP端口的流量。
- 检查中间网络设备:如果服务器位于本地数据中心,还需要检查服务器前方的物理防火墙、路由器等网络设备,确认它们没有阻止该UDP端口的通信。
- 使用
nmap进行外部扫描:可以从另一台机器上使用nmap -sU -p <端口号> <服务器IP>来对目标服务器进行UDP端口扫描,如果扫描结果显示open或open|filtered,说明防火墙可能放行;如果显示closed,则说明收到了ICMP端口不可达的消息,通常意味着防火墙或服务本身未监听,需要注意的是,UDP扫描通常比较慢且结果不如TCP扫描准确。