WebDAV / IPTV「连续连不上服务器」:DNS 结果优选 + 坏 IP 短期拉黑(P11-269)。
变更
- 现象:21:00–21:12 期间 WebDAV ping 63 次全失败、84 条
Connection reset,IPTV 频道表同主机
也失败;整段只有 21:24 一次成功。B站 / YouTube 不受影响。 - 定位:不是解析失败(没有
UnknownHostException,连接在 ~200ms 内被 RST)。本机同局域网直连
复现:cf.19961226.xyz解析出两个 Cloudflare A ——104.21.3.225正常、172.67.153.187
3/3 被 reset(TLS 都没开始,SNI 直接用 IP 也 reset ⇒ IP 级);IPv6 正常。 - 根因:DNS 答案里含一个被本网络 RST 的任播 IP,Android DNS 缓存保持同一顺序,而 OkHttp 的
默认 Dns + 单次调用内路由重试让应用侧 3 次阶梯重试全撞同一个坏 IP。 - 改动:新增
core/network/HealthyDns.kt:HealthyDns包装Dns.SYSTEM,connectFailed的地址按 IP 拉黑 5 分钟并排到最后(全部拉黑时
仍返回全部,防整域锁死),connectionAcquired自动解除;HealthyDnsEventListener把实际 TCP/TLS 失败地址喂给它;createDownloadClient()(WebDAV / IPTV 频道表 / 下载 / 更新)接上二者;- 新增
BiliMT:Dns日志(lookup 顺序 + 拉黑/恢复),此前这一层零可观测性。
- 真机判据:坏 IP 环境下第一轮 ping 的第 2 次重试即成功;日志出现
lookup … (bad=172.67.153.187)、ip marked bad/ip recovered。 - 未动:IPTV 拉流的
Ipv4OnlyDns(可后续复用同一健康排序);B站 / YouTube client。