网络与 IP

IP 端口范围是多少?0–65535 的三段划分与常用端口

端口号是 TCP、UDP 报文头里的 16 位字段,所以 IP 端口范围是 0–65535,共 65536 个。IANA 把它分成三段:0–1023 知名端口、1024–49151 注册端口、49152–65535 动态端口。端口 0 保留不用,TCP 和 UDP 的同号端口互不相干;查本机监听用 ss 或 netstat,查远程端口用 nc、telnet 或 Test-NetConnection。

作者 顶联产品团队发布于 6 分钟阅读

IP 端口范围是 0–65535。端口号写在 TCP 和 UDP 的报文头里,字段长度 16 位,2¹⁶ = 65536,所以最小是 0、最大是 65535。严格地说端口属于传输层,IP 报文头里并没有端口,“IP 端口”是把“IP 地址 + 端口”连在一起说的习惯叫法。IANA 按 RFC 6335 把这 65536 个号分成三段:0–1023 知名端口(也叫系统端口),1024–49151 注册端口(用户端口),49152–65535 动态端口(私有端口)。下面先讲三段的区别和几个容易误解的地方,再给常用端口表,最后是查本机端口和测远程端口的命令。

三段端口有什么区别

范围 名称 怎么分配 实际用途
0–1023 知名端口(System Ports) 须经 IETF 审核或 IESG 批准,由 IANA 分配 SSH 22、HTTP 80、HTTPS 443 等基础服务;Linux 上普通用户默认不能监听
1024–49151 注册端口(User Ports) 厂商或项目向 IANA 申请登记 MySQL 3306、RDP 3389、Redis 6379 等应用;登记不等于独占,任何程序都能用
49152–65535 动态端口(Dynamic/Private Ports) IANA 不分配 客户端发起连接时,由系统临时分配作源端口

几个常被问到的细节:

  • 端口 0 是保留号,不作为服务端口使用。程序调用 bind 时把端口写成 0,意思是“让系统随便给一个空闲端口”,并不是真的用了 0 号端口。
  • TCP 和 UDP 各有一套 0–65535。TCP 53 和 UDP 53 是两个不同的端口,防火墙要分别放行;DNS 两个都用,NTP 只用 UDP 123。
  • ICMP 没有端口。ping 用的是 ICMP,所以“ping 得通”和“端口通不通”没有必然关系:服务器禁 ping 时端口照样可能是通的,ping 得通的机器端口也可能被防火墙拦着。
  • 低于 1024 的端口在 Linux 上需要特权。普通用户启动的程序监听 80 端口会报 Permission denied,要用 root 启动、给程序加 CAP_NET_BIND_SERVICE 能力,或者调低 net.ipv4.ip_unprivileged_port_start(内核 4.11 起提供,默认值 1024)。Windows 没有这条限制。
  • 同一个 IP 上,同一协议的同一端口同一时间只能被一个程序监听,特意开启端口复用的情况除外。服务器有多个 IP 时,可以在不同 IP 上分别监听同一个端口;程序监听在 0.0.0.0,表示占用本机所有 IPv4 地址上的这个端口。

系统实际用的临时端口范围

RFC 6335 建议用 49152–65535 作临时端口,但各系统的默认值并不一样:

系统 默认临时端口范围 查看命令
Linux 32768–60999 sysctl net.ipv4.ip_local_port_range
Windows Vista、Windows Server 2008 及以后的版本 49152–65535 netsh int ipv4 show dynamicport tcp

Linux 的默认范围有一大半(32768–49151)落在注册端口段里,会带来一个实际问题:如果你把某个服务配在 40000 端口,它重启的那一刻,这个端口可能正被某个对外连接临时占用,服务就会启动失败,而且只是偶尔出现,很难复现。解决办法是把服务端口加入保留列表,系统分配临时端口时会跳过它们(以 root 执行):

sysctl net.ipv4.ip_local_port_range                       # 查看,默认是 32768 到 60999
sysctl -w net.ipv4.ip_local_reserved_ports=40000-40010    # 立即生效
echo 'net.ipv4.ip_local_reserved_ports = 40000-40010' > /etc/sysctl.d/90-reserved-ports.conf   # 重启后保持
netsh int ipv4 show dynamicport tcp      # Windows:显示 TCP 临时端口的起点和数量

临时端口范围也决定了无状态 ACL 怎么写。机房边界的 ACL 不跟踪连接状态时,服务器主动访问外部(例如下载系统更新)的回包,目的端口落在这段临时端口里,规则里要放行,否则会出现“对外提供的服务正常,服务器自己却上不了网”。Linux 和 Windows 服务器混在同一个网段时,两种默认范围合起来是 32768–65535,按这个区间放行回包。

常用端口号一览

