上周帮朋友排查一台云服务器,他在安全组里只放行了 80,结果 HTTPS 一直连不上,浏览器转半天报超时。折腾一小时才发现,问题不在带宽也不在证书,而是他没搞清楚 port number 到底该开哪些。

port number 到底解决什么问题

网络通信分两层找地址:IP 负责定位哪台机器,port number 负责定位机器上的哪个程序。它是一个 16 位无符号整数,范围 0 到 65535,写在 TCP 或 UDP 报文头里。同一台服务器靠不同端口把 Web、数据库、远程登录这些服务分开,彼此不打架。少了端口号,操作系统就不知道该把收到的数据包交给谁。

三类端口的分工

  • 知名端口:0 到 1023,IANA 统一分配,普通进程不能随便占,80 给 HTTP、443 给 HTTPS、22 给 SSH、25 给 SMTP。
  • 注册端口:1024 到 49151,给具体软件注册,3306 是 MySQL、6379 是 Redis、5432 是 PostgreSQL、8080 常被拿来跑应用调试。
  • 动态端口:49152 到 65535,客户端发起连接时由系统临时分配,连接断开就回收。

命令行里怎么查占用

netstat -ano | findstr :3306
lsof -i :80
ss -tlnp

Windows 上用 netstat -ano,最后一列是进程 PID,再到任务管理器里对号。Linux 上 ss -tlnp 比 netstat 更快:-t 只看 TCP,-l 只看监听状态,-n 直接显示数字不解析服务名,-p 带上进程名。

几个反复踩的坑

端口冲突基本不是意外,多半是重复启动,同时开了两个 Tomcat,第二个必然报 8080 已被占用。还有防火墙只放行入站、忘了出站,或者云厂商安全组和本机 iptables 两层规则都要改,很多人只改一层就以为好了。

  • 关键提醒:改默认端口能挡掉一批自动化扫描脚本,但别把它当安全手段。数据库的 3306、6379 尤其不要直接对公网开放,能走内网就绝不放出去。