端口为什么会用尽
NAT 的 PAT(端口复用,也叫 NAPT)让多个内网地址共用一个公网地址,靠「协议 + 源地址 + 源端口」映射成不同的公网端口来区分会话。单个公网 IP 可复用的端口约六万多个,对外并发连接持续增长、老化时间设得过长、或者有扫描/P2P/代理类流量长期占用时,端口会被占满。此时设备无法为新建连接分配端口,表现为部分用户网页打不开、支付或上传超时,而带宽可能还有大量余量——端口耗尽与带宽不足是两回事。
基本信息
| 监控对象 | 出口 NAT 地址池(PAT/NAPT 模式) |
|---|---|
| 关键指标 | 端口占用率、每秒新建连接数、端口分配失败计数 |
| 参考阈值 | 峰值占用率长期高于 70% 预警,高于 85% 立即排查(按业务实际调整) |
| 采集方式 | 设备 Web 概览、SNMP 轮询、syslog 周期上报或网管平台 |
| 关联容量 | 公网地址数量、会话表上限、会话老化时间 |
典型使用场景
- 大促、活动、月末结算前的出口容量评估:提前判断地址池端口余量是否够用
- 高峰期接到「部分用户上不了网」投诉时,先分清是带宽问题还是端口耗尽
- 排查异常占用:内网扫描、P2P 下载、代理与爬虫把端口吃满,正常用户被挤掉
- 新增公网地址或扩容地址池后,验证新建失败计数是否归零
- 配置联动告警:把端口水位、会话表水位、出口带宽放在同一张看板上
排查与观察入口
排查与观察入口
设备侧:查看地址池各公网地址的端口占用率与分配失败计数
设备侧:按源地址统计占用端口的会话 TOP,定位异常来源
Linux 出口做 NAT 时:
cat /proc/sys/net/netfilter/nf_conntrack_count # 当前连接跟踪条目数
cat /proc/sys/net/netfilter/nf_conntrack_max # 上限,接近即需评估
conntrack -S # 查看插入失败等统计,insert_failed 增长说明资源紧张
ss -s # 快速看本机总连接与各状态分布指标逐列读法
| 指标 | 含义 | 正常与异常 |
|---|---|---|
| 端口占用率 | 已分配的端口数占地址池可用端口数的比例 | 平稳期低于 70%;长期高于 85% 需扩容 |
| 新建失败计数 | 因无可用端口而失败的连接分配次数 | 正常为 0,出现非零即代表已有用户受影响 |
| 可用地址数 | 池内仍可用的公网地址数量 | 为 0 时全部压力集中到剩余地址,风险陡增 |
| 会话表水位 | 当前会话数与会话表上限之比 | 接近上限时会丢新连接,与端口是否够无关 |
| 老化时间 | 空闲会话被释放前保留的时长 | 过长滞留端口,过短会中断长连接业务 |
端口耗尽不是带宽问题:加带宽不会缓解,扩容公网地址池才是见效最快的动作。缩短老化时间只对短连接有效,随意调小会让数据库长连接、长轮询类业务被中途掐断。
排查顺序建议固定为:先看占用端口最多的源地址,再判断是否为扫描、代理或 P2P 等异常流量,最后才评估扩容。先扩容量再查异常,等于持续为异常流量买单。