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

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

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

比如我们在 Windows PowerShell 里执行:

powershell 复制代码
netstat -ano | findstr "11800"

可能会看到类似结果:

text 复制代码
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。

例如:

text 复制代码
192.168.1.10

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

text 复制代码
MySQL        3306
Redis        6379
Spring Boot  8080
Elasticsearch 9200
Kibana       5601
SkyWalking   11800 / 12800

问题来了:

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

答案就是:端口号

可以这样理解:

text 复制代码
IP 地址:找到哪台电脑
端口号:找到这台电脑上的哪个程序

比如:

text 复制代码
127.0.0.1:8080

意思就是:

text 复制代码
访问本机的 8080 端口

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


二、什么叫"监听端口"?

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

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

举个生活中的例子。

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

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

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

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

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

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

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

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


三、以 Spring Boot 为例理解监听

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

text 复制代码
Tomcat started on port 8080

这句话的意思就是:

text 复制代码
Spring Boot 内置的 Tomcat 已经监听了 8080 端口。

然后我们在浏览器访问:

text 复制代码
http://localhost:8080

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

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

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

text 复制代码
Connection refused

也就是:

text 复制代码
连接被拒绝,因为这个端口没人开门。

四、结合 netstat 输出分析

再看这行:

text 复制代码
TCP    0.0.0.0:11800    0.0.0.0:0    LISTENING    55728

这一行可以拆开理解:

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

翻译成人话就是:

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

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

SkyWalking 常见端口是:

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

五、0.0.0.0 是什么意思?

你可能会看到:

text 复制代码
0.0.0.0:11800

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

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

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

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

text 复制代码
127.0.0.1
192.168.1.10
10.10.20.30

如果程序监听的是:

text 复制代码
0.0.0.0:11800

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

text 复制代码
127.0.0.1:11800
192.168.1.10:11800
10.10.20.30:11800

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


六、127.0.0.1 是什么意思?

再看这两行:

text 复制代码
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。

简单说就是:

text 复制代码
自己访问自己

比如浏览器访问:

text 复制代码
http://127.0.0.1:8080

就表示:

text 复制代码
浏览器在访问自己电脑上的 8080 端口。

所以这两行的意思是:

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

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


七、什么是 ESTABLISHED?

ESTABLISHED 表示:

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

比如:

text 复制代码
TCP    127.0.0.1:10021    127.0.0.1:11800    ESTABLISHED    39776

可以理解为:

text 复制代码
客户端已经成功连上了服务端。

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

text 复制代码
服务端:监听端口,等待别人连接
客户端:主动连接服务端

例如:

text 复制代码
Spring Boot:监听 8080,是服务端
浏览器:访问 8080,是客户端

再比如:

text 复制代码
SkyWalking OAP:监听 11800,是服务端
Java Agent:连接 11800,是客户端

八、什么是 TIME_WAIT?

你还可能看到:

text 复制代码
TCP    127.0.0.1:10296    127.0.0.1:11800    TIME_WAIT    0

TIME_WAIT 表示:

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

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

可以简单理解为:

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

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

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

它只是说明:

text 复制代码
之前有客户端连接过 11800,现在连接已经结束。

九、PID 是什么?

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

text 复制代码
55728
39776
22796

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

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

比如:

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

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

powershell 复制代码
tasklist | findstr "55728"

或者:

powershell 复制代码
Get-Process -Id 55728

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

powershell 复制代码
netstat -ano | findstr "端口号"

然后再用:

powershell 复制代码
tasklist | findstr "PID"

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


十、完整理解这段输出

假设我们看到:

text 复制代码
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

可以翻译成:

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

如果还有:

text 复制代码
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

说明:

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

十一、一句话总结

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

可以这样记:

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

再简单一点:

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

例如:

text 复制代码
127.0.0.1:11800

意思就是:

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

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

相关推荐
华纳云IDC服务商1 小时前
高防服务器清洗流量导致丢包怎么办?
运维·服务器·网络
草莓熊Lotso2 小时前
【Linux网络】深入理解 TCP 协议(一):报头设计与可靠性基石
linux·运维·服务器·c语言·网络·c++·tcp/ip
kebidaixu2 小时前
Modbus TCP 协议详解
网络·网络协议·tcp/ip
中议视控2 小时前
网络可编程中央控制系统与4K坐席分布式节点的TCP/UDP协议对接技术
网络·分布式·tcp/ip
Jtti2 小时前
怎么判断攻击者主要在打高防服务器哪个端口或协议
运维·服务器·网络
老高学长2 小时前
记录电脑使用痕迹的软件哪款好?硬核上网行为审计软件分享,2026精品
网络·安全·电脑
酣大智2 小时前
路由策略配置实验(1)
网络·路由·路由属性
MartinYeung52 小时前
[论文学习]DP 微调 LLM 隐私防护实证研究:方法比较与洞见
网络·学习
2601_961963382 小时前
移动办公时代:微信小程序与钉钉集成下的电子合同签署全流程
网络·人工智能·安全·区块链·智能合约·哈希算法