1. 端口基础概念:从入门到实战

做运维这些年,我见过太多同事一遇到端口问题就懵了。其实端口这东西,说白了就是计算机和外界通信的「门牌号」。今天咱们就把这个基础打扎实。

1.1 什么是端口?

想象一下,你的服务器是一栋大楼。IP地址就是大楼的地址,而端口就是楼里的一个个房间号。数据包来了,得知道去哪个房间找对应的服务。

我刚开始接触网络时,总觉得端口是个很玄乎的东西。后来在一次排查Web服务故障时,才真正理解了它的作用——没有端口,数据包就不知道该交给哪个进程处理。

核心定义:端口是操作系统用来区分不同网络服务的逻辑标识。它是一个16位的数字,范围从0到65535。

1.2 端口号范围(0-65535)

端口号一共65536个,分成了三段。你想想看,这就像把电话号码分成了不同的号段,各有各的用途。

范围 分类 数量 典型用途
0 - 1023 知名端口(Well-Known Ports) 1024个 系统服务、标准协议
1024 - 49151 注册端口(Registered Ports) 48128个 用户应用程序
49152 - 65535 动态/私有端口(Dynamic/Private Ports) 16384个 临时连接、客户端端口

实战小技巧:排查端口占用时,我习惯先用 netstat -tlnp 看监听端口。如果发现端口被占,第一反应就是看它在哪个范围——知名端口被占,多半是系统服务冲突;动态端口被占,往往是某个进程没正常退出。

1.3 知名端口(0-1023)

这部分端口是IANA(互联网号码分配局)分配给标准服务的。说白了,就是行业约定——大家说好了,80给HTTP,443给HTTPS,22给SSH。

我记得有一次线上事故,就是因为有人在服务器上启动了自定义服务,占用了22端口。结果SSH连不上了,只能去机房物理操作。嗯,从那以后我就在监控里加了一条规则:知名端口被非标准进程占用,立刻告警。

常见的知名端口有这些:

  • 21 — FTP(文件传输协议)
  • 22 — SSH(安全外壳协议)
  • 23 — Telnet(远程登录)
  • 25 — SMTP(简单邮件传输协议)
  • 53 — DNS(域名系统)
  • 80 — HTTP(超文本传输协议)
  • 443 — HTTPS(安全超文本传输协议)
  • 3306 — MySQL数据库
  • 6379 — Redis缓存
  • 8080 — HTTP备用端口(常用于Tomcat等)

避坑指南:我曾经遇到过一个问题——开发在测试环境把MySQL端口改成了3307,结果上线时忘记改回来,导致生产环境数据库连不上。所以我的建议是:生产环境尽量使用标准端口,非必要不改。如果非要改,一定要在配置管理里写清楚。

1.4 动态端口(1024-65535)

这部分端口是给客户端用的。你想想看,当你打开浏览器访问百度时,你的电脑会随机选一个动态端口(比如54321)去连接百度的80端口。这样服务器回数据时,就知道该发给哪个进程了。

动态端口的特点是:用完就释放。但有时候程序没写好,端口释放不及时,就会出现端口耗尽的问题。我在处理一次高并发场景时,就遇到过客户端端口被占满的情况——服务器上全是 TIME_WAIT 状态的连接,新请求进不来。

优化建议:Linux系统默认动态端口范围是32768-60999。如果业务并发高,可以适当扩大这个范围:

# 查看当前动态端口范围
cat /proc/sys/net/ipv4/ip_local_port_range

# 临时修改(重启后失效)
echo "10240 65535" > /proc/sys/net/ipv4/ip_local_port_range

# 永久修改
echo "net.ipv4.ip_local_port_range = 10240 65535" >> /etc/sysctl.conf
sysctl -p

1.5 TCP与UDP端口区别

很多新手搞不清TCP和UDP端口有什么区别。我打个比方:

  • TCP端口 — 像打电话。先拨号(三次握手),确认对方在,然后说话,说完挂断。可靠,但慢。
  • UDP端口 — 像对讲机。直接喊,不管对方听没听到。快,但不可靠。

在实际排查中,同一个端口号可以同时被TCP和UDP使用。比如DNS服务,53端口既监听TCP也监听UDP。但大多数服务只用一种协议。

特性 TCP UDP
连接方式 面向连接(三次握手) 无连接
可靠性 可靠,有重传机制 不可靠,不保证送达
速度 相对较慢 快
典型应用 HTTP、SSH、FTP、SMTP DNS、DHCP、视频流、游戏
端口占用排查 用 ss -tlnp 用 ss -ulnp

排查要点:用 ss 或 netstat 查端口时,记得加协议参数。我见过有人查TCP端口占用,结果UDP端口被占了他没发现,折腾了半天。

1.6 本章知识体系

下面这张图把端口的基础概念串起来了,方便你记忆:

端口基础概念知识体系 端口(Port) 逻辑标识 0 - 65535 TCP / UDP 服务区分 知名端口 0-1023 注册端口 1024-49151 动态端口 49152-65535 TCP:可靠连接 UDP:无连接 常见知名端口 22(SSH) 80(HTTP) 443(HTTPS) 常见注册端口 3306(MySQL) 6379(Redis) 排查命令 ss -tlnp / netstat -tlnp 端口是网络通信的基础,理解它才能高效排查问题

1.7 小结

端口这东西,说简单也简单,说复杂也复杂。但只要你理解了它的本质——一个16位的数字,用来区分不同的网络服务——后面学什么端口转发、端口映射、端口安全,都会轻松很多。

我个人建议,学完这章后,你可以在自己的服务器上跑一遍 ss -tlnp 和 ss -ulnp,看看当前系统都开了哪些端口。对照着知名端口列表,你就能知道哪些是标准服务,哪些是自定义服务。嗯,动手试试,比看十遍书都管用。