Day3
本文最后更新于86 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

可以先记住一句话:

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、云服务器安全组,就不会乱了。

文末附加内容

评论

  1. 博主
    Macintosh Edge
    3 月前
    2026-5-01 2:11:45

    66666

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