在Linux系统的管理与维护中,网络端口的查看与管理是一项基础且至关重要的技能。无论是进行服务配置、故障排查还是安全审计,掌握如何高效地查看端口状态都是系统管理员和开发者的必备能力。本文将系统地介绍多种查看Linux端口号的方法,并扩展相关的网络连接知识。
端口是网络通信的端点,它与IP地址共同构成了网络通信的套接字(Socket)。在Linux系统中,端口号与运行中的进程(服务)紧密关联。要查看端口号,实质上就是查看哪些进程正在(Listening)或建立了哪些网络连接。
一、使用 netstat 命令查看端口
netstat(network statistics)是一个传统的网络工具,用于显示网络连接、路由表、接口统计等信息。尽管在一些新发行版中它正逐渐被 ss 命令取代,但它依然非常实用。
查看所有中的TCP端口:
netstat -tln
查看所有中的UDP端口:
netstat -uln
查看所有TCP连接(包括已建立的连接):
netstat -ta
在这些命令中,选项 -t 表示TCP,-u 表示UDP,-l 表示仅显示套接字,-n 表示以数字形式显示地址和端口号(不进行DNS解析),-a 表示显示所有套接字。
二、使用 ss 命令查看端口
ss(Socket Statistics)是 netstat 的现代替代品,它直接从内核空间获取信息,速度更快,并且提供了更丰富的过滤功能。
查看所有中的TCP端口:
ss -tln
查看所有中的UDP端口:
ss -uln
查看所有已建立的TCP连接:
ss -t state established
ss 命令的选项与 netstat 类似,但其过滤能力更强大。例如,要查看所有连接到特定端口(如80端口)的连接,可以使用:ss -t dst :80。
三、使用 lsof 命令查看端口
lsof(List Open Files)命令用于列出当前系统打开的文件。在Linux中,一切皆文件,网络连接也被视为文件。因此,lsof 也可以用来查看端口信息,其优势在于能直接显示占用端口的进程名称和PID。
查看哪个进程占用了80端口:
lsof -i :80
查看所有TCP端口:
lsof -i TCP -s TCP:LISTEN
查看用户root打开的所有网络连接:
lsof -i -u root
四、查看端口与服务的映射
在Linux中,许多常见端口号与服务的映射关系定义在 /etc/services 文件中。虽然直接查看此文件可以了解标准端口分配,但需要注意的是,实际运行的服务可能并未使用标准端口。
查看services文件中的端口列表:
cat /etc/services | less
下表列出了一些常见的网络服务及其默认端口号:
端口号 | 协议 | 服务名称 | 描述 |
---|---|---|---|
22 | TCP | SSH | 安全Shell协议,用于远程登录 |
80 | TCP | HTTP | 超文本传输协议 |
443 | TCP | HTTPS | 安全的超文本传输协议 |
53 | TCP/UDP | DNS | 域名系统服务 |
21 | TCP | FTP | 文件传输协议(控制) |
25 | TCP | SMTP | 简单邮件传输协议 |
3306 | TCP | MySQL | MySQL数据库服务 |
五、扩展知识:端口状态解析
在使用 netstat 或 ss 命令时,会看到不同的端口状态,理解这些状态对于网络故障排查至关重要。
LISTEN:表示套接字正在传入的连接请求。这是服务端等待客户端连接的正常状态。
ESTABLISHED:表示一个活动的网络连接已经建立,数据可以在此连接上进行传输。
TIME_WAIT:表示连接已关闭,但套接字仍在等待网络中残留的数据包,以防止混淆新的连接。这是TCP协议正常关闭的一个阶段。
CLOSE_WAIT:表示远程端已经关闭连接,但本地应用尚未关闭其套接字。大量此状态的连接可能意味着应用程序存在bug,未能正确释放连接。
总结
查看Linux端口号是系统管理中的常规操作。对于快速检查,ss -tln 或 netstat -tln 是最常用的命令。如果需要精确找出占用特定端口的进程,则 lsof -i :端口号 更为直接高效。理解端口的不同状态有助于深入分析网络连接的健康状况。熟练掌握这些工具和概念,将极大地提升您在Linux环境下的网络问题诊断与服务部署能力。