smartdns icon indicating copy to clipboard operation
smartdns copied to clipboard

[Feature Request] 开启测速时,第一次请求直接返回上游结果,以减少延迟

Open ghost opened this issue 2 years ago • 6 comments

需求应用场景 开启测速时,smartdns的延迟=DNS服务器的延迟+IP的最低延迟,所以第一次请求时延迟较高。

建议的方案 开启测速时,第一次请求时马上返回上游结果,然后在后台测速,后续请求返回最佳IP。 这个功能建议做成选项,默认关闭。

设备信息

  1. 设备信息(CPU,厂家)

  2. 固件信息

ghost avatar Jul 20 '22 06:07 ghost

这样做影响smartdns的发挥。大部分客户端有dns缓存。客户端发起dns请求的时候,会缓存第一次的请求结果,缓存之后,在缓存有效的时间内,相同域名不再向上游查询,这样就可能缓存了一个未经优选的ip地址。

HiGarfield avatar Jul 20 '22 14:07 HiGarfield

还是有一定用途的,可以第一次返回的TTL设置成1,避免缓存过久

pymumu avatar Jul 20 '22 15:07 pymumu

image

似乎 smartdns 已使用类似的设计:首次返回 sub-optimal 的 IP,TTL 为 10,异步完成所有测速之后,返回上游 TTL(此处为 60)和 best IP。

SukkaW avatar Jul 21 '22 05:07 SukkaW

response-mode-2分支的代码,可以获取测试下看看。此功能使用时,必须开启缓存。 增加了response-mode参数,支持设置3种回应模式。

  1. first-ping: 收到的第一个ping结果,可以减少测速的等待时间。
  2. fastest-ip: 最快IP地址。
  3. fastest-response:第一个DNS上游回应结果。TTL设置1。

issue中的功能配置

response-mode fastest-response

pymumu avatar Jul 21 '22 14:07 pymumu

代码有刷新 默认值是first-ping first-ping是第一个ping回应的IP fastest-ping是最快IP,两个可能相同,也可能不同,大部分情况应该是相同的,但第一个会降低等待ping的时延迟。

smartdns 1s内会有结果的。最大是2s,这里倒可以修改为2s的的TTL,或3s的TTL。

pymumu avatar Jul 21 '22 15:07 pymumu

response-mode-2分支的代码,可以获取测试下看看。此功能使用时,必须开启缓存。 增加了response-mode参数,支持设置3种回应模式。

  1. first-ping: 收到的第一个ping结果,可以减少测速的等待时间。
  2. fastest-ip: 最快IP地址。
  3. 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结果

PikuZheng avatar Jul 29 '22 15:07 PikuZheng