unbound中快取時間邏輯

yghr發表於2024-06-14

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_decompressrdata_copy
走到processQueryResponse方法去處理響應結果,在呼叫iter_dns_store方法快取結果時,內部判斷ttl為0就不快取了。
關鍵方法:dns_cache_store_msg

相關文章