NetQuickCheck 技术文档

本文说明 NetQuickCheck 的数据来源、计算公式与监测机制,覆盖无线分析、应用流量、网络探测与报告。

更新于

数据来源与网卡选择

NetQuickCheck 将系统采样、主动网络探测和派生统计组合在一起。系统采样提供接口、无线和进程连接信息;主动探测获取目标在本次请求中的响应;派生统计把多次观测转换为速率、分位数和变化曲线。

主要数据来源
数据采集方式用于
网络接口macOS 接口与网络配置、路由计数器网卡状态、地址、路由、DNS、收发字节及错误计数
无线网络CoreWLAN 连接读数与扫描结果RSSI、噪声、信道、频宽、接入点信息与频率覆盖
进程连接系统 nettop 统计与进程信息应用归属、远端地址、连接状态、收发字节及其增量
目标响应ICMP、TCP、DNS、HTTP 与测试数据传输延迟、解析结果、服务状态、路径和吞吐量

指定网卡的任务使用接口绑定:TCP、UDP 与直接 HTTP 请求通过 Network.framework 绑定接口,ICMP 探测使用系统命令的接口参数。自动路由模式交由 macOS 选择路径;自动 HTTP 请求沿用系统会话与代理策略。接口选择与探测结果一起保留,方便比较 Wi-Fi、有线网络和其他可用接口。

当前网络与快速检查

网卡读数与收发速率

当前网络页读取接口状态、地址、网关与 DNS,并结合已连接 Wi-Fi 的无线读数。网卡收发字节使用系统路由接口提供的 64 位计数器,接收错误、发送错误和接收队列丢弃分别保留。

接收速率(B/s)= 相邻采样的接收字节增量 ÷ 采样间隔(秒)
发送速率(B/s)= 相邻采样的发送字节增量 ÷ 采样间隔(秒)
比特速率(Mbps)= 字节速率 × 8 ÷ 1,000,000

速率描述采样间隔内的平均传输量。界面中的 MiB/s 使用 1,048,576 字节换算,Mbps 使用每秒一百万比特换算;网卡计数与按应用汇总的计数各自对应不同的统计对象。

一次检查的执行顺序

快速检查依次确认本机连接、探测网关、查询 DNS、检测外网、请求 HTTPS,再检查出口信息。当前实现给整轮检查设置 8 秒预算,每个主动步骤最多使用剩余预算中的 2 秒,结果随步骤完成逐项更新。

网关步骤尝试连接网关的 TCP 443 端口。连接成功和明确的连接拒绝都说明网关作出了响应;原始连接结果会同时保留。DNS、外网与 HTTPS 步骤分别记录各自的返回结果,便于沿连接路径逐层查看。

Wi-Fi 扫描与无线指标

无线扫描通过 CoreWLAN 获取附近接入点的 SSID、BSSID、主信道、频段、频宽与接收信号强度。可用信道目录来自当前无线接口;接入点的广播信息元素用于补充安全能力、无线制式、国家代码等详情。SSID、BSSID 等标识的读取遵循 macOS 的位置权限规则。

RSSI、噪声与信噪比

RSSI 和噪声采用 dBm,表示相对于 1 毫瓦的对数功率。RSSI 数值越接近 0,接收到的信号越强。两项读数都有效时,App 计算信噪比:

SNR(dB)= RSSI(dBm)− 噪声(dBm)

例如 RSSI 为 −55 dBm、噪声为 −92 dBm,SNR 为 37 dB。当前计算接受 −127 至 −1 dBm 范围内的读数;缺少任一项时,SNR 保持空缺。

无线信号监测有两种采样来源:本机模式定期读取已连接 Wi-Fi,附近模式重复扫描所选接入点。曲线保留各次读取的时间;接入点身份用于区分不同无线信号。

广播中的信道利用率

接入点广播包含有效的 BSS Load 信息元素时,App 将其中 0 至 255 的信道利用率字段换算为百分比:字段值 × 100 ÷ 255。该字段保留接入点广播的含义;信道重叠图则使用下一节的频率覆盖与功率模型。

频宽覆盖与信道评估

把信道转换为频率范围

