|
| enum | raw : uint16_t {
UNDEF = 0
, FTP_DATA = 20
, FTP = 21
, SSH = 22
,
TELNET = 23
, SMTP = 25
, DNS = 53
, DHCP_SERVER = 67
,
DHCP_CLIENT = 68
, TFTP = 69
, HTTP = 80
, WS = 80
,
POP3 = 110
, NTP = 123
, IMAP = 143
, SNMP = 161
,
SNMP_TRAP = 162
, LDAP = 389
, HTTPS = 443
, WSS = 443
,
SMB = 445
, SMTPS = 465
, SMTP_SUBMIT = 587
, LDAPS = 636
,
IMAPS = 993
, POP3S = 995
, MYSQL = 3306
, POSTGRESQL = 5432
,
REDIS = 6379
, MONGODB = 27017
} |
| | 端口号枚举值 更多...
|
网络端口封装类
提供类型安全的端口表示,封装了常见协议的端口号,支持从协议名称解析和反向转换。
遵循的国际标准
本实现严格遵循以下网络服务与端口分配相关标准规范:
端口号分配权威机构:
核心互联网协议标准:
各协议端口规范:
| 协议 | 端口号 | 标准引用 | 说明 |
| HTTP | 80 | RFC 7230 §2.7.1(HTTP/1.1 消息语法与路由) | 万维网协议 |
| HTTPS | 443 | RFC 2818 §2.4(HTTP Over TLS) | HTTP over TLS/SSL |
| FTP | 21 | RFC 959 §3.2(文件传输协议) | 文件传输协议(控制端口) |
| FTP-DATA | 20 | RFC 959 §3.2(文件传输协议) | 文件传输协议(数据端口) |
| SSH | 22 | RFC 4251 §4.1(安全 Shell 协议架构) | 安全 Shell 协议 |
| Telnet | 23 | RFC 854(Telnet 协议规范) | 远程登录协议 |
| SMTP | 25 | RFC 5321 §4.5.3.2(简单邮件传输协议) | 电子邮件传输 |
| DNS | 53 | RFC 1035 §4.2(域名实现与规范) | 域名系统 |
| TFTP | 69 | RFC 1350 §5(简单文件传输协议) | 简单文件传输协议 |
| POP3 | 110 | RFC 1939 §4(邮局协议版本3) | 电子邮件接收协议 |
| IMAP | 143 | RFC 3501 §2.1(互联网消息访问协议) | 电子邮件访问协议 |
| NTP | 123 | RFC 5905 §4(网络时间协议版本4) | 网络时间同步协议 |
| SNMP | 161 | RFC 3417 §3(简单网络管理协议) | 网络管理协议 |
| SNMP-TRAP | 162 | RFC 3417 §3(简单网络管理协议) | SNMP陷阱通知 |
| LDAP | 389 | RFC 4511 §3(轻量级目录访问协议) | 目录服务协议 |
| LDAPS | 636 | RFC 4513 §5(LDAP over TLS) | LDAP over TLS/SSL |
| SMB | 445 | Microsoft SMB 协议规范 | 服务器消息块协议 |
| DHCP-SERVER | 67 | RFC 2131 §3(动态主机配置协议) | DHCP服务器端口 |
| DHCP-CLIENT | 68 | RFC 2131 §3(动态主机配置协议) | DHCP客户端端口 |
| MYSQL | 3306 | MySQL 官方文档 | MySQL数据库 |
| POSTGRESQL | 5432 | PostgreSQL 官方文档 | PostgreSQL数据库 |
| REDIS | 6379 | Redis 官方文档 | Redis键值存储 |
| MONGODB | 27017 | MongoDB 官方文档 | MongoDB数据库 |
WebSocket 协议端口规范:
| 协议 | 端口号 | 标准引用 | 说明 |
| WS | 80 | RFC 6455 §11.1(WebSocket 协议) | WebSocket over HTTP |
| WSS | 443 | RFC 6455 §11.1(WebSocket 协议) | WebSocket over TLS/SSL |
邮件协议扩展端口规范:
| 协议 | 端口号 | 标准引用 | 说明 |
| SMTP-SUBMIT | 587 | RFC 6409 §3(邮件提交协议) | 邮件提交 |
| SMTPS | 465 | 历史惯例(IANA已重新分配) | SMTP over TLS(传统) |
| POP3S | 995 | RFC 2595 §5(POP3 over TLS) | POP3 over TLS/SSL |
| IMAPS | 993 | RFC 2595 §4(IMAP over TLS) | IMAP over TLS/SSL |
相关安全标准:
IANA 端口号注册表
根据 IANA 服务名称和端口号注册表,端口号分为三类:
| 范围 | 类别 | 说明 | 分配要求 |
| 0-1023 | 知名端口 | 系统端口,由 IANA 分配和管控 | 需要 IETF 共识或 IESG 批准 |
| 1024-49151 | 注册端口 | 用户端口,由 IANA 注册 | 需要 IETF 审核或专家审核 |
| 49152-65535 | 动态/私有端口 | 临时使用,自动分配 | 无需分配 |
本文件中定义的所有端口包含知名端口(0-1023)和部分常用注册端口(1024-49151)。
实现细节
| 特性 | 规范参数 |
| 端口数值类型 | uint16_t(0-65535) |
| 知名端口范围 | 0-1023 |
| 注册端口范围 | 1024-49151 |
| 默认端口值 | UNDEF(0) |
| 大小 | 2 字节(uint16_t) |
| 协议名称解析 | 大小写不敏感 |
| 未知协议处理 | 返回 UNDEF |
- 注解
- 本实现中定义的端口号均取自 IANA 注册表及相关 RFC 标准文档。
- 警告
- 端口号 80 和 443 同时服务于 HTTP/HTTPS 和 WebSocket(WS/WSS)协议。 使用 to_string(bool is_ws) 方法可明确区分协议类型。 端口号 465(smtps)虽然在实践中广泛使用,但 IANA 已将其重新分配给其他服务, 建议新应用使用端口 587(smtp-submit)配合 STARTTLS。
- 参见
- https://www.iana.org/assignments/service-names-port-numbers/
-
https://www.rfc-editor.org/rfc/rfc6335
-
https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
在文件 ports.hpp 第 130 行定义.