jbenet/ios-ntp

What is missing from RFC 5905

Closed this issue · 2 comments

In the README it is mentioned

This project contains code to provide time obtained from standard time servers using the simple network time protocol (SNTP: RFC 5905). The implementation is not a rigorous as described in that document since the goal was to improve time accuracy to tens of milliSeconds, not to microseconds.

I was wondering if more detail could be given about what portions of the 5905 spec are not implemented. Specifically, is it possible to extend this implementation to provide even more accurate time than iOS now has out of the box?

Is it possible to provide more accurate time than iOS provides? That's a really good question and I suspect the answer, all other things being equal, is ≈no. Extrapolating from the knowledge that macOS time derivation employs the NTP reference code from U Delaware, I'd expect iOS uses the same code. If it does, that's as good as you're going to get.

The lack of rigor in ios-ntp is the in quality of the sampling and averaging done to reduce the impact of inaccurate time sources; ios-ntp does some of this, just not with the same statistical rigor as the real thing.

Of course, this is open source and anyone should feel free to improve it .. personally, I don't believe it's worth it. As I've mentioned before, ios-ntp was written when iOS time was very unreliable. It's value in the modern era is as a quick check to make sure that iOS time has not been deliberately set to be inaccurate.

Thanks for the prompt reply @gavineadie!

I suspected as much with regards to improving this beyond Apple's implementation. In my experimentation, I see Apple devices synced within 10s of milliseconds. That's pretty good for my needs, but if I could drop that by an order of a magnitude (single digit milliseconds), I would really be in great shape. I'm just not sure that is realistic or not, but reading that section in the README gave me an inkling of hope that a more rigorous implementation of NTP v4 would get me there. As you mention, though, iOS is tuned to be event-driven and the network conditions are highly inconsistent, so it might not be possible to do better than iOS is doing right now.