信道评估先按频段、主信道和频宽建立频率范围。2.4 GHz 的 1 至 13 信道中心频率为 2407 + 5 × 信道号,单位 MHz;14 信道单独映射为 2484 MHz。5 GHz 使用 5000 + 5 × 信道号。20 MHz 范围按中心频率两侧各 10 MHz 建模,宽信道由符合目录的子信道块组合。

候选方案按频段和频宽生成,组成方案的各个子信道都需要在本次目录中。2.4 GHz 评估 20、40 MHz,5 GHz 和 6 GHz 评估 20、40、80、160 MHz 的组合。扫描记录按频段与 BSSID 归并,BSSID 缺失时采用扫描记录标识作为后备身份,避免同一接入点重复计数。

频宽或方向信息不足时,App 分别保留确定覆盖与可能覆盖。多个可能位置共有的区间归入确定覆盖,其余区间归入可能覆盖;统计接入点数量时,同一个接入点只计一次。

从对数信号计算重叠功率

信号强度先从 dBm 转为相对线性功率,再根据频率范围的重叠比例加权。对接入点 i 与候选方案 c,计算方式为:

Pᵢ = 10 ^ ((RSSIᵢ + 100) ÷ 10)
wᵢ,c = 重叠区间总宽度 ÷ 接入点建模区间总宽度
P重叠,c = Σ (Pᵢ × wᵢ,c)

其中 +100 是统一的相对功率基准。频宽存在不确定性且与候选范围重叠时,权重按 1 保守计入。这样,信号强度和覆盖宽度都会参与计算。RSSI 相差 10 dB 时,换算出的线性功率相差 10 倍。

候选方案怎样排序

能够识别当前接入点时,排序计算将其排除,以周边信号为评估对象;当前候选排序过滤 DFS 方案。2.4 GHz、20 MHz 优先考虑 1、6、11 信道组,再依次比较缺失 RSSI 的接入点数量、估算干扰功率、接入点总数和信道序列。

当全部候选都具有可比较的噪声读数时,噪声也转换为线性功率后加入;否则统一按重叠信号功率比较。每个候选子信道取有效噪声排序后的中间读数,完整候选采用其中较高的噪声值。

同频段、同频宽下,若当前方案与最佳候选处于相同优先组、缺失 RSSI 的数量相同,且估算功率不超过最佳候选的 2 倍,排序会优先保留当前方案。2 倍线性功率约对应 3 dB,用于减少小差异造成的排序跳动。

重叠曲线怎样显示

重叠曲线按各信道中心附近的 20 MHz 窗口计算加权功率,再用对数压缩映射到 0 至 1 的相对显示范围:

显示强度 = min(1, max(0, log₁₀(1 + P重叠) ÷ 7))

这一纵轴表示由扫描读数推导的相对重叠强度。遇到重叠接入点缺少有效 RSSI 时,该位置保持空缺并切开曲线段;确定与可能覆盖仍分别保留。

局域网设备发现

设备发现结合 Bonjour、WS-Discovery、SSDP 与 TCP 服务探测。Bonjour 提供广播的服务实例;WS-Discovery 与 SSDP 补充支持相应协议的设备响应;TCP 探测则检查当前扫描范围内地址的服务响应。

当前 TCP 探测端口为 80、443、445、22、631 和 9100,分别覆盖常见网页、文件共享、远程连接及打印服务入口。请求使用所选网络接口,观测记录保留来源、地址和实际响应。

发现过程逐批合并各来源的观测,并按设备地址与服务证据整理名称、类型和服务列表。接口不可用、访问被拒绝、超时和服务响应分别记录。取消或重新开始扫描时,旧一轮的迟到回调会被隔离,避免混入新结果。

应用流量与连接归属

从系统连接表找到应用

应用流量读取 nettop 提供的进程、协议、本地与远端端点、网卡、连接状态和字节计数。App 再结合运行中的应用、进程父子关系和可执行文件路径,将辅助进程归入所属应用。

归属匹配优先查找进程本身,再沿父进程链向上查找,最多检查 16 层;仍未匹配时,按可执行文件所属的应用包路径匹配。进程身份同时结合启动时间,区分系统重复使用同一 PID 的情况。

逐连接计算增量,再汇总到应用

相邻采样按进程、协议、本地端点、远端端点与网卡匹配连接。只有同一连接的前后计数可比较时,才计算收发速率,再按所属应用汇总。

