功能需求
根据 IPv6 规范,/64 子网(后 4 段共 8 个字节)是标准的二层网络边界。同一个 /64 内的 IP 共享外部路由节点。也就是说, /64 肯定在同一个物理线路上,抽取多个 IP 进行测试没有太大的意义。
当前如果输入 /64 段,程序会抽出一百左右 IP 进行重复测试。但每个 /64 只取一个就够了。
预期目标
改进很简单,把原本循环采样前14个字节(IPv6 地址共 16 个字节,每两个字节是一段),变为循环采样前 8 个字节,后八个字节(主机位)只随机一次:
|
r.firstIP[15] = randIPEndWith(255) // 随机 IP 的最后一段 |
|
r.firstIP[14] = randIPEndWith(255) // 随机 IP 的最后一段 |
改为:
for i := 8; i < 16; i++ { // 随机 /64 主机位,即后 4 段,共 8 位字节
r.firstIP[i] = randIPEndWith(255)
}
|
for i := 13; i >= 0; i-- { // 从倒数第三位开始往前随机 |
改为:
for i := 7; i >= 0; i-- { // 从第 8 位字节开始往前随机
功能需求
根据 IPv6 规范,/64 子网(后 4 段共 8 个字节)是标准的二层网络边界。同一个 /64 内的 IP 共享外部路由节点。也就是说, /64 肯定在同一个物理线路上,抽取多个 IP 进行测试没有太大的意义。
当前如果输入 /64 段,程序会抽出一百左右 IP 进行重复测试。但每个 /64 只取一个就够了。
预期目标
改进很简单,把原本循环采样前14个字节(IPv6 地址共 16 个字节,每两个字节是一段),变为循环采样前 8 个字节,后八个字节(主机位)只随机一次:
CloudflareSpeedTest/task/ip.go
Lines 132 to 133 in 760829d
改为:
CloudflareSpeedTest/task/ip.go
Line 139 in 760829d
改为: