It's simple ntp. The computers ask DNS for time.apple.com, while the iOS devices ask for a similar domain, time-ios.apple.com. From that point both types of devices make ntp requests. What I do on my firewall is redirect those requests to my local ntp server, this saves on external ntp traffic.
time.apple.com resolves to 12 different IP addresses, all on Apple's 17.0.0.0/8 network. It's easy to see, just issue the following command and you'll see all of them:
ntpdate -quv time.apple.com
These servers are pretty darn good, they're stratum 1, they're distributed all over the world. Time from them seems to agree to within milliseconds of each other. The iOS address only seems to resolve to 3 places, but those also agree to milliseconds of each other.Given that, I can think of at least 3 different error scenarios:
1) Apple broke something in actual ntp implementation in iOS 9.
2) One of the iOS ntp servers is goofing up. Unlikely since I'm sure Apple doubtlessly has lots of monitoring for errors like that.
3) Without WiFi available, iOS relies on the cell carrier for time services. Of course, the operation of the cell network depends on all phones knowing the exact time, but that probably doesn't carry over to something ancillary like ntp. Perhaps a carrier's ntp server is borked?
To resolve this it would be interesting to know and try:
does the problem happen only on WiFi?
does the problem happen only on cellular?
does the problem only happen with a specific carrier?
if WiFi, use something like tcpdump to monitor the
actual packets to see if any obviously bad time is
being served
Why would anyone update to 9.0.0 anyway? New software always has teething problems.What's crazy is that my clock seems to be getting worse. It's gone from 5s off to now ~20s off since I've upgraded.
My iPhone running iOS 9 (updated launch day) is 17 seconds ahead!
Too bad i don't know if turning it off and on again would have worked too.
Old iPhone 4 (iOS 7) is 0.2 seconds behind, +/- 0.18 second error - 'good'.
New iPad (iOS 9) is 2.1 seconds ahead, +/- 0.08 second error - 'bad' (through 3x reloads, same amount each reload).
Seems to be an issue...