0.16 端口:一台机器上的不同“窗口”
第〇篇【零基础预科】免费。这一篇讲为什么一台服务器能同时提供网站、数据库、远程登录等多种服务。
一、为什么需要端口
一台服务器往往同时跑很多服务:网站、数据库、缓存、远程管理……数据都送到同一个 IP,操作系统怎么知道该交给哪个程序?
答案就是端口(Port):给每个服务分配一个 0–65535 的编号。
IP 找到机器,端口找到机器上的具体服务。 一次网络连接由"IP + 端口"唯一确定,类似"找到大楼(IP),再进某个房间号(端口)"。
你可能会问:那客户端这台机器要不要端口?也要。但客户端用的端口是系统在你发起连接时临时随机挑的(叫临时端口,一般在 1024 以上),用完就还,根本不用你操心。真正要你记的是服务器上"固定监听"的那些端口——浏览器连网站永远找 80/443,就像寄信一定写对方的固定门牌号,寄件人用哪个临时窗口无所谓。所以排查时,"目标端口开没开"才是关键,你自己这端用的临时端口不重要。
二、常见端口(建议记住)
| 端口 | 服务 |
|---|---|
| 20/21 | FTP 文件传输 |
| 22 | SSH 远程登录(Linux) |
| 25 | SMTP 发邮件 |
| 53 | DNS 域名解析 |
| 80 | HTTP 网站 |
| 443 | HTTPS 加密网站 |
| 3306 | MySQL 数据库 |
| 5432 | PostgreSQL 数据库 |
| 6379 | Redis 缓存 |
| 8080 / 8443 | 常见备用 Web 端口 |
| 3389 | RDP 远程桌面(Windows) |
你的网站 SSH 端口不是默认 22,而是自定义的 35529——改非默认端口能减少大量自动化扫描和爆破,是常见加固手段。
这些编号不是随便定的:0 到 1023 叫"知名端口",是几十年惯例定下来给特定服务用的,大家都遵守,所以你一看 80 就知道是网站、一看 3306 就知道是 MySQL。1024 以上,你想让自己的程序监听哪个都行(比如 8080、3000)。不用把整张表背下来,先混个脸熟——真到渗透时,扫出来哪个端口开着,再去查它对应什么服务。有个新手常犯的糊涂:看到 3306 别想当然当成什么"网页端口",它是数据库,数据库本来就不该被外面直接连。
三、监听与连接
- 服务启动后,会在某个端口上监听(listen) ,等待客户端来连;
所谓"监听",你就理解成开店:服务程序一启动,就在那个端口上竖起耳朵等客人,客人不来它就一直挂在那儿等着,不占你屏幕、也不需要你盯着。这也是为什么一个服务装好了却"连不上",第一步永远是确认"它到底起没起、有没有真的在听这个端口"——很多人对着防火墙折腾半天,其实服务压根就没启动。
- 客户端向"IP:端口"发起连接(如浏览器连
gysec.top:443); - 若该端口没有程序监听,连接会被拒绝(connection refused);被防火墙挡则超时。
这两种"连不上"的报错含义完全不同,排查时千万别混:connection refused(连接被拒绝)意思是"这台机器活着、网络也通,但这个端口上压根没人在听"——像敲门屋里没人应;而 timeout(超时)意思是"包发出去了,对方连个回话都没有",多半是被防火墙悄悄挡掉,或者目标压根关机、路由就不通。前者说明端口关了或服务没起,后者说明流量根本没到达,两者下一步的排查方向正好相反。
你可能会问:为什么不干脆让一个程序把所有事都包了,非要分这么多端口?因为分工清楚才好管理:网站、数据库、远程登录各是各的程序,分别监听各自端口,出了问题可以单独重启其中一个、互相不影响,防火墙也能按端口精确地放行或拦截。
四、查看端口
Linux:
bashss -tlnp # 列出正在监听的 TCP 端口及对应进程 sudo lsof -i -P -n # 查看端口由哪个进程占用Windows PowerShell:
powershellnetstat -ano # 列出连接和监听端口,末列是进程 PID
端口扫描(如 nmap)就是逐个尝试目标各端口,判断哪些开放、背后是什么服务——这是渗透测试信息收集的标准一步。
netstat -ano 出来那几列你不用全懂,先盯三列:"本地地址"最后那个冒号后面就是端口;"状态"那一列写着 LISTENING(正在监听)还是 ESTABLISHED(已经建立的连接);最右边是 PID。把 PID 对上任务管理器里的进程名,你就知道"这个端口到底是谁开的"。Linux 的 ss -tlnp 里,t 表示 TCP、l 表示只看监听、n 不把地址解析成域名、p 显示进程,列出来的信息更直接。
五、安全视角
- 最小开放原则:只暴露必须的端口(如网站 80/443),数据库、缓存、管理端口不要对公网开放;
- 你的 Umami 后台只绑
127.0.0.1:3000、不监听公网,正是这个原则; - 改默认端口、加防火墙白名单能减少暴露面;
- 攻击时先扫描端口判断"目标跑了什么",再选对应漏洞。
举个真实的教训:很多人在云服务器上装了 Redis(默认 6379),图省事没改配置、也没加防火墙,结果它直接监听在公网上。全网扫段的机器人几分钟就扫到 6379 开放,连上去发现没设密码,直接读写服务器文件、甚至写入 SSH 公钥拿到权限。事后复盘,它干的事没多高深,就是"开了一个本不该暴露在公网的端口"。所以"数据库、缓存、管理端口只绑内网、不对公网开放"这条原则不是教条,是无数人被扫出来换回来的。
六、本篇小结
- 端口是机器上区分服务的编号(0–65535),IP 找机器、端口找服务。
- 常见:80/443 网站、22 SSH、3306 MySQL、6379 Redis、3389 RDP;自定义 SSH 端口可减扫描。
- 服务监听端口等待连接,无监听/被防火墙挡则连不上。
- 安全上:最小开放、敏感端口不对公网,端口扫描是信息收集起点。
下一篇 0.17 讲域名和 DNS——怎么靠名字找到 IP。