首页/网络/抓包与流量分析速查/TCP 连接被拒绝判读
TCP 流分析82 条

TCP 连接被拒绝判读

收到 RST(通常 RST+ACK)表示目标可达但端口拒绝:服务未监听、监听被防火墙 REJECT 或队列满;与"超时"含义完全不同,指明排查方向。

连接被拒绝在说什么

客户端发出建连请求后立刻收到复位报文,通常带确认位,表示目标主机可达但拒绝对该端口提供服务。它与「超时」的含义完全不同:超时说明请求可能被静默丢弃或没有回应,而立即收到复位意味着报文已经到达对方并被明确拒绝。常见原因有三种:目标端口没有进程监听、策略被配置为拒绝、或者监听队列已满导致内核直接回绝。响应速度很快是它最显著的外部特征。

基本信息

抓取写法tcp[tcpflags] & tcp-rst != 0
报文形态SYN 之后紧跟复位,通常带确认位
响应速度极快,接近一个往返时延
内核含义端口未监听或被策略配置为拒绝
对照现象应用日志里的连接被拒绝提示对应本现象

典型使用场景

  • 区分两类失败:立即拒绝与静默超时的排查方向完全不同
  • 确认服务是否在监听:结合服务端监听状态快速定位
  • 核对策略配置:确认拒绝类策略与丢弃类策略的实际表现
  • 排查监听地址:服务只绑定了部分地址时从其他地址访问会被拒绝
  • 识别端口写错:调用方配置了错误的端口时表现为快速拒绝

核对方式

核对方式
ss -lnt | grep ':8080'                            # 本机是否在监听该端口
ss -lntp | grep ':8080'                           # 确认是哪个进程监听
ss -lnt | awk '{print $4}' | sort                 # 核对监听地址范围
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-rst != 0 and dst port 8080' -c 10   # 抓拒绝报文
tcpdump -i eth0 -nn -ttt 'port 8080 and tcp[tcpflags] & (tcp-syn|tcp-rst) != 0' -c 10   # 看响应快慢

拒绝与超时对比

对比项连接被拒绝连接超时
响应方式立即收到复位无任何响应直到本地放弃
耗时约一个往返时延由重试次数决定,常见数十秒
含义报文到达且被明确拒绝请求被静默丢弃或对端未回应
排查方向端口监听、监听地址、拒绝类策略路径策略、路由、对端处理能力
结论强度可以直接定位到监听与策略需要两端对照才能定性
快速收到拒绝其实是好事:失败可以立即暴露,调用方不必等到超时才放弃,排障时也省下了大量等待时间。真正难查的是静默丢弃造成的不确定状态。
拒绝类策略与端口未监听产生的报文形式非常接近,仅凭抓包难以区分。必须回到服务端核对监听状态与策略配置,才能给出确定结论。

服务端核对

服务端核对
ss -lntp | head -20                  # 监听端口与进程一览
systemctl status mysvc 2>/dev/null | head -8   # 服务是否在运行
iptables -S 2>/dev/null | grep -i reject | head -10   # 是否存在拒绝类规则

判读要点

  • 多个客户端同时被拒绝时,优先怀疑服务未启动或端口配置变更
  • 只有部分来源被拒绝时,重点看策略与监听地址绑定范围
  • 应用日志出现连接被拒绝而抓包看不到复位,说明抓包点不在路径上
  • 调用方配置端口写错时表现为稳定复现的快速拒绝,容易与故障混淆

易错点

  • 把连接被拒绝与连接超时混为一谈,两者的排查方向完全不同
  • 看到复位就断定服务崩溃,实际可能只是端口没在监听或地址没绑定
  • 忽略监听地址绑定范围,服务只监听回环地址时从外部访问必然被拒
  • 抓包点不在路径上却以抓不到复位为依据否定问题存在
  • 未核对策略配置就下结论,忽略了拒绝类策略的干扰

数据来源与参考

  • RFC 9293(RST)
  • Wireshark User's Guide
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