连接下载速率 = (本次接收字节 − 上次接收字节) ÷ 时间差
连接上传速率 = (本次发送字节 − 上次发送字节) ÷ 时间差
应用速率 = 该应用及其关联进程的有效连接速率之和

新出现的连接先建立基线;计数回退、网卡变化或前后采样间隔超过 15 秒时,重新等待可比较样本。系统给出多条无法唯一识别的相同连接行时,App 保留这些行,并将其速率留空,避免把连接匹配歧义计算成突发流量。

远端连接与 ICMP 观测

应用连接监测保留连接首次与最后出现时间、状态变化及流量增量,并对发现的远端 IP 进行独立 ICMP 探测。流量、连接活动与 ICMP 结果按时间关联;其中延迟来自目标 IP 的 ICMP 应答。

Ping 与 TCP 探测

ICMP Echo 与无应答比例

Ping 先解析并固定本次目标地址,然后使用 IPv4 ICMP Echo 或 IPv6 ICMPv6 Echo 发送单次探测。连续监测按配置重复执行,记录实际发送、应答、无应答和返回的往返时间。

无应答比例 = 无应答次数 ÷ 实际发送次数 × 100%

计数以系统输出确认的发送量为基础。解析失败、权限拒绝或未能发出请求的记录保留具体状态,不进入已发送探测的分母。延迟统计采用有效应答的 RTT。

TCP 端口连接

TCP 端口监测在解析目标后,对指定端口建立连接,用单调时钟记录从发起连接到成功或错误返回的耗时。域名解析先完成,TCP 建连耗时单独计时。连接成功、连接被拒绝、超时和其他系统错误分别保留,可用于观察同一服务端口随时间的变化。

DNS 查询与响应校验

DNS 监测按所选服务器和记录类型发起查询,例如 A、AAAA、CNAME、MX、TXT、NS、SOA 与 PTR。系统默认解析与指定服务器查询使用各自的路径;自动路由按请求使用系统解析或 dig,指定网卡的查询通过绑定接口的 UDP 53 交换报文。

直接查询为每次请求生成事务 ID,构造问题名称、类型与 IN 类别。收到响应后依次校验报文长度、事务 ID、响应标志、问题数量、问题名称、类型及类别,再解析响应码、资源记录和 TTL。域名压缩指针由报文解析器展开。

响应中的 NOERROR 且具有所选类型的记录、NOERROR 但无相应记录、NXDOMAIN、报文截断和传输失败分别记录。PTR 查询会先把 IPv4 或 IPv6 地址转换为对应的反向域名。耗时覆盖这次查询及响应解析过程,返回结果保留实际服务器与记录内容。

HTTP 响应与阶段计时

网站监测发送 HTTP 或 HTTPS HEAD 请求,记录服务返回的状态码、最终网址和耗时。自动路径使用 URLSession 的事务指标;指定网卡或解析路径时,直接 HTTP 实现使用 Network.framework 的连接报告与请求时间点。

一次请求的阶段计时
阶段起点终点
DNS开始解析目标名完成本次解析
TCP开始建立连接TCP 建连完成,TLS 单独计时
TLS开始安全握手完成安全握手
请求发送开始发送请求请求发送完成
首字节等待请求发送完成收到响应首字节
响应接收收到响应首字节本次 HEAD 响应接收结束

阶段耗时按结束与开始时间之差计算。复用连接时,系统可能不再产生新的 DNS、TCP 或 TLS 阶段;缺少有效时间点的阶段保持空缺。重定向按各次请求保留阶段信息,整次检查还包含解析、重定向和调度等实际开销,因此总耗时单独计时。

HTTPS 沿用系统证书信任校验,并从有效证书中提取主体、颁发者、有效期与 SHA-256 指纹。HTTP 状态码描述服务返回,传输错误描述连接过程,两类结果分别保存。

网络路径与逐跳探测

网络路径监测先解析目标并固定目标地址,再从 1 开始逐步增加 IPv4 TTL 或 IPv6 Hop Limit,发送 ICMP 探测。中间路由节点可能返回跳数到期应答,目标则可能返回 Echo Reply,App 据此整理逐跳地址和可用耗时。

