健康与速度
为什么连不上、测速、卡顿、路由历史、断网,以及给运营商的报告。
某个东西连不上时
kilobat why <host>(MCP:diagnose_connection)从这台 Mac 逐层检查一个主机,不经过 curl 或 nc,因此严格的配置不会把检查本身拦下。它分别尝试 IPv4 和 IPv6,所以 IPv6 出了故障的网络(这是智能体卡住或反复重连的常见原因)也能得到明确的答案。它会指出所用的接口,比如 Wi-Fi、手机热点或 VPN;有多个接口时会逐一尝试。它会报告系统或其 PAC 文件选中的代理;加上 --app 时,还会报告该应用环境中的 HTTPS_PROXY,但不含密码。开启 VPN 或代理时,它会对比直连路径和隧道。发往 VPN 自身解析器的私有名称,会注明是哪个解析器、是否有响应。容器、虚拟机或远程机器中的代码有自己的网络:传入 --context,报告末尾会附上一条可以在那里运行的命令。当托管服务从自己的服务器发出请求时(比如 Warp 对自定义推理端点的做法),如果目标是私有地址(localhost、LAN 或 Tailscale 地址),--context provider 会说明它们访问不到,即便从 Mac 上可以连通。
请给出失败的确切 URL,包括查询部分:它会请求该 URL,但所有输出都把查询参数值显示为 [redacted],所以带签名的下载链接不会泄露。它会以应用的方式发送请求:通过应用的 HTTPS_PROXY、系统代理,或者用 --proxy <url> 指定应用在自身设置中配置的代理地址。当这个代理能用而直连不行时(许多公司网络就是这样),它会如实说明,而不是判定失败;当直连可用而经应用代理的请求失败时,它会说明网络没问题,是应用的路径有问题。对于它无法读取或无法经由的设置,比如 LM Studio 在下载 huggingface.co 内容时使用的 Hugging Face 代理开关,会单独附上一条说明,引用用户反馈的情况,此时结论只会说网络能到达该主机,而不会说应用的请求可以成功。Kilobat 从不更改其他应用的设置。拒绝 HEAD 的服务器只会收到一次读取 1 个字节的 GET,绝不会真的下载。它最多跟随 5 次重定向,指出失败的那一跳,并对重定向最终到达的主机检查 IPv4 和 IPv6。加上 --app 时,它会列出该应用到这个主机或其代理的已打开连接,指出它们是否使用了与本次检查不同的 IP 版本或服务器,并在几秒后再看一次:没了动静的传输会被报告为静默,绝不会报告为已完成。报告会记录应用的名称和版本、发送的方法、经过的路径;加上 --failed-at 时,还会把应用失败的时间与检查运行的时间并列。检查通过,意味着这个请求此刻能从这台 Mac 经该路径完成;它看不到已在进行的传输状况如何,那要用 kilobat bandwidth <app> 来观察。
当主机或应用属于有公开状态页面的服务(例如 slack.com 或 GitHub)时,检查会以状态页面层结束,说明该页面的报告。如果页面报告故障且此 Mac 上没有检查失败,结论会首先显示:“Slack 对所有人都不可用,不是你的问题”,并附有事件标题和链接。如果此 Mac 自身的网络出现故障,服务故障会作为附注。绿色状态页面也会照实说明。请参阅是服务的问题还是我的问题?当故障可能来自此网络本身时,网络封锁层会说明它是否封锁网站;当服务拒绝你的连接显示所在的地区时,地区层会说明;两者都会成为结论的重点。请参阅此处被封锁,并非故障。
为什么各家测速结果不一样
Kilobat 的速度测试每次只向 Cloudflare 最近的数据中心发起一个 HTTPS 连接,每个方向 8 秒、最多 80 MB,并在传输前和传输中 ping 1.1.1.1。Ookla 的 Speedtest、fast.com 和 macOS 的 networkQuality 会同时打开多个连接并自行选择服务器,所以在高速或远距离链路上通常显示得更快。在速度标签页的测试按钮旁选择 4 个连接,或运行 kilobat speedtest --parallel,看看这对你的连接影响有多大。每次保存的测试都会记录 Cloudflare 数据中心、连接数、链路(Wi-Fi 频段、信道、信号和链路速率,或以太网)、所经过的 VPN,以及期间这台 Mac 传输的其他流量。“历史记录 › 速度测试对比”、kilobat speed-compare 和 MCP compare_speed_tests 可以把两次测试并排比较,列出不同之处,并说明每一项会如何影响结果。它们列出的是差异而非原因:你网络中的其他设备也在争用带宽,而 Kilobat 看不到它们。
路由历史
“工具 › DNS 与 LAN › 追踪 3 次”或 kilobat trace <host> --rounds 3 会对一条路由追踪三次,每跳发送三个探测包,并保存每次追踪。“历史记录 › 已存路由”把到某个主机的所有已存追踪逐跳合并,像 mtr 一样:丢包、最佳、平均、最差和最近一次延迟,哪些跳点换了路由器,以及持续延迟从哪里开始。如果某一跳不回应而后面的跳点有回应,那是路由器在限制探测速率,并不是丢包。若只测本地网络,kilobat lan-test <device> 会对运行 iperf3 -s 的设备执行 5 秒 iperf3 测试;iperf3 需要自行安装,Kilobat 从不安装任何东西。
卡顿测试
通话、游戏串流和远程桌面可能卡顿,而速度和丢包看起来都正常,因为几百毫秒的 ping 尖峰会被平均值掩盖。健康标签页里的卡顿测试会在 20 秒内每 50 ms ping 一次路由器(或互联网),画出每一次回应,尖峰用玫红色标出,并给出中位数、p95、p99 和最差 ping。它会告诉你尖峰是按固定间隔重复出现(通常指向隔空投送/AWDL 扫描),还是随机出现(指向网络繁忙、干扰或信号弱)。许多路由器每秒只回应约 10 个 ping;Kilobat 能识别这种模式,不会把它算作丢包。有 Pro 时,开启低延迟后对比会在暂停隔空投送/AWDL 的情况下再测一次,并告诉你是否有改善。
低延迟暂停会关闭隔空投送、随航和通用控制,持续 15 分钟、1 小时或 2 小时,或直到游戏、通话等应用退出,最长 4 小时。时间到、应用退出、Kilobat 退出或网络变化时,它都会恢复;如果 Mac 崩溃,下次启动时也会恢复。macOS 会要求管理员批准。健康标签页的“附近”面板还会显示隔空投送的无线电是否活跃、被谁使用、你的隔空投送可见性,并可按需显示与 Wi-Fi 共用 2.4 GHz 频段的蓝牙设备。
Wi-Fi 菜单会在网络下方列出你的蓝牙设备:点按即可连接或断开。已连接且与 Wi-Fi 共用频段的耳机、键盘和鼠标会带有 2.4 GHz 标签,并提供切换到已知 5 GHz 网络的快捷方式。再往下是隔空投送,显示其可见性、正在使用该链路的程序以及低延迟暂停。只有在你选择“显示蓝牙设备”后才会出现蓝牙,macOS 也只在那时请求访问权限。
是他们的问题,还是我的?
Slack、Zoom 或 GitHub 打不开时,问题在于是你的连接还是对方出了问题。Kilobat 会读取七十多个 Mac 用户常用服务的公开状态页面,包括 AI 提供商(见下方的AI 智能体):Zoom、Slack、Microsoft Teams Free、Outlook.com、OneDrive、Google Meet、Gmail、Google Drive、Docs、Calendar 和 Chat、Discord、GoTo Meeting、FaceTime、iMessage、iCloud、App Store、Apple Music 和 Apple TV、Dropbox、Box、Notion、Airtable、Proton、1Password、Figma、Canva、Miro、Linear、Asana、Jira、Confluence、Trello、Grammarly、Claude、ChatGPT、Perplexity、Cursor、GitHub、GitLab、Bitbucket、npm、Docker、Postman、Vercel、Netlify、Supabase、Cloudflare、Tailscale、Epic Games 和 Reddit。它按 bundle ID 对应每个 App,按域名对应每个网站。kilobat down --list 会显示每个页面以及 Kilobat 读取的地址。
它只在有理由时才会查询:当你打开“健康”且自己的线路正常时,查询前台或正在传输数据的 App;当连接检查指向某个有状态页面的主机或 App 时;当通话在路由器之外卡顿时;以及当某个有状态页面的 App 一直无法建立连接(连续两次采样中,连接都在等待服务器响应),而你的线路正常时,每分钟查询一次。随后它会针对每个事件通知你一次,例如“Slack 出现故障”,并附带一个打开状态页面的按钮。每个页面的结果保留三分钟,最多等待五秒。可在“设置 › 监控 › 我使用的服务出现故障时通知我”中关闭通知。故障会显示在“健康”顶部,以及菜单和“概览”中的服务一行;这一行只在你使用的服务出现问题时才会出现。
Kilobat 只转述页面上的内容。只有当服务的页面报告故障时,它才会说该服务对所有人都不可用;只有当你自己的线路检查正常时,才会说“不是你这边的问题”。页面显示正常时,它会说页面未报告任何问题;无法读取的页面绝不会被当作故障。有些服务不公开状态:Webex、工作或学校版 Teams(其状态只向管理员显示)、Spotify、Steam、WhatsApp、Telegram 和 Signal。浏览器中的通话和网站通过连接检查来检测,因为 Kilobat 看不到浏览器标签页打开的是哪个网站。在终端中,使用 kilobat down slack、kilobat down github.com,或用 kilobat down 查看正在运行的 App;智能体使用 service_status。此功能免费。
AI 智能体和模型提供商
很多 AI 状态页面分成多个部分,Kilobat 会读取每个 App 所用的那一部分:Anthropic 的页面包含 claude.ai、Claude API 和 Claude Code,因此 claude.ai 的故障不会算到 Claude Code 头上,而点名 Claude Code 的 API 事件则会算。OpenAI 的页面分为 ChatGPT、Codex 和 API;GitHub 的页面将 Copilot 单独列出;Cursor 的页面包含 IDE 及其 CLI。如果页面上没有任何指定的部分,则以整个页面为准。支持:Claude、Claude Code 和 Claude API;ChatGPT、Codex 和 OpenAI API;GitHub Copilot;Cursor 及其 CLI;来自 Google Cloud 信息源的 Gemini Code Assist(使用 Google 账户登录时,Gemini CLI 会用到它)和 Vertex AI;Mistral、Groq、Cohere、Fireworks AI、Together AI、Hugging Face 和 Perplexity;Windsurf、Zed、Warp、Replit、Lovable、Bolt 和 v0。
编程智能体按进程识别(claude、codex、gemini、cursor-agent、copilot),任何 App 则按其连接的 API 识别:一旦某个连接卡住,Kilobat 会查找 api.anthropic.com、api.openai.com、api.githubcopilot.com、api.mistral.ai、api.groq.com 以及其他提供商 API 主机的地址,并保留十分钟。因此,像 Aider 这样使用你所设置的提供商的智能体,或调用 Claude API 的编辑器,也能被识别出来。当其中某个一直无法连接、而你的线路正常且提供商报告了问题时,通知会同时点出两者:“Claude Code:Anthropic 报告出现故障,不是你的连接问题。”卡在错误上的智能体可以自己查询:kilobat down claude-code、kilobat down api.openai.com 或 MCP 工具 service_status;kilobat down claude 和 kilobat down openai 会列出该页面的每个部分。
由于没有 Kilobat 能读取的公开信息源,以下服务未覆盖:Grok 和 xAI API(其页面拒绝非浏览器请求)、DeepSeek、OpenRouter、Replicate(其状态现已并入 Cloudflare 的页面)、JetBrains AI、Kiro 和 Amazon Q(需登录 AWS),以及 Google AI Studio 中的 Gemini API。Ollama 和 LM Studio 在你的 Mac 上运行。
此处被封锁,并非故障
状态页面显示绿色但网站仍无法加载,可能意味着当前网络封锁了它:例如酒店或机场 Wi-Fi、学校或办公室网络、移动运营商或国家规定。当连接检查、kilobat down 或持续失败的应用出现这类迹象时,Kilobat 会测量并说明,例如:“Slack 看起来在此网络上被封锁,并非故障:此处无法解析其名称,而安全解析器返回了真实地址。”它会指出网络类型(在“设备”中标记的家庭网络、移动数据或手机热点、显示过登录页面的公共 Wi-Fi,或普通 Wi-Fi),并仅建议中立选项:其他网络、移动数据或漫游,或询问网络管理者。Kilobat 测量封锁情况;它不会帮助绕过封锁,也绝不会建议绕过的方法。
判定依据及每项检查所需的对照:
- DNS 篡改。此 Mac 的 DNS 表示名称不存在、没有响应、返回公共服务不使用的地址(0.0.0.0、127.0.0.1 或私有地址)、返回与虚构名称相同的地址,或将其指向无法为该名称出示有效证书的服务器,而向可信解析器发出的一次 DNS-over-HTTPS 查询返回了能够出示有效证书的公共地址。能够出示有效证书或位于同一地址块的不同地址,属于 CDN 选择附近服务器,而非篡改。可信解析器也认为不存在的名称、对所有名称都失败的 DNS、VPN 或公司针对该域名的分离 DNS,以及只有私有网络认识的名称,绝不计入。
- 安全连接被中断。连接建立后,一旦指定网站,TLS 握手就被重置或没有响应,两次均如此;而指定为其他网站时同一服务器会响应。对任何名称都不响应的服务器、第二次尝试成功或始终无法建立的连接,都属于普通故障。
- 全部无法连接。服务的所有地址都无法连接,但可信解析器本身有响应。只有服务状态页面未报告问题时才计入,结论会说明页面尚未报告的故障也会呈现相同现象。
- 封锁页面。普通 HTTP 请求返回 HTTP 451 或重定向到服务自身域名之外,可以佐证上述某项结果;单独出现时证据不足。
Wi-Fi 登录页面、Kilobat 自身的规则、防护或断线保护,以及状态页面报告的故障,都能更好地解释连接失败,因此都不会报告为封锁。VPN 开启时,检查会经过 VPN,结论会注明:封锁在 VPN 路径上,不一定在此网络上。
隐私。DNS-over-HTTPS 查询只发往你的可信解析器:默认为 Cloudflare(1.1.1.1),除非在“设置 › 监控”或使用 kilobat settings block-check-resolver quad9 选择 Quad9(9.9.9.9);使用其地址,且只在诊断故障时查询:针对一个失败名称只查询一次。握手发往服务自身的地址,虚构名称位于 example.com 下。Kilobat 绝不检查被封锁网站列表,也不在后台扫描。
有状态页面的应用持续失败而页面未报告故障时,Kilobat 对每项服务和网络最多每小时检查一次,在“服务”下列出封锁,并对每项服务、网络每天发送一次通知;可在“设置 › 监控 › 当服务看起来在此网络上被封锁时通知我”或使用 kilobat settings block-alerts off 关闭。kilobat down slack 对你指定的每项服务建立一次连接,失败时运行相同检查;kilobat why slack.com 或 kilobat doctor slack.com 将它作为一层加入。智能体通过 service_status 和 diagnose_connection 的 block 字段获取相同信息。与状态页面一样,此功能免费。
你所在的地区不可用
有些服务以及某些功能(例如欧盟部分地区的 AI 工具)并非到处提供,服务自身会根据你的地址显示的位置拒绝访问。这不是故障,也不是此网络的封锁。Kilobat 只有从经过验证的连接收到服务自身的响应时才会这样说明:HTTP 451,或曾观察到的措辞,例如 OpenAI 的 unsupported_country_region_territory、claude.ai 的地区页面、Anthropic API 关于不支持国家、地区或领土的错误,以及 Gemini API 的“User location is not supported”。结论例如:“OpenAI 表示其服务在你所在地区不可用。你的连接目前显示位于德国”,其中的国家是公网地址注册的国家(以 kilobat ip --public 的方式查询,包括经过任何 VPN)。当 VPN 或漫游 eSIM 将出口放在另一个国家,或此 Mac 的时区设为另一个国家时,它会说明。它只陈述事实,绝不会建议绕过地区限制的方法;绕过可能违反服务条款。可选方式是查看服务支持的国家列表并联系其支持团队。通过 kilobat why api.openai.com --error '…' 粘贴应用收到的错误,或在 diagnose_connection 中使用 error,即可识别。
给运营商的报告
连接不佳时,运营商或 IT 服务台需要证据。在“健康”中,报告按钮会根据 Kilobat 在此网络上过去 24 小时或 7 天的记录生成报告。内容包括断网、路由器及其之外的延迟、ping 丢失、与套餐对比的速度测试,以及添加失败网站后的检查。每条结果说明测量了什么、在哪里测量,绝不判断责任归属。可复制为文本用于支持聊天,也可存储或分享为 PDF。报告不包含网络名称、本地 IP 和硬件地址、设备名称或哪些应用使用了网络。在终端中运行 kilobat support-report --host github.com,或使用 --html --output report.html 查看页面。默认省略网站名称、URL 及其路径,包括重定向中的内容。只有希望报告包含这些名称时,才勾选包含网站名称,或在 CLI 中传入 --include-sites,或向 MCP create_support_report 传入 include_site_names: true。网站检查的公网 IP 测量仍会保留。
断网补偿
很多运营商在长时间断网后应当给予补偿,有些甚至不用申请就会发放。“历史记录 › 断网补偿”会汇总本月 Kilobat 能证明问题出在运营商一侧的断网,并与你的运营商公布的规定对比。只有在两台互联网服务器和一项 HTTPS 检查都失败、而你的路由器仍在响应 Kilobat 的检查时,或者 Starlink 天线将其记录为 Starlink 网络的问题(无卫星、无响应)时,断网才会计入。你自己的路由器或 Wi-Fi 造成的断网、酒店或咖啡馆 Wi-Fi 登录页面占住连接的时间、检查次数不足无法判断的断网,以及 Mac 睡眠的所有时间,都不计入,并单独显示。卡片会在规定门槛旁显示最长断网和本月合计;当 Kilobat 核实过的规定适用时,还会显示可能获得的补偿。
选择你的运营商,或点按“检测”:Kilobat 会向 Cloudflare 查询你的公网地址,向 RIPE NCC 查询它所属的网络,然后将该网络与自己的列表比对。输入你每月的宽带费用以便估算。这些规定都内置在 App 中,每条都附有来源和核对日期:适用于 BT、EE、Plusnet、Sky、Virgin Media、Vodafone、TalkTalk 和 Hyperoptic 的 Ofcom 自动补偿(报修的故障在两个完整工作日内未修复时,每天 £10.34)、适用于德国所有运营商的 § 58 TKG、西班牙的 Real Decreto 899/2009 和意大利 AGCOM 的补偿规定,以及 Xfinity、AT&T Fiber 和 Internet Air、Orange 和 Free 公布的条款。对于 Kilobat 无法核实规定的运营商,例如 Spectrum、Verizon、Cox、T-Mobile Home Internet 或 Starlink,卡片会告诉你仍然可以凭同样的证据申请。
“拷贝申请”会生成一条使用 App 语言的消息,包含账号占位、每次断网的日期和时长、Kilobat 的测量结果、规定和金额;“打开申请页面”会带你前往运营商受理申请的页面,“存储运营商报告”会将测量结果存为 PDF 以便附上。当规定有申请期限时,比如 Xfinity 的 120 天,“提醒我”会在期限前设置一条通知。Kilobat 从不发送任何内容。它从断网开始时计算,而运营商从你报修时开始计算,并决定哪些符合条件,所以它只会说“可能符合”。打开“设置 › 监控 › 断网可能符合补偿条件时通知我”后,Kilobat 每次断网只通知一次,每天最多一次。卡片中的估算、申请和通知属于 Kilobat Pro。在终端中,kilobat credit 显示本月情况,--draft 输出申请,credit providers 列出规定;智能体可以通过 get_outage_credit 读取。
套餐检查
看看你是否得到了付费购买的速度。在“设置 › 网络 › 套餐速度”中或速度测试结果下方,输入这个网络套餐的下载速度。之后,“速度”标签页会把这个网络过去 30 天的测试与它对比:“你获得了 500 Mbps 的 61%”、中位数、晚间中位数与其他时段的对比,以及测试结果不到套餐一半的频率。每个网络都有自己的套餐,所以咖啡馆的结果不会算进你家里的套餐。使用 Kilobat Pro 时,打开“设置 › 网络 › 套餐检查”,Kilobat 每天最多进行三次轻量测试,每天的时间都不同,并且总有一次在晚间高峰(晚上 7 点到 11 点),这是运营商最常变慢的时段。每次检查通过四个连接使用 25 到 80 MB 流量,以你的套餐速度约需两秒。它会等到没有进行中的通话、没有 VPN 承载流量、Mac 的其他流量很少,并且接通电源或电量超过 50% 时才运行,也从不在按流量计费的网络上运行。运营商报告会以这个月的结果开头:“30 天内 41 次定时检查:下载中位数 305 Mbps,你付费的套餐为 500 Mbps(61%);晚间 180 Mbps。”在终端中,kilobat plan 会显示同样的内容,智能体可以通过 get_plan_check 获取。
服务速度
速度测试测量的是到附近测试服务器的路径。你实际下载的服务,例如 GitHub、iCloud、Steam、npm、Docker 或 Hugging Face,位于其他路径的终点;运营商到其中某个服务的链路可能拥堵,而互联网其他部分依然很快。Kilobat 测量你本来就在进行的下载:每个 5 MB 或以上的下载,将同一服务的连接合并,按实际传输的秒数计算。它根据应用请求的网站(网络过滤器运行时)、应用、反向 DNS 名称,或地址所属网络来命名;后者使用应用内置的 GitHub、Apple、Valve、Dropbox、Akamai、Fastly、Cloudflare、Amazon CloudFront、Google 和 Microsoft 公开地址列表。不产生额外网络流量。视频、音乐和通话按播放速度传输,因此从不计入;VPN 承载流量时也不计入。
“速度 › 服务”列出此网络上的每项服务:30 天内的典型速度、最近一次下载及其占线路速度的比例。线路速度取此网络最新速度测试或 Kilobat 在此观察到的最快下载,两者中较高者。使用 Kilobat Pro 时,“健康”只在证据明确时提示:过去一天从同一服务下载至少三次,速度低于线路的三分之一;每次下载的同一小时内,另一网站或速度测试至少快三倍;该服务当天大多数下载都很慢;且该服务在你使用的其他网络上并非都很慢。被你自己的其他下载挤占的下载不计入。“今晚运营商到 GitHub 的路径很慢。3 次 GitHub 下载约为 7 Mbps,而同一小时内其他网站达到 267 Mbps。减速发生在运营商与 GitHub 之间,而不是 Wi-Fi 或此 Mac。”
随后显示证据。如果服务的状态页面报告问题,结果会说明很可能是服务端问题。否则它会追踪一次到服务服务器的路由,指出延迟在哪一跳跃升。历史记录足够时,它会找出速度慢的时段,例如每天晚上 7 点到 11 点——这是高峰期两个网络之间链路拥堵的典型迹象。接下来给出建议:尝试 VPN 或其他 DNS,以另一条路径连接服务;联系运营商,运营商报告中包含相关部分;或稍后再试。
测试此服务会从服务提供的公开下载文件中最多下载 25 MB,例如 GitHub 发行版、Apple 的 macOS 恢复映像、npm 或 PyPI 软件包,或 Cloudflare 速度测试。只在点击时下载一次,绝不会在按流量计费的网络上进行。在终端中,kilobat service-speed 显示表格和结果,--test github 运行测试,--list 显示文件;智能体通过 get_service_speed 获取历史记录。