下表是各服务的默认端口。服务都可以改端口,所以“某个端口开着”不代表一定是这个服务,以实际监听的进程为准。

端口 协议 服务 说明
20、21 TCP FTP 21 是控制连接,20 是主动模式的数据连接;被动模式的数据连接用服务器指定的高位端口
22 TCP SSH、SFTP、SCP Linux 和网络设备的远程登录
23 TCP Telnet 明文传输,交换机上建议关闭
25 TCP SMTP 邮件服务器之间投递,不少云平台默认封禁出方向的 25 端口
53 TCP、UDP DNS 普通查询走 UDP,区域传送和较大的响应走 TCP
67、68 UDP DHCP 67 是服务端,68 是客户端,PXE 装机也要用
69 UDP TFTP PXE 装机、网络设备配置备份
80 TCP HTTP 网页
110、995 TCP POP3、POP3S 收信
123 UDP NTP 时间同步
143、993 TCP IMAP、IMAPS 收信
161、162 UDP SNMP 161 接收查询,162 接收 Trap
179 TCP BGP 路由器之间的 BGP 会话
443 TCP、UDP HTTPS UDP 443 用于 HTTP/3(QUIC)
445 TCP SMB Windows 文件共享,不要对公网开放
465、587 TCP SMTP 提交 邮件客户端发信,465 为隐式 TLS
514 UDP Syslog 设备日志
623 UDP IPMI BMC 带外管理
873 TCP rsync 文件同步
1433 TCP SQL Server 数据库
1521 TCP Oracle 数据库
2049 TCP、UDP NFS 网络文件系统
3306 TCP MySQL、MariaDB 数据库
3389 TCP RDP Windows 远程桌面
5432 TCP PostgreSQL 数据库
5900 TCP VNC 第二个显示是 5901,依此类推
6379 TCP Redis 默认不设密码,只应在内网监听
8080、8443 TCP 备用 HTTP、HTTPS 常见于 Java 应用和各类管理后台
9100 TCP node_exporter Prometheus 采集主机指标
10050、10051 TCP Zabbix 10050 是 agent,10051 是 server
27017 TCP MongoDB 数据库

看到一个陌生端口号,想知道它一般对应什么服务,可以查本机的服务名数据库。Linux 用 getent services 3306,输出 mysql 3306/tcp;Windows 的同名文件在 C:\Windows\System32\drivers\etc\services。这只是“约定俗成用这个号”的列表,不代表本机真的开着这个服务。

查本机在监听哪些端口

Linux 上一条命令列出所有 TCP、UDP 监听端口和对应进程,用 root 执行才能看到全部进程名:

ss -tulnp

看 Local Address:Port 这一列就能判断端口对谁开放:0.0.0.0:22 和 [::]:22 表示本机所有地址都在监听,防火墙放行时外部就能连;127.0.0.1:6379 只接受本机连接,外部永远连不上;10.40.66.12:6789 只在这一个地址上监听,从服务器的其他 IP 进来是连不上的。

Windows 有三种查法:

netstat -ano | findstr LISTENING
Get-NetTCPConnection -State Listen | Sort-Object LocalPort | Select-Object LocalAddress, LocalPort, OwningProcess
Get-NetUDPEndpoint | Sort-Object LocalPort | Select-Object LocalAddress, LocalPort, OwningProcess

netstat -ano 的最后一列和 PowerShell 输出里的 OwningProcess 都是进程号,再用 Get-Process -Id 进程号 或 tasklist /FI "PID eq 进程号" 查出是哪个程序。UDP 没有“监听”状态,所以第一条命令只列出 TCP,UDP 要用第三条看。

查远程 IP 的端口通不通

测 TCP 端口,Linux 和 Windows 各有顺手的工具:

nc -zv -w 3 203.0.113.10 443                    # -z 只测能否建立连接,-w 3 最多等 3 秒
timeout 3 bash -c '</dev/tcp/203.0.113.10/443' && echo open || echo closed   # 没装 nc 时用 bash 自带的功能
telnet 203.0.113.10 443
Test-NetConnection 203.0.113.10 -Port 443       # 看结果里 TcpTestSucceeded 是 True 还是 False

nc 有 OpenBSD 版、传统版和 Nmap 附带的 ncat 等几种实现,提示文字略有不同,判读方法一样。Windows 默认不带 telnet 客户端,需要在“启用或关闭 Windows 功能”里勾选,所以优先用 Test-NetConnection。

结果怎么读,关键是分清“立刻被拒绝”和“等了很久超时”:

