为什么要关心端口号?
端口是传输层的"门牌号" ,应用进程通过它来收发数据。
当电脑运行多个应用时,端口帮助操作系统区分"这份数据应该交给哪个应用"。
所以,如果你知道某个应用的端口号,就能追踪它的网络行为;反之,如果你知道某个端口,就能查到对应的应用。
查看端口号(从端口 → 应用)
📍 常见操作系统方法:
1. Windows
命令行方式
netstat -ano
-a 显示所有连接和监听端口
-n 数字形式显示地址和端口
-o 显示 PID(进程号)
结果类似:
yaml
复制代码
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1234
表示 进程 PID=1234 占用了 80 端口。
进一步找到应用名
yaml
复制代码
tasklist | findstr 1234
就能查出是哪个应用占用了端口。
2. Linux / macOS
netstat 命令
netstat -tunlp
-t TCP
-u UDP
-n 数字显示
-l 监听中的端口
-p 显示进程 PID 和程序名
ss 命令(更现代)
ss -tunlp
输出会告诉你某个端口对应的进程。
已知应用查对应端口(从应用 → 端口)
1. 在 Windows
方法一: netstat + PID
arduino
复制代码
netstat -ano | findstr "LISTENING"
-a 显示所有连接和监听端口
-n 用数字显示地址和端口号
-o 显示对应的进程 PID
然后通过 任务管理器 或
xml
复制代码
tasklist | findstr
就能知道哪个应用开了哪些端口。
方法二:PowerShell 更直观
vbnet
复制代码
Get-Process -Id (Get-NetTCPConnection | Where-Object { $_.State -eq "Listen" }).OwningProcess
直接列出监听端口的进程。
2. 在 Linux / macOS
方法一: lsof
css
复制代码
lsof -i -P -n | grep LISTEN
-i 网络相关
-P 显示端口号而不是服务名
-n 不解析域名(更快)
输出结果会显示:应用 → 协议 → 端口。
方法二: netstat
netstat -tulnp
-t TCP
-u UDP
-l listening
-n 数字显示
-p 显示进程名/ID。
方法三: ss (更现代,替代 netstat)
ss -tulnp
3. 直观比喻
房子(机器) :计算机
房间(应用) :进程
门(端口) :对外开放的入口
想知道某个房间开了哪些门,就去查这间房间对应的"门牌号"。
🛠 举例
比如你运行了一个 本地 Node.js 服务,想查它监听的端口:
perl
复制代码
ps -ef | grep node
# 假设得到 PID=12345
lsof -i -P -n | grep 12345
结果可能显示:
sql
复制代码
node 12345 user TCP 0.0.0.0:3000 (LISTEN)
说明这个 Node 应用监听了 3000 端口。
常见应用与端口的映射
协议/应用
默认端口
HTTP
80
HTTPS
443
FTP
21
SSH
22
MySQL
3306
Redis
6379
PostgreSQL
5432
WebSocket
一般跟 HTTP/HTTPS 一致(80/443)
本地开发(Node.js、Vue、React 等)
常见 3000, 5173, 8080 等
结合 TCP/IP 模型看待
应用层:具体应用(浏览器、数据库、游戏客户端)
传输层:应用占用某个端口(80, 443, 3306...),TCP/UDP 负责传输
网络层:IP 地址负责找到主机
链路层:MAC 地址负责找到网卡
所以:应用 = 进程 ↔ 端口号 ↔ 网络连接 。
端口号就是把 操作系统中的进程 和 网络层的通信 绑在一起的关键。