当前每轮最多探测 16 跳。中间某一跳未应答时,继续检查后续跳数;收到目标应答后结束本轮。节点返回不可达或策略拒绝时,保留其原始结果。存在节点地址但系统未提供有效耗时时,地址保留、耗时留空。

吞吐量与负载响应性

当前网络页:Apple networkQuality

当前网络页调用 macOS networkQuality,并解析其结构化结果,包括下载、上传、空闲延迟及负载下响应性 RPM。RPM 表示每分钟往返次数,由 Apple 的工具测量;App 保留系统返回值。原始下载与上传比特速率除以 1,000,000 后显示为 Mbps。

选择网卡时,测速命令携带接口参数,并核对结果返回的接口名称。系统仅返回部分指标时,保留已获得的字段,其余字段保持空缺。

监测器:节点与系统测速

监测器的每轮网速测试先执行所选 Cloudflare 或 LibreSpeed 节点的下载与上传,再执行 Apple networkQuality 系统测速,分别保留来源、时间和实际结果。节点下载读取测试负载,上传使用 App 临时生成的数据,按实际完成的字节数与该阶段经过时间计算平均速率:

吞吐量(Mbps)= 实际传输字节 × 8 ÷ 实际耗时(秒)÷ 1,000,000

请求使用明确的测试负载、超时与缓存策略,并分别保存传输进度、目标字节数和实际传输量。阶段结果会标明完成、部分完成或失败;测量记录同时保留服务器与网卡,方便在相同条件下比较。

持续监测、曲线与统计

独立采样,共享时间轴

监测器包含 Ping、TCP、DNS、网站、网络路径、网速、无线信号、网卡流量、应用流量与应用连接十类工具。各任务保留自己的目标、参数和采样时间,共享的时间窗口用于对齐不同观测,查看延迟、无线读数、流量与服务响应在时间上的关系。

主动探测与带宽传输分别申请资源配额,当前默认预算为同时 8 个探测操作、2 个传输操作。超过预算的操作进入等待,执行结束后释放配额;取消时等待实际操作退出再释放。配额围绕单次探测或传输管理,重复任务在下一轮重新申请。

曲线分段与相对变化

图表按采样时间和数据段标识连接曲线,中断两侧分段显示,失败记录单独呈现。视口边界处的线段插值只参与绘制,统计仍采用实际观测值。

启用延迟相对尖峰标记时,App 取同一数据段前 5 个样本的中位数 m。当前延迟超过 max(3 × m,m + 5 ms) 时标记该点;无线信号变化标记则比较与近期中位数的差,达到 8 dB 时标记。这些规则用于定位相对近期基线的变化位置。

中位数、P95 与变化量

时间窗口中的数值统计先筛选有效有限值,再排序。样本数为奇数时取中间值,偶数时取两个中间值的平均数;窗口没有有效值时,统计值保持空缺。P95 使用最近秩法:

P95 = 升序样本中第 ceil(0.95 × n) 个值
ICMP 无应答比例 = 无应答探测数 ÷ 实际发送探测数
ICMP 延迟变化量 = 有效相邻应答 RTT 差的绝对值之和 ÷ 有效相邻对数

应用连接的 ICMP 会话累计分位数使用 0.1 ms 精度直方图,与原始历史保留窗口分开累计。0 至 2000 ms 的有效应答进入分桶,更大值进入溢出计数并参与最大值记录;分位数落入溢出范围时保持空缺。延迟变化量只连接同一数据段中间隔不超过 2.5 秒的有效相邻应答。

监测记录与报告导出

监测记录保存任务参数、目标、采样时间、实际结果及相应证据。图表用于按时间查看变化,报告则把观测转换为适合阅读或继续处理的结构。

HTML
生成可阅读的报告,包含任务摘要、结果与详情。
CSV
将证据整理为时间、类别、对象、目标、方法、状态、数值、单位和详情等列,供表格工具分析。
JSON
保留结构化记录、配置与结果,适合进一步处理。

应用连接的长会话使用分段归档。导出时先固定归档的读取范围,再流式读取归档与当前内存尾部,使一次导出使用一致的数据边界。记录中的空缺值、失败与取消状态各自保留,方便复盘时沿用相同的统计口径。