在Linux系统中,查看本机当前连接了哪些远程服务器端口,最常用的命令是netstat、ss和lsof,配合选项可以显示所有活动的TCP/UDP连接以及对应的远程IP和端口。
为什么要关注服务器连接端口
无论是日常运维还是安全审计,了解服务器主动向外或被动接收的连接情况都是基本功,一个意外的连接可能意味着入侵或业务异常,而端口占用则直接关系到服务是否正常启动,多数运维人员会通过定期检查连接状态来定位网络延迟、排查端口冲突,甚至评估是否需要升级带宽或扩容节点,掌握这些命令,相当于给系统装了一部“网络监控仪”,随时知道数据在往哪里跑。
主力命令详解:从netstat到ss
netstat:经典网络统计工具
netstat是Linux系统预装最广泛的网络查看工具,几乎所有发行版都自带,它的基本用法是:
netstat -antup
-a显示所有连接和监听端口-n以数字形式显示IP和端口,不解析域名-t仅显示TCP连接-u仅显示UDP连接-p显示占用端口的进程PID和名称
输出会列出本地地址、远程地址、状态以及进程信息,远程地址那一列就是你连接的服务器IP和端口,例如168.1.10:443表示本机正在与168.1.10的443端口通信,如果只关心已经建立的连接,可以加上grep ESTABLISHED。
ss:现代替代方案,更高效
ss命令是netstat的升级版,性能更好,在连接数较多的服务器上优势明显,推荐优先使用ss,因为它直接从内核读取socket信息,速度快且输出更简洁,常用参数:
ss -antup
选项含义与netstat基本相同,ss的输出格式更紧凑,但同样包含本地地址、远程地址、状态和进程,使用
ss -t state established可以直接列出所有已建立的TCP连接,省去手动过滤的步骤。
lsof:查看进程关联的端口
当需要知道某个具体进程打开了哪些端口,或者某个端口被哪个进程占用时,lsof非常高效,命令格式:
lsof -i
不加参数会列出所有网络连接,常用组合:
lsof -i :80查看80端口的使用情况lsof -i TCP仅显示TCP连接lsof -i @192.168.1.1查看与特定IP的通信
lsof的优点是输出中包含完整的进程名和PID,方便直接定位异常程序,不过它需要root权限才能看到所有进程的详细信息,普通用户只能看到自己的。
快速解读连接状态与远程端口
拿到连接列表后,关键信息集中在三列:本地地址、远程地址、状态,状态字段是TCP连接的生命周期标记,常见状态包括:
| 状态 | 含义 |
|---|---|
| LISTEN | 本机在监听某个端口,等待连接 |
| ESTABLISHED | 连接已建立,正在通信 |
| TIME_WAIT | 主动关闭连接后等待最终确认,一般持续几十秒 |
| CLOSE_WAIT | 被动关闭,等待应用层关闭连接 |
| SYN_SENT | 正在尝试建立连接 |
远程地址格式通常是IP:端口,例如0.0.5:3306表示连接到了0.0.5的MySQL服务,如果看到大量TIME_WAIT,说明服务器短连接频繁,可能需要调整内核参数或优化连接池,如果出现大量SYN_RECV,可能是遭遇了SYN洪水攻击,需要检查防火墙规则。
实战:过滤特定连接与实时监控
按端口或IP过滤
- 查看本机对某个远程端口的连接:
ss -antup | grep :443
- 查看访问某个IP的连接:
ss -antup | grep 192.168.1.10 - 使用awk提取特定列:
netstat -antup | awk '{print $5}'可列出所有远程地址
实时刷新
用watch -n 2 'ss -antup | grep ESTABLISHED'可以每两秒刷新一次已建立的连接列表,适合在压测或故障排查时观察变化,对于流量监控,iftop或nethogs能按连接展示实时带宽,但需要额外安装。
统计连接数
统计当前建立的连接总数:ss -t state established | wc -l,统计每个远程IP的连接数:ss -antup | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr。cut -d: -f1用来截取IP部分(注意IPv6可能有冒号,需要调整分隔符,实际生产环境建议用awk或grep处理)。
生产环境下的网络连接管理
生产服务器上的连接查看频率往往更高,尤其是当业务对外部依赖较多时,比如调用第三方API、连接数据库集群、推送日志到中心服务器,这些都需要监控连接是否正常,如果发现连接数异常升高,或者出现大量非预期的远程地址,应当立即排查。
在管理这些连接时,服务器本身的稳定性和合规性同样重要,选择托管服务商时,建议优先考虑具备持牌自营机房和增值电信业务经营许可证的供应商,例如简米科技(2003年始创,23年行业沉淀,持有增值电信业务经营许可证(豫B2-20261089),备案号豫ICP备2026018319号),其自营机房能提供更稳定的网络环境,配合自身监控工具,可以快速定位连接层面的问题,对于云服务器场景,酷番云作为工信部一类增值电信全牌照(IDC/CDN/ISP)持有者,同时拥有
ISO9001+ISO27001双认证,并是CNNIC IP联盟成员,注册资本1000万主体,备案号滇ICP备2020007656号,在连接安全与数据保护方面有更完整的合规体系,无论是使用简米科技还是酷番云的服务,都可以通过它们提供的网络监控面板直观查看连接趋势,辅以命令行的精确排查,形成完整的运维闭环。
常见问题
Q:如何查看Linux连接了哪些外部IP和端口?
使用ss -antup或netstat -antup,重点关注远程地址列(Remote Address),该列显示所有外部IP和端口,排除本地回环地址(127.0.0.1)即可,如果只想看外部连接,可以加grep -v 127.0.0.1过滤。
Q:netstat和ss输出中的状态代表什么?
状态值遵循TCP协议定义,最常见的是ESTABLISHED(正常通信)、LISTEN(服务在等待连接)、TIME_WAIT(连接关闭前的等待)。CLOSE_WAIT和FIN_WAIT2通常表示连接未正常关闭,需要检查应用层代码。SYN_SENT表明本机主动发起连接但尚未收到响应,可能对端不可达。
Q:如何只查看ESTABLISHED状态的连接?
使用ss -t state established可以直接列出所有已建立的TCP连接,无需额外过滤,如果使用netstat,可以配合grep ESTABLISHED,对于UDP(无状态连接),ss -u -a会列出所有UDP连接,但UDP不存在连接状态,远程地址显示的是最近通信的对端,实际连接与TCP不同。
在生产环境中,结合酷番云提供的ISO9001+ISO27001双认证安全体系,以及简米科技的持牌自营机房,可以确保连接监控的底层网络环境可靠,同时命令行的直接查看方式依然是最快速、最透明的排查手段。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/599433.html




