当前位置:首页 > 文章列表 > 文章 > linux > Linux网络查看:netstat与ss命令使用教程

Linux网络查看:netstat与ss命令使用教程

2025-08-31 10:20:01 0浏览 收藏

掌握Linux网络状态查看是运维和开发的关键技能。本文深入解析了`netstat`和`ss`这两个核心命令,助你快速诊断网络问题。`ss`命令因其高效的内核数据读取机制,在高并发场景下表现更优。通过`ss -tulnp`或`netstat -tulnp`,你可以清晰地查看协议类型、本地/远程地址、端口状态以及关联进程信息。文章还分享了实用的筛选技巧,如使用`grep`定位特定端口或进程,以及筛选特定连接状态(如`ESTABLISHED`、`LISTEN`、`CLOSE_WAIT`、`TIME_WAIT`)的方法。理解这些网络连接状态的含义,是排查服务不可达、资源耗尽等问题的核心依据,能有效提升网络故障排查效率。

使用ss和netstat命令可查看Linux网络连接状态,其中ss因性能更优成为首选。通过ss -tulnp或netstat -tulnp可查看协议、本地/远程地址、端口、状态及进程信息;ss直接读取内核数据,效率更高,适合高并发场景。常用筛选技巧包括:ss -tulnp | grep ":80"查看特定端口,grep "nginx"定位进程连接,ss -t state established筛选已建立连接。关键状态包括:LISTEN(服务监听)、ESTABLISHED(连接正常)、CLOSE_WAIT(本地未关闭,可能程序缺陷)、TIME_WAIT(主动关闭方等待,防止旧包干扰)。这些状态帮助诊断服务不可达、资源耗尽等问题,是网络排查的核心依据。

如何在Linux系统中查看网络连接状态?使用netstat和ss命令的详细教程

在Linux系统中,要查看当前的网络连接状态,我们主要依赖两个核心命令:netstatss。它们能帮你快速洞察哪些端口正在监听、哪些连接已经建立、哪些进程正在使用网络资源,是网络故障排查和系统监控的利器。

解决方案

要查看Linux系统的网络连接状态,最直接且常用的方法是结合使用netstatss命令。这两个工具都能提供丰富的网络连接信息,但ss在现代Linux系统中通常被认为是更高效、功能更强大的选择。

使用 netstat 命令:

netstat是一个历史悠久且功能强大的网络工具,它可以显示各种网络相关信息,包括网络连接、路由表、接口统计等。

要查看所有TCP和UDP的监听端口和已建立连接,并显示对应的进程ID和程序名称,我通常会这样用:

netstat -tulnp
  • -t: 显示TCP连接。
  • -u: 显示UDP连接。
  • -l: 仅显示监听(Listening)状态的套接字。
  • -n: 以数字形式显示地址和端口号,而不是尝试解析主机名和服务名,这能加快显示速度。
  • -p: 显示拥有该套接字的进程ID和程序名称(需要root权限)。

使用 ss 命令:

ss(socket statistics)是netstat的替代品,它属于iproute2工具集,在处理大量连接时比netstat更快、更高效,因为它直接从内核获取套接字统计信息。

netstat类似,查看所有TCP和UDP的监听端口和已建立连接,并显示对应的进程ID和程序名称,我会用:

ss -tulnp

这些选项的含义与netstat基本相同。

通过这两个命令,你可以看到诸如Proto(协议)、Recv-Q(接收队列)、Send-Q(发送队列)、Local Address:Port(本地地址和端口)、Foreign Address:Port(远程地址和端口)、State(连接状态)以及PID/Program name(进程ID和程序名称)等关键信息。

netstat vs. ss:为何现代Linux更偏爱ss命令?

说实话,在我刚接触Linux运维的时候,netstat几乎是查看网络状态的唯一选择,它就像一位老兵,经验丰富,功能全面。但随着网络环境日益复杂,特别是服务器上的并发连接数动辄成千上万时,netstat的性能瓶颈就显现出来了。它在处理大量连接时会变得非常慢,甚至会卡住终端,因为它需要遍历/proc/net目录下的大量文件来收集信息。

ss命令的出现,就像给网络诊断工具带来了一场革命。它不是简单地读取文件,而是直接与内核进行交互,从内核的套接字数据结构中获取信息,这使得它在性能上有着压倒性的优势。尤其是在那些高负载、高并发的生产环境中,ss的响应速度和效率明显高出一截。我个人在日常排查问题时,已经习惯性地优先使用ss了,那种即时反馈的感觉,真的让人效率倍增。

除了速度,ss在功能上也更胜一筹。它提供了更丰富的过滤选项和更详细的套接字信息,比如可以查看TCP拥塞控制算法、内存使用情况等,这些是netstat无法直接提供的。所以,虽然netstat依然活跃在很多老旧脚本和习惯性操作中,但如果你追求效率和更深层次的洞察,ss无疑是更现代、更强大的选择。

如何筛选特定端口或进程的网络连接?实用技巧解析

在实际工作中,我们往往不需要查看所有的网络连接,而是希望聚焦于某个特定的服务、端口或进程。这时候,简单的grep配合ssnetstat就能发挥巨大作用,让信息筛选变得精准而高效。

筛选特定端口:

假设我想看看服务器上80端口(通常是HTTP服务)的连接情况。

使用ss

ss -tulnp | grep ":80"

或者更精确地指定本地端口:

ss -tulnp sport = :80

sport代表源端口(Source Port),dport代表目标端口(Destination Port)。如果你想看连接到远程80端口的连接,可以用dport = :80

筛选特定进程:

如果你知道某个应用的进程名称,比如nginx,想查看它相关的网络连接:

ss -tulnp | grep "nginx"

如果只知道进程ID(PID),比如PID是12345:

ss -tulnp | grep "pid=12345"

筛选连接状态:

有时候,我们可能只想看处于特定状态的连接,比如所有已建立(ESTABLISHED)的TCP连接:

ss -t state established

或者所有监听(LISTEN)状态的UDP连接:

ss -u state listening

这些组合拳用起来非常灵活,能帮助你快速定位问题,比如某个服务是不是真的在监听,或者某个进程是不是建立了不该有的外部连接等等。这比漫无目的地滚动屏幕查看所有连接要高效得多。

理解网络连接状态:ESTABLISHED、LISTEN、TIME_WAIT等状态的含义与排查

理解TCP连接的各种状态对于网络问题的诊断至关重要,它们就像是连接的生命周期阶段,每个状态都承载着特定的意义。我们最常看到的就是LISTENESTABLISHEDCLOSE_WAITTIME_WAIT

  • LISTEN (监听):这表示一个套接字正在等待传入的连接请求。通常是服务器进程绑定了一个端口,准备接收客户端的连接。如果你发现某个服务无法访问,首先要检查它对应的端口是否处于LISTEN状态。如果不是,那服务可能没启动或配置有误。

  • ESTABLISHED (已建立):这是TCP连接的正常工作状态,表示客户端和服务器之间已经成功完成了三次握手,数据可以正常传输。大多数活跃的连接都应该处于这个状态。

  • CLOSE_WAIT (等待关闭):这个状态有点棘手,它表示远程主机(通常是客户端)已经关闭了连接,但本地主机(通常是服务器)还没有完全关闭它的套接字。这意味着本地应用程序没有及时调用close()来释放连接。大量的CLOSE_WAIT连接通常是应用程序编程缺陷的信号,表明服务器端没有正确处理连接关闭,这可能导致资源耗尽。

  • TIME_WAIT (时间等待):这是TCP连接关闭序列中的最后一个状态,由主动关闭连接的一方进入。它会持续一段时间(通常是2MSL,Maximum Segment Lifetime),目的是确保所有迟到的数据包都已在网络中消失,避免新连接收到旧数据包,并允许可靠地关闭连接。大量的TIME_WAIT连接在某些高并发短连接服务中很常见,虽然通常无害,但极端情况下也可能占用过多资源,导致端口耗尽。不过,现代Linux内核对TIME_WAIT的处理已经优化了很多,通常不会成为大问题。

  • SYN_SENT (同步已发送):客户端发送了SYN包,正在等待服务器的SYN+ACK响应。如果长时间处于此状态,可能表示网络延迟高或服务器没有响应。

  • SYN_RECV (同步已接收):服务器收到了客户端的SYN包,并发送了SYN+ACK,正在等待客户端的ACK响应。如果大量连接卡在这个状态,可能是遭受了SYN洪泛攻击。

当你在排查问题时,例如发现服务器响应变慢,查看连接状态就非常有帮助。如果看到大量的CLOSE_WAIT,你可能需要检查应用程序的代码逻辑;如果看到大量TIME_WAIT,并且端口耗尽,可能需要调整系统参数或优化应用程序的连接管理;如果LISTEN端口不翼而飞,那服务肯定没跑起来。这些状态,就像是网络连接的“健康报告”,能帮你迅速定位问题的症结所在。

到这里,我们也就讲完了《Linux网络查看:netstat与ss命令使用教程》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于网络连接状态,故障排查,连接状态,netstat,ss的知识点!

摩笔天书AI教学:文字变视频超简单摩笔天书AI教学:文字变视频超简单
上一篇
摩笔天书AI教学:文字变视频超简单
王兴:外卖3%利润目标,1元补贴难持续
下一篇
王兴:外卖3%利润目标,1元补贴难持续
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    511次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    499次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 千音漫语:智能声音创作助手,AI配音、音视频翻译一站搞定!
    千音漫语
    千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
    597次使用
  • MiniWork:智能高效AI工具平台,一站式工作学习效率解决方案
    MiniWork
    MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
    555次使用
  • NoCode (nocode.cn):零代码构建应用、网站、管理系统,降低开发门槛
    NoCode
    NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
    584次使用
  • 达医智影:阿里巴巴达摩院医疗AI影像早筛平台,CT一扫多筛癌症急慢病
    达医智影
    达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
    604次使用
  • 智慧芽Eureka:更懂技术创新的AI Agent平台,助力研发效率飞跃
    智慧芽Eureka
    智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
    579次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码