Skip to content
📌知识点小结
  • 端口是同一台机器上区分不同服务/程序的“编号窗口”,范围 0–65535。
  • IP 找到机器,端口找到机器上具体哪个服务;二者合起来才能通信。
  • 常见端口:80 HTTP、443 HTTPS、22 SSH、3306 MySQL、6379 Redis、8080 常见 Web。
  • 服务启动后会“监听(listen)”某个端口,等待连接;没被监听的端口连不上。
  • 安全上要识别目标开放了哪些端口、跑什么服务(端口扫描),并注意敏感端口不要暴露公网。
✅自测一下

0.16 端口:一台机器上的不同“窗口” ​

第〇篇【零基础预科】免费。这一篇讲为什么一台服务器能同时提供网站、数据库、远程登录等多种服务。

一、为什么需要端口 ​

一台服务器往往同时跑很多服务:网站、数据库、缓存、远程管理……数据都送到同一个 IP,操作系统怎么知道该交给哪个程序?

答案就是端口(Port):给每个服务分配一个 0–65535 的编号。

IP 找到机器,端口找到机器上的具体服务。 一次网络连接由"IP + 端口"唯一确定,类似"找到大楼(IP),再进某个房间号(端口)"。

你可能会问:那客户端这台机器要不要端口?也要。但客户端用的端口是系统在你发起连接时临时随机挑的(叫临时端口,一般在 1024 以上),用完就还,根本不用你操心。真正要你记的是服务器上"固定监听"的那些端口——浏览器连网站永远找 80/443,就像寄信一定写对方的固定门牌号,寄件人用哪个临时窗口无所谓。所以排查时,"目标端口开没开"才是关键,你自己这端用的临时端口不重要。

二、常见端口(建议记住) ​

端口服务
20/21FTP 文件传输
22SSH 远程登录(Linux)
25SMTP 发邮件
53DNS 域名解析
80HTTP 网站
443HTTPS 加密网站
3306MySQL 数据库
5432PostgreSQL 数据库
6379Redis 缓存
8080 / 8443常见备用 Web 端口
3389RDP 远程桌面(Windows)

你的网站 SSH 端口不是默认 22,而是自定义的 35529——改非默认端口能减少大量自动化扫描和爆破,是常见加固手段。

这些编号不是随便定的:0 到 1023 叫"知名端口",是几十年惯例定下来给特定服务用的,大家都遵守,所以你一看 80 就知道是网站、一看 3306 就知道是 MySQL。1024 以上,你想让自己的程序监听哪个都行(比如 8080、3000)。不用把整张表背下来,先混个脸熟——真到渗透时,扫出来哪个端口开着,再去查它对应什么服务。有个新手常犯的糊涂:看到 3306 别想当然当成什么"网页端口",它是数据库,数据库本来就不该被外面直接连。

三、监听与连接 ​

  • 服务启动后,会在某个端口上监听(listen) ,等待客户端来连;

所谓"监听",你就理解成开店:服务程序一启动,就在那个端口上竖起耳朵等客人,客人不来它就一直挂在那儿等着,不占你屏幕、也不需要你盯着。这也是为什么一个服务装好了却"连不上",第一步永远是确认"它到底起没起、有没有真的在听这个端口"——很多人对着防火墙折腾半天,其实服务压根就没启动。

  • 客户端向"IP:端口"发起连接(如浏览器连 gysec.top:443);
  • 若该端口没有程序监听,连接会被拒绝(connection refused);被防火墙挡则超时。

这两种"连不上"的报错含义完全不同,排查时千万别混:connection refused(连接被拒绝)意思是"这台机器活着、网络也通,但这个端口上压根没人在听"——像敲门屋里没人应;而 timeout(超时)意思是"包发出去了,对方连个回话都没有",多半是被防火墙悄悄挡掉,或者目标压根关机、路由就不通。前者说明端口关了或服务没起,后者说明流量根本没到达,两者下一步的排查方向正好相反。

你可能会问:为什么不干脆让一个程序把所有事都包了,非要分这么多端口?因为分工清楚才好管理:网站、数据库、远程登录各是各的程序,分别监听各自端口,出了问题可以单独重启其中一个、互相不影响,防火墙也能按端口精确地放行或拦截。

四、查看端口 ​

  • Linux:

    bash
    ss -tlnp            # 列出正在监听的 TCP 端口及对应进程
    sudo lsof -i -P -n  # 查看端口由哪个进程占用
  • Windows PowerShell:

    powershell
    netstat -ano        # 列出连接和监听端口,末列是进程 PID

端口扫描(如 nmap)就是逐个尝试目标各端口,判断哪些开放、背后是什么服务——这是渗透测试信息收集的标准一步。

netstat -ano 出来那几列你不用全懂,先盯三列:"本地地址"最后那个冒号后面就是端口;"状态"那一列写着 LISTENING(正在监听)还是 ESTABLISHED(已经建立的连接);最右边是 PID。把 PID 对上任务管理器里的进程名,你就知道"这个端口到底是谁开的"。Linux 的 ss -tlnp 里,t 表示 TCP、l 表示只看监听、n 不把地址解析成域名、p 显示进程,列出来的信息更直接。

五、安全视角 ​

  1. 最小开放原则:只暴露必须的端口(如网站 80/443),数据库、缓存、管理端口不要对公网开放;
  2. 你的 Umami 后台只绑 127.0.0.1:3000、不监听公网,正是这个原则;
  3. 改默认端口、加防火墙白名单能减少暴露面;
  4. 攻击时先扫描端口判断"目标跑了什么",再选对应漏洞。

举个真实的教训:很多人在云服务器上装了 Redis(默认 6379),图省事没改配置、也没加防火墙,结果它直接监听在公网上。全网扫段的机器人几分钟就扫到 6379 开放,连上去发现没设密码,直接读写服务器文件、甚至写入 SSH 公钥拿到权限。事后复盘,它干的事没多高深,就是"开了一个本不该暴露在公网的端口"。所以"数据库、缓存、管理端口只绑内网、不对公网开放"这条原则不是教条,是无数人被扫出来换回来的。

六、本篇小结 ​

  • 端口是机器上区分服务的编号(0–65535),IP 找机器、端口找服务。
  • 常见:80/443 网站、22 SSH、3306 MySQL、6379 Redis、3389 RDP;自定义 SSH 端口可减扫描。
  • 服务监听端口等待连接,无监听/被防火墙挡则连不上。
  • 安全上:最小开放、敏感端口不对公网,端口扫描是信息收集起点。

下一篇 0.17 讲域名和 DNS——怎么靠名字找到 IP。