unbound中缓存时间逻辑
unbound可以通过配置文件中的cache-max-ttl来设置缓存的最大缓存时间,这个会保存MAX_TTL全局变量(默认值是10天)。
unbound在处理递归响应时的调用链是comm_point_udp_callback -> outnet_udp_cb -> serviced_udp_callback -> serviced_callbacks -> worker_handle_service_reply -> mesh_report_reply -> mesh_run -> iter_operate -> process_response,在process_response方法中,会先对响应包qstate->reply->c->buffer调用parse_packet方法进行解析,接着调用dns_alloc_msg方法对解析出来数据进一步加工得到struct dns_msg *数据。在dns_alloc_msg方法内部就会对dns_msg->rep->ttl设置为MAX_TTL,然后再根据rr的ttl来跟dns_msg->rep->ttl比较选出一个最小的ttl设置到dns_msg->rep->ttl上(这里会保证rr的ttl不小于MIN_TTL,无rr记录的默认ttl是5s)。
关键方法:parse_copy_decompress、rdata_copy。
走到processQueryResponse方法去处理响应结果,在调用iter_dns_store方法缓存结果时,内部判断ttl为0就不缓存了。
关键方法:dns_cache_store_msg。

浙公网安备 33010602011771号