现象 含义 下一步
成功:nc 显示 succeeded 或 Connected,telnet 显示 Connected to,TcpTestSucceeded 为 True 三次握手完成,端口上有程序在监听 网络层没问题,排查应用本身
立刻失败:Connection refused 包到达了目标主机,但端口上没有程序监听,或者防火墙用拒绝(REJECT)方式回了 RST 或 ICMP 端口不可达 在服务器上用 ss 或 netstat 看服务是否在运行、监听在哪个地址
等待后超时:timed out,telnet 一直停在 Trying 包在路上被丢弃:安全组或防火墙用丢弃(DROP)方式拦截,或者主机不在线、路由不通 从近到远查:服务器防火墙、安全组或机房 ACL、中间链路
连上后马上断开 端口在监听,但应用主动关闭了连接,常见于来源 IP 不在白名单、连接数已满。nc -z 和 Test-NetConnection 遇到这种情况也显示成功,要用 telnet 或不加 -z 的 nc 连上去才看得出来 查服务自身的访问控制和日志

UDP 没有握手,nc -zvu 发出去没有回应,既可能是端口开着但应用不回包,也可能是被防火墙丢了,结论不可靠;只有收到 ICMP 端口不可达,才能确定端口没开。测 UDP 服务要用应用自己的请求:DNS 用 dig @203.0.113.53 example.com,SNMP 用 snmpget -v2c -c 团体名 203.0.113.20 SNMPv2-MIB::sysUpTime.0,IPMI 用 ipmitool -I lanplus -H 地址 -U 用户 -P 密码 mc info,收到正常应答才算通。

查一个 IP 开放了哪些端口

想知道一台服务器对外暴露了哪些端口,用 nmap 从外部扫一遍,比登录上去看监听列表更接近攻击者看到的样子,因为它把防火墙和安全组的效果也算进去了:

nmap -Pn 203.0.113.10                              # 默认扫最常用的 1000 个 TCP 端口
nmap -Pn -p- 203.0.113.10                          # 扫全部 1–65535
sudo nmap -Pn -sU -p 53,123,161,623 203.0.113.10   # UDP 慢,只扫指定端口,需要 root

-Pn 表示不先探测主机是否在线,适合禁 ping 的服务器。结果里的 open 是有程序在监听,closed 是能到达但没有程序监听,filtered 是被防火墙丢弃、无法判断,UDP 常见的 open|filtered 表示没有收到任何回应。只扫描自己管理或已获授权的地址:对别人的服务器做端口扫描,可能违反服务商的使用条款和相关法规。

IP 端口和交换机端口不是一回事

在机房里,“开端口”“关端口”至少有三种意思,工单里说不清楚很容易做错:

说法 指的是 在哪里操作
TCP/UDP 端口,如 3389 逻辑编号,标识服务器上的某个服务 系统防火墙、安全组、机房 ACL
交换机端口,如 GigabitEthernet0/0/12 交换机面板上的物理网口 交换机上开启、关闭,修改 VLAN 和限速
BMC 管理口 服务器上专门接 BMC 的物理网口,BMC 自己再监听 UDP 623、TCP 443 等端口 管理网交换机,BMC 的网络和服务设置

欠费停机、被攻击时临时断网,关的通常是交换机物理端口。Toplink DCIM 的交换机管理按厂商指令集远程开关端口、修改 VLAN、设置进出方向的限速,不用逐台登录交换机敲命令。BMC 那一侧的 623、443 和控制台端口,也不必对每个运维人员的电脑放行:部署在各机房的从节点接入管理网、就近连接 BMC,运维人员只访问 DCIM 后台,在浏览器里打开 IPMI 远程管理的控制台即可。

常见问题

端口号能超过 65535 吗?

不能。端口字段只有 16 位,65535 是最大值。配置文件或防火墙规则里出现 65536 以上的数字,要么会被拒绝,要么是填错了,应当改正。

一台服务器最多能有多少个连接,是不是受 65535 限制?

不是。一个连接由协议、源 IP、源端口、目的 IP、目的端口五项共同确定,服务端监听一个端口就能接受来自不同客户端的大量连接,上限取决于内存和文件描述符。受端口数限制的是主动向外连接的一方:从同一个源 IP 连同一个目标 IP 和端口时,可用的源端口数就是临时端口范围的大小。

自己的服务应该用哪个端口?

从 1024–49151 里挑一个不和常用服务冲突的。在 Linux 上还要避开 32768–60999 这段临时端口范围,或者用 net.ipv4.ip_local_reserved_ports 把它保留下来,否则服务重启时可能碰上端口正被某个对外连接临时占用。

想看看在你的机房里怎么用?

从一次产品演示开始,梳理你的业务链路。

查看价格
服务热线 400-112-2951

让我们聊聊你的 IDC 业务

扫码添加企业微信,预约产品演示或申请试用。

Toplink 企业微信二维码

长按保存或使用企业微信 / 微信扫描

也可致电
400-112-2951
Telegram
@TopLink88