可以先记住一句话:
IP 地址负责找到哪一台机器,端口负责找到这台机器上的哪一个服务。
一、先用生活例子理解端口
假设一栋大楼就是一台服务器。
大楼地址 = IP 地址
大楼里面的房间号 = 端口号
房间里的人/公司 = 具体服务
比如:
服务器 IP:47.100.10.20
端口 22:SSH 远程登录服务
端口 80:HTTP 网站服务
端口 443:HTTPS 网站服务
端口 3306:MySQL 数据库服务
所以你访问:
47.100.10.20:80
意思就是:
我要访问 47.100.10.20 这台服务器上的 80 号端口,也就是网站服务。
二、IP 和端口的区别
1. IP 是找机器的
比如:
192.168.1.10
47.100.20.30
8.8.8.8
IP 的作用是:
在网络中定位一台设备。
就像快递地址一样,先找到这台机器在哪。
2. 端口是找服务的
一台服务器上可以同时跑很多服务:
SSH 服务
Nginx 服务
MySQL 服务
Redis 服务
Docker 服务
博客服务
后台管理系统
这些服务不能全部挤在一个入口里,所以需要端口来区分。
比如:
22 SSH
80 网站 HTTP
443 网站 HTTPS
3306 MySQL
6379 Redis
8080 常见 Web 测试服务
所以完整访问目标其实是:
IP + 端口
比如:
47.100.20.30:22
47.100.20.30:80
47.100.20.30:443
47.100.20.30:3306
三、端口到底是什么?
端口不是一个真实的洞,也不是物理接口。
它是操作系统里面的一个 逻辑编号。
范围是:
0 ~ 65535
也就是说,一台机器理论上有 65536 个端口编号。
端口可以理解成:
操作系统给不同网络服务分配的入口编号
比如 Nginx 启动后监听 80 端口:
用户访问 80 端口 → 操作系统发现是 Nginx 在监听 → 把请求交给 Nginx 处理
MySQL 启动后监听 3306 端口:
程序访问 3306 端口 → 操作系统发现是 MySQL 在监听 → 把请求交给 MySQL 处理
四、什么叫“监听端口”?
你经常会看到我让你敲:
ss -tunlp
或者:
ss -tunlp | grep :80
这里的“监听”就是:
某个服务已经启动,并且正在等待别人连接这个端口。
比如 Nginx 监听 80 端口:
Nginx:我已经在 80 端口等着了,有人访问网站就交给我。
MySQL 监听 3306:
MySQL:我已经在 3306 端口等着了,有程序连接数据库就交给我。
如果没有监听,就说明:
这个端口现在没有服务在接待请求
这时候访问就可能出现:
Connection refused
连接被拒绝
端口未开放
网站打不开
五、服务、进程、端口之间的关系
这三个概念你一定要串起来:
程序启动后 → 变成进程
进程对外提供网络访问 → 监听端口
用户访问端口 → 请求进入对应进程
举个例子:
nginx 程序启动
↓
产生 nginx 进程
↓
nginx 进程监听 80/443 端口
↓
用户访问网站
↓
请求进入 nginx
所以排查服务时,常见三连问是:
1. 服务有没有启动?
2. 进程有没有存在?
3. 端口有没有监听?
对应命令:
systemctl status nginx
ps aux | grep nginx
ss -tunlp | grep :80
这三个是你以后排查网站访问不了的基本功。
六、常见端口表
你先记这些最常见的就够了。
20/21 FTP 文件传输
22 SSH 远程连接服务器
25 SMTP 邮件发送
53 DNS 域名解析
80 HTTP 网站访问
443 HTTPS 加密网站访问
3306 MySQL 数据库
6379 Redis 缓存数据库
8080 常见 Web 测试端口
9000 PHP-FPM 常见端口
27017 MongoDB 数据库
你现在最该熟悉的是:
22、80、443、3306、6379、8080、9000
因为这些和你正在学的:
Linux
Nginx
Docker
MySQL
Redis
博客部署
云服务器
关系最大。
七、为什么访问网站不用写端口?
你平时访问:
https://www.baidu.com
没有写:
https://www.baidu.com:443
这是因为浏览器会自动补默认端口。
规则是:
http:// 默认端口是 80
https:// 默认端口是 443
所以:
http://example.com
等价于:
http://example.com:80
而:
https://example.com
等价于:
https://example.com:443
如果你的网站跑在 8080 端口,就必须写:
http://你的IP:8080
除非你用 Nginx 把 80 或 443 转发到 8080。
八、Nginx 和端口的关系
比如你的博客程序实际跑在:
127.0.0.1:8080
但是你不想让用户访问:
http://你的域名:8080
你希望用户访问:
https://你的域名
这时候就可以用 Nginx:
用户访问 443
↓
Nginx 接收请求
↓
Nginx 转发给 127.0.0.1:8080
↓
博客程序返回页面
↓
Nginx 再返回给用户
这就是反向代理。
简单说:
Nginx 站在前面,监听 80/443;后端服务藏在后面,可能运行在 8080、3000、9000 等端口。
九、127.0.0.1、0.0.0.0、服务器公网 IP 的区别
这个特别重要,很多新手会卡在这里。
1. 127.0.0.1
127.0.0.1 = 本机自己
如果服务只监听:
127.0.0.1:8080
意思是:
只有这台服务器自己能访问这个服务,外面的电脑访问不了。
2. 0.0.0.0
0.0.0.0 = 监听所有网卡
如果服务监听:
0.0.0.0:8080
意思是:
本机可以访问,局域网可以访问,公网理论上也可以访问,前提是防火墙和安全组放行。
3. 公网 IP
比如:
47.100.20.30
这是别人从互联网访问你服务器的地址。
所以你部署网站时,经常要关注:
服务是否监听 0.0.0.0
服务器防火墙是否放行
云服务器安全组是否放行
域名是否解析到公网 IP
十、防火墙和安全组是什么?
端口监听了,不代表别人一定能访问。
还要看两道门。
第一道门:服务器内部防火墙
比如 Linux 的 firewalld。
查看防火墙:
firewall-cmd --list-all
放行 80 端口:
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
放行 443 端口:
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
第二道门:云服务器安全组
阿里云、腾讯云、华为云都有安全组。
你可以把安全组理解成:
云厂商在服务器外面加的一层防火墙
即使你服务器内部开了 80 端口,如果安全组没放行,外面还是访问不了。
所以云服务器访问不通时,要检查:
1. 服务是否启动
2. 端口是否监听
3. Linux 防火墙是否放行
4. 云服务器安全组是否放行
5. 域名解析是否正确
十一、TCP 和 UDP 是什么?
你看命令:
ss -tunlp
里面有:
tcp
udp
这就是两种常见传输协议。
1. TCP
TCP 可以理解成:
可靠通信
特点:
连接稳定
会确认数据有没有送到
适合网站、SSH、数据库
常见:
HTTP/HTTPS
SSH
MySQL
Redis
大多数你现在接触的服务都是 TCP。
2. UDP
UDP 可以理解成:
速度快,但不保证每个包都一定送到
常见场景:
DNS
视频直播
语音通话
游戏
比如 DNS 常用 53 端口,既可能用 TCP,也可能用 UDP。
你现阶段先记住:
网站、SSH、数据库,大多数是 TCP;DNS、视频、实时通信经常会用 UDP。
十二、什么是 Socket?
这个以后你会经常听到。
Socket 可以简单理解为:
IP + 端口 + 协议 组成的网络通信入口
比如:
47.100.20.30:80 TCP
这就可以看成一个 socket。
更完整一点:
客户端 IP + 客户端端口 + 服务端 IP + 服务端端口 + 协议
共同确定一次网络连接。
比如你电脑访问百度:
你的电脑:192.168.1.5:52341
百度服务器:110.xxx.xxx.xxx:443
协议:TCP
这里你的电脑也有端口,只不过它是临时随机分配的。
十三、为什么客户端也有端口?
你可能会问:
我访问网站的时候,我电脑也有端口吗?
有。
比如你访问百度,百度服务器的端口是 443。
你的电脑会随机开一个临时端口,比如:
52341
于是连接大概是:
你的电脑 192.168.1.5:52341
↓
百度服务器 110.xxx.xxx.xxx:443
这样服务器返回数据时,才知道要回给你电脑的哪个程序。
十四、端口占用是什么?
比如你已经有一个 Nginx 在用 80 端口。
这时候你再启动另一个程序,也想用 80 端口,就会失败。
因为:
同一个 IP + 同一个协议 + 同一个端口,一般只能被一个服务监听
常见报错:
Address already in use
端口已被占用
排查命令:
ss -tunlp | grep :80
或者:
lsof -i:80
如果看到 80 已经被 Nginx 占用,其他服务就不能直接再用 80。
解决方法:
1. 停掉原来的服务
2. 换一个端口
3. 用 Nginx 做反向代理
十五、Docker 和端口映射
Docker 里端口更容易混。
比如你运行:
docker run -d -p 8080:80 nginx
意思是:
宿主机 8080 端口 → 容器内部 80 端口
也就是:
别人访问 服务器IP:8080
↓
进入 Docker 宿主机 8080
↓
转发到容器里面的 80
↓
Nginx 返回页面
这里一定要分清楚:
左边 8080:宿主机端口
右边 80:容器内部端口
所以:
-p 8080:80
不是随便写的,它的含义是:
外面访问 8080,容器里面接收 80
如果你写:
-p 80:80
就是:
宿主机 80 → 容器 80
十六、你以后排查端口问题的固定流程
以后网站打不开,你就按这个流程来。
第一步:服务有没有启动?
systemctl status nginx
或者 Docker:
docker ps
第二步:端口有没有监听?
ss -tunlp | grep :80
如果是 443:
ss -tunlp | grep :443
如果是 8080:
ss -tunlp | grep :8080
第三步:本机能不能访问?
curl http://127.0.0.1
如果是 8080:
curl http://127.0.0.1:8080
如果本机可以访问,说明服务本身可能没问题。
第四步:外部能不能访问?
在你自己电脑浏览器访问:
http://服务器公网IP
或者:
http://服务器公网IP:8080
如果本机能访问,外部不能访问,大概率是:
防火墙没放行
安全组没放行
服务只监听 127.0.0.1
第五步:检查防火墙和安全组
Linux 防火墙:
firewall-cmd --list-all
云服务器安全组:
去阿里云 / 腾讯云控制台看入方向规则
常见需要放行:
22
80
443
8080
十七、你现在要记住的核心图
用户浏览器
↓
域名 DNS 解析
↓
服务器公网 IP
↓
云服务器安全组
↓
Linux 防火墙
↓
服务器端口 80/443
↓
Nginx
↓
后端服务 8080/9000
↓
数据库 3306
你以后部署博客、Halo、WordPress、Nginx、Docker,都可以用这张图去理解。
十八、最常见的新手误区
误区 1:服务启动了就一定能访问
不一定。
还要看:
端口是否监听
防火墙是否放行
安全组是否放行
监听地址是不是 0.0.0.0
误区 2:端口开放了就一定安全
不一定。
比如:
3306 MySQL
6379 Redis
这些数据库端口一般不建议直接暴露到公网。
更安全的做法是:
只允许本机访问
只允许内网访问
通过安全组限制来源 IP
误区 3:80 和 443 是随便选的
不是。
它们是网站默认端口:
80 = HTTP
443 = HTTPS
如果你想让别人正常访问你的网站,通常就要配置这两个端口。
误区 4:Docker 里面的端口和服务器端口是一回事
不是。
Docker 里面有:
容器内部端口
宿主机端口
例如:
-p 8080:80
含义是:
宿主机 8080 → 容器 80
十九、今天你可以做的小实验
你可以在服务器上敲这些:
ss -tunlp
看当前有哪些端口。
然后:
ss -tunlp | grep :22
你应该能看到 SSH。
如果你有 Nginx:
ss -tunlp | grep :80
再看进程:
ps aux | grep ssh
如果有 Nginx:
ps aux | grep nginx
再看服务:
systemctl status sshd
如果有 Nginx:
systemctl status nginx
你今天的目标不是背很多,而是搞懂这个链条:
服务 → 进程 → 端口 → 访问
二十、面试表达版本
你可以这样说:
端口是操作系统中用于区分不同网络服务的逻辑编号。IP 地址用于定位一台机器,端口用于定位这台机器上的具体服务。比如 22 端口通常用于 SSH,80 用于 HTTP,443 用于 HTTPS,3306 用于 MySQL。服务启动后会以进程的形式运行,并监听某个端口,客户端通过 IP + 端口访问对应服务。在排查服务无法访问时,我会先检查服务状态,再看进程是否存在,再通过 ss -tunlp 查看端口是否监听,最后检查 Linux 防火墙和云服务器安全组是否放行。
二十一、你今天只需要真正记住这 5 句话
1. IP 找机器,端口找服务。
2. 端口是操作系统里的逻辑入口,范围是 0 到 65535。
3. 服务启动后会变成进程,进程对外提供访问时会监听端口。
4. 网站默认端口:HTTP 是 80,HTTPS 是 443。
5. 网站访问不了时,按 服务状态 → 进程 → 端口 → 防火墙 → 安全组 的顺序排查。
你把这几个点理解了,后面学 Nginx、Docker、HTTPS、云服务器安全组,就不会乱了。
66666