[ntp:questions] NTP client basic

Peter Martinez peter.martinez at btinternet.com
Thu Mar 1 19:52:03 UTC 2007


Greetings to the list:

I am an amateur programmer and a radio amateur. 18 months ago I needed to 
closely control the clock on my PC for a radio-monitoring application, and 
wrote an NTP synchroniser with Delphi, using an NTP component I found on the 
internet.  It's been running perfectly since then, keeping the clock within 
10mS rms.

Recently a friend in another part of Europe wanted to do the same, so I sent 
him my effort. To my surprise it went crazy, tweeking the clock to crazy 
times and rates, and locking itself up.

To cut a long story short, I discovered that there were duplicate NTP 
requests reaching the server, and the duplicate replies were getting 
mixed-up. I dug deep into the source code of the NTP component, and although 
I couldn't find the cause of the duplicates, I realised the thing was not 
well written and would malfunction if it encountered a repeat NTP reply. I 
wrote my own, working from RFC2030 and using a Delphi UDP component.

That suffered the same problem.  I now know that the UDP protocol which 
underlies NTP, is NOT guaranteed to prevent duplicates. I therefore had to 
take steps in my code to detect and suppress them.  The NTP client component 
I had used previously had taken no account of this. RFC2030 only hints at 
the problem. I am amazed.

My questions are therefore:
1) Do ALL good NTP clients take steps to suppress duplicate requests and/or 
replies, or do they survive by assuming that they don't occur very often? My 
original survived 18 months without being hit, but my friend in Belgium was 
hit by 1 repeat in 1000 or so, which rendered the NTP process unusable.

2) Knowing that the UDP protocol can produce spurious repeats, I would have 
thought the NTP server could detect them and suppress the repeated replies. 
Do they do this or am I being naive?

3) Does anyone have any figures for the incidence of UDP repeats? What sort 
of delay would one expect between the original and the repeat?  I am seeing 
figures of 5 minutes or more, which really surprises me.  Maybe my friend 
has a particularly noisy ADSL connection.

4) What's the usual way of suppressing duplicate replies? Comparing a local 
copy of the request's xmit timestamp with the reply's orig. timestamp seems 
the obvious.

If these questions have come to the wrong place, would some kind soul point 
it (or me) in a better direction.

Thanks.

Peter Martinez
NorthWest UK.




More information about the questions mailing list