smartdns
smartdns copied to clipboard
[Feature Request] 开启测速时,第一次请求直接返回上游结果,以减少延迟
需求应用场景 开启测速时,smartdns的延迟=DNS服务器的延迟+IP的最低延迟,所以第一次请求时延迟较高。
建议的方案 开启测速时,第一次请求时马上返回上游结果,然后在后台测速,后续请求返回最佳IP。 这个功能建议做成选项,默认关闭。
设备信息
-
设备信息(CPU,厂家)
-
固件信息
这样做影响smartdns的发挥。大部分客户端有dns缓存。客户端发起dns请求的时候,会缓存第一次的请求结果,缓存之后,在缓存有效的时间内,相同域名不再向上游查询,这样就可能缓存了一个未经优选的ip地址。
还是有一定用途的,可以第一次返回的TTL设置成1,避免缓存过久

似乎 smartdns 已使用类似的设计:首次返回 sub-optimal 的 IP,TTL 为 10,异步完成所有测速之后,返回上游 TTL(此处为 60)和 best IP。
response-mode-2分支的代码,可以获取测试下看看。此功能使用时,必须开启缓存。 增加了response-mode参数,支持设置3种回应模式。
- first-ping: 收到的第一个ping结果,可以减少测速的等待时间。
- fastest-ip: 最快IP地址。
- fastest-response:第一个DNS上游回应结果。TTL设置1。
issue中的功能配置
response-mode fastest-response
代码有刷新 默认值是first-ping first-ping是第一个ping回应的IP fastest-ping是最快IP,两个可能相同,也可能不同,大部分情况应该是相同的,但第一个会降低等待ping的时延迟。
smartdns 1s内会有结果的。最大是2s,这里倒可以修改为2s的的TTL,或3s的TTL。
response-mode-2分支的代码,可以获取测试下看看。此功能使用时,必须开启缓存。 增加了response-mode参数,支持设置3种回应模式。
- first-ping: 收到的第一个ping结果,可以减少测速的等待时间。
- fastest-ip: 最快IP地址。
- fastest-response:第一个DNS上游回应结果。TTL设置1。
issue中的功能配置
response-mode fastest-response
之前配置 response-mode whole-response
新版已经不支持了。要返回包含最快IP结果的完整结果,应该配置哪个参数?@pymumu 另外如果配置为ping,是不是和tcp测速冲突?
另外实测三个选项,无论选哪个选项,第一次或第二次都只能获得若干ipv6结果(smartdns自身没有ipv6)和1个ipv4结果。预期(之前版本相同配置)6个ipv4结果