news 2026/6/12 4:15:56

理解网络中的“监听端口”:从 netstat 输出说起

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
理解网络中的“监听端口”:从 netstat 输出说起

在学习后端、Redis、MySQL、SkyWalking、Spring Boot 这些东西的时候,经常会看到一个词:

某某程序正在监听某个端口。

比如我们在 Windows PowerShell 里执行:

netstat-ano|findstr"11800"

可能会看到类似结果:

TCP 0.0.0.0:11800 0.0.0.0:0 LISTENING 55728 TCP 127.0.0.1:10021 127.0.0.1:11800 ESTABLISHED 39776 TCP 127.0.0.1:11800 127.0.0.1:10021 ESTABLISHED 55728 TCP 127.0.0.1:10296 127.0.0.1:11800 TIME_WAIT 0 TCP [::]:11800 [::]:0 LISTENING 55728

这篇文章就用最通俗的方式讲清楚:

  • 什么叫监听端口?
  • 为什么程序要监听端口?
  • LISTENINGESTABLISHEDTIME_WAIT分别是什么意思?
  • 0.0.0.0127.0.0.1、PID 又是什么意思?

一、什么叫端口?

我们先从 IP 和端口说起。

一台电脑在网络中通常会有一个地址,这个地址就是 IP。

例如:

192.168.1.10

但是一台电脑上可能同时运行很多网络程序,比如:

MySQL 3306 Redis 6379 Spring Boot 8080 Elasticsearch 9200 Kibana 5601 SkyWalking 11800 / 12800

问题来了:

别人访问你这台电脑的时候,操作系统怎么知道这个请求应该交给哪个程序?

答案就是:端口号

可以这样理解:

IP 地址:找到哪台电脑 端口号:找到这台电脑上的哪个程序

比如:

127.0.0.1:8080

意思就是:

访问本机的 8080 端口

如果 8080 端口上运行的是 Spring Boot,那么这个请求就会交给 Spring Boot 处理。


二、什么叫“监听端口”?

监听某个端口,可以理解成:

一个程序提前占住了某个端口,并且等待别人来连接它。

举个生活中的例子。

假设你的电脑是一栋大楼:

电脑 IP = 大楼地址 端口号 = 房间号 程序 = 房间里的工作人员

如果 Spring Boot 监听了 8080 端口,就相当于:

Spring Boot 在 8080 这个房间开门营业,等别人来访问。

如果 MySQL 监听了 3306 端口,就相当于:

MySQL 在 3306 这个房间开门营业,等客户端连接数据库。

所以,监听端口不是在听声音,而是:

程序告诉操作系统:这个端口归我了,有连接进来就交给我处理。


三、以 Spring Boot 为例理解监听

我们启动一个 Spring Boot 项目的时候,经常会看到控制台输出:

Tomcat started on port 8080

这句话的意思就是:

Spring Boot 内置的 Tomcat 已经监听了 8080 端口。

然后我们在浏览器访问:

http://localhost:8080

浏览器会向本机的 8080 端口发起连接。

如果 Spring Boot 正在监听 8080,浏览器就能成功访问。

如果没有任何程序监听 8080,浏览器就会访问失败,常见错误是:

Connection refused

也就是:

连接被拒绝,因为这个端口没人开门。

四、结合 netstat 输出分析

再看这行:

TCP 0.0.0.0:11800 0.0.0.0:0 LISTENING 55728

这一行可以拆开理解:

TCP 使用的是 TCP 协议 0.0.0.0:11800 本机正在监听 11800 端口 0.0.0.0:0 当前还没有具体的远程连接 LISTENING 正在监听 55728 监听这个端口的进程 PID

翻译成人话就是:

PID 为 55728 的程序正在监听 11800 端口,等待别人连接。

如果你的环境里正在启动 SkyWalking,那么这个端口很可能是 SkyWalking OAP 的端口。

SkyWalking 常见端口是:

11800:Agent 上报链路追踪数据的 gRPC 端口 12800:HTTP 查询接口,SkyWalking UI 会访问它

五、0.0.0.0 是什么意思?

你可能会看到:

0.0.0.0:11800

这个不是一个普通的具体 IP,而是表示:

监听本机所有 IPv4 网卡地址。

也就是说,这个程序不是只监听本机地址,而是监听所有网络入口。

假设你的电脑有这些地址:

127.0.0.1 192.168.1.10 10.10.20.30

如果程序监听的是:

0.0.0.0:11800

那么理论上别人可以通过下面这些方式访问它:

127.0.0.1:11800 192.168.1.10:11800 10.10.20.30:11800

当然,能不能真正访问,还要看防火墙、安全组、网络环境等因素。


六、127.0.0.1 是什么意思?

再看这两行:

TCP 127.0.0.1:10021 127.0.0.1:11800 ESTABLISHED 39776 TCP 127.0.0.1:11800 127.0.0.1:10021 ESTABLISHED 55728

这里的127.0.0.1表示本机回环地址,也叫 localhost。

简单说就是:

自己访问自己

比如浏览器访问:

http://127.0.0.1:8080

就表示:

浏览器在访问自己电脑上的 8080 端口。

所以这两行的意思是:

PID 39776 这个进程,通过本机临时端口 10021,连接到了 11800。 PID 55728 这个进程,在 11800 上接收了这个连接。

这两行其实是一组连接的两端。


七、什么是 ESTABLISHED?

ESTABLISHED表示:

连接已经建立成功,双方正在通信,或者连接处于可通信状态。

比如:

TCP 127.0.0.1:10021 127.0.0.1:11800 ESTABLISHED 39776

可以理解为:

客户端已经成功连上了服务端。

在网络通信里,一般有两种角色:

服务端:监听端口,等待别人连接 客户端:主动连接服务端

例如:

Spring Boot:监听 8080,是服务端 浏览器:访问 8080,是客户端

再比如:

SkyWalking OAP:监听 11800,是服务端 Java Agent:连接 11800,是客户端

八、什么是 TIME_WAIT?

你还可能看到:

TCP 127.0.0.1:10296 127.0.0.1:11800 TIME_WAIT 0

TIME_WAIT表示:

这个连接已经关闭了,但是操作系统还暂时保留一段时间。

为什么连接都关闭了,还要保留?

可以简单理解为:

防止网络中残留的旧数据包影响后面的新连接。

这是 TCP 协议的正常机制,不是报错。

所以看到少量TIME_WAIT不用紧张。

它只是说明:

之前有客户端连接过 11800,现在连接已经结束。

九、PID 是什么?

在 netstat 输出最后一列可以看到数字:

55728 39776 22796

这些数字叫 PID,也就是进程 ID。

每个正在运行的程序,在操作系统里都会有一个 PID。

比如:

PID 55728:可能是 SkyWalking OAP PID 39776:可能是 Java Agent、浏览器、UI 或其他客户端程序

我们可以通过下面的命令查看 PID 对应的进程:

tasklist|findstr"55728"

或者:

Get-Process-Id 55728

如果你想知道是谁占用了某个端口,就可以先用:

netstat-ano|findstr"端口号"

然后再用:

tasklist|findstr"PID"

这样就能定位到具体程序。


十、完整理解这段输出

假设我们看到:

TCP 0.0.0.0:11800 0.0.0.0:0 LISTENING 55728 TCP 127.0.0.1:10021 127.0.0.1:11800 ESTABLISHED 39776 TCP 127.0.0.1:11800 127.0.0.1:10021 ESTABLISHED 55728 TCP 127.0.0.1:10296 127.0.0.1:11800 TIME_WAIT 0 TCP [::]:11800 [::]:0 LISTENING 55728

可以翻译成:

PID 为 55728 的程序正在监听 11800 端口。 有一个本机程序 PID 39776 正在连接它。 双方连接已经建立成功。 之前还有一些连接访问过 11800,现在已经关闭,处于 TIME_WAIT 状态。

如果还有:

TCP 0.0.0.0:12800 0.0.0.0:0 LISTENING 55728 TCP 127.0.0.1:12800 127.0.0.1:15155 ESTABLISHED 55728 TCP 127.0.0.1:15155 127.0.0.1:12800 ESTABLISHED 22796

说明:

同一个 PID=55728 的程序,也在监听 12800 端口。 PID=22796 的程序正在连接它的 12800 端口。

十一、一句话总结

监听端口 = 程序提前占住一个端口,等待别人通过这个端口来连接它。

可以这样记:

IP 地址:找到哪台电脑 端口号:找到电脑上的哪个程序 监听端口:程序开门营业,等别人连接 ESTABLISHED:连接已经建立 TIME_WAIT:连接刚关闭,系统暂时保留 PID:这个端口属于哪个进程

再简单一点:

程序监听端口,就像开了一个门。 端口号就是门牌号。 别人想找这个程序,就访问 IP:端口。

例如:

127.0.0.1:11800

意思就是:

在我自己电脑上,找正在监听 11800 端口的那个程序。

理解了“监听端口”这个概念之后,再看 Spring Boot、Redis、MySQL、SkyWalking、Kibana 这些服务启动时的端口信息,就会清楚很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 4:08:53

数字示波器参数大全:从入门到精通(九)

第三部分:数字示波器探头的分类与特点 市场上的探头种类繁多,每种探头都有其特定的适用场景。了解不同类型探头的特点,是正确选择探头的基础。 3.1 无源电压探头 (Passive Voltage Probes) 无源电压探头是最常用的探头类型,内部没有有源器件,不需要外部电源。 优点: …

作者头像 李华
网站建设 2026/6/12 4:07:52

小米手机ADB与Fastboot调试驱动(Win/Linux双平台支持)

本文还有配套的精品资源,点击获取 简介:专为小米系安卓设备(含Mi、Redmi、POCO全机型)设计的USB通信驱动集合,解决Windows和Linux系统下无法识别手机、ADB连接失败、Fastboot模式不响应等问题。Windows版覆盖32位&a…

作者头像 李华