kdig, keep port and transaction ID for UDP retries
kdig uses new source port and transaction ID for each UDP retry, which makes the retry useless if the RTT is above query timeout.
% kdig @::1 -p 5302 +time=1 +retry=5 +dnssec xxxxxx.org.
;; WARNING: response timeout for ::1@5302(UDP)
;; WARNING: response timeout for ::1@5302(UDP)
;; WARNING: response timeout for ::1@5302(UDP)
;; WARNING: response timeout for ::1@5302(UDP)
;; WARNING: response timeout for ::1@5302(UDP)
;; WARNING: response timeout for ::1@5302(UDP)
;; WARNING: failed to query server ::1@5302(UDP)
This is what's happening:
% tcpdump -i any -n -nnnnn "udp port 5302"
...
14:02:58.956543 IP6 ::1.53929 > ::1.5302: UDP, length 39 # (1)
14:02:59.957449 IP6 ::1.53930 > ::1.5302: UDP, length 39 # (2)
14:03:00.952998 IP6 ::1.53931 > ::1.5302: UDP, length 39
14:03:00.977292 IP6 ::1.5302 > ::1.53929: UDP, length 39 # response for (1)
14:03:00.980852 IP6 ::1.5302 > ::1.53930: UDP, length 39 # response for (2)
14:03:01.987212 IP6 ::1.53932 > ::1.5302: UDP, length 39
...