Boyan Krosnov wrote:
I spent a couple of days putting together a somewhat detailed statistical breakdown of all NTP traffic received at my pool.ntp.org <http://pool.ntp.org> server in the last 4 months. The result is here: http://www.krosnov.org/pool.ntp.org/A%20pool.ntp.org%20traffic%20analysis%202007-05-27.pdf



Interesting data, Boyan, thank you for sharing it. I love this stuff. I did a similar study in late November 2005; details and some data downloads below.

For the NTP admins out there I think the data on page 9 and 13-21 is likely to be most useful.

Page 9 shows the same pattern of abuse we've all seen. You're showing that 13% of your traffic is coming from 1/10,000 of your clients. Back in late 2005 I did a similar study and found 13% of my traffic was coming from 1/100,000 of my clients. So maybe the distribution of abusive clients is flattening a little bit, or more likely the proportion of sane clients is increasing. I didn't do any analysis to further characterize this trend, but I do still have some useful raw data from back then if someone wanted to look for trends.

Page 21 shows a traffic growth curve with a suggestion that traffic increases 500bps / month. I have a similar graph of traffic size here, although I don't see as clear a trend in it.
 http://www.somebits.com/~nelson/tmp/reqsPerDay.png
If I read your bandwidth numbers correctly, you're serving roughly 3,500,000 requests / day? Back then I saw about 1,500,000 requests / day.


You also have some interesting details about the odd behaviour of various systems' IP implementations. I'm particularly curious about your sawtooth pattern in the second graph of page 8. If I understand correctly, what you've seen is that for packets with a TTL between 129 and 173, it's more likely that TTL is even than odd. There aren't that many packets with that property, it might be interesting to extract all of them and analyze them some more. I have one hypothesis: a TTL of 129-173 is weird because it's quite high, and yet also very low if the system sets TTL to 256. Maybe those packets got trapped in some router loop that happens to only release them after an even (or odd) number of hops? It's a total guess though, it'd help a lot to know how many IPs are showing that pattern and how often they do it.


For the record, here's the email I sent of my little analysis in fall of 2005. I don't have the raw packet captures anymore, but I still have the database. I've made the 'clients' table described below available for download, it's pretty small. The 'reqs' table is about 650 megs compressed; I can make it available if you need it. The clients database (in MySQL dump format) is here:
 http://www.somebits.com/~nelson/tmp/ntp/

------------------------------------------------------

I run a pool.ntp.org <http://pool.ntp.org> server at 72.36.170.170 <http://72.36.170.170>. I've logged 72 days
worth of NTP packets and have boiled down the 18 gigs of traffic into
a database. I've done some preliminary analysis of the results.

There's a lot more detail to mine here and I hope to generate a nice
little report with pretty graphs and such. I'm interested in feedback
on what other data people would like to see. I'm particularly
interested in characterizing two things: how many abusive clients
there are, and how many clients are actually setting their clocks.


Basic analysis:

1.2M client requests / day, or 14 / second.
Standard deviation of requests/day is 255,000.
Ugly graph here:
http://www.nelson.monkey.org/~nelson/tmp/reqsPerDay.png <http://www.nelson.monkey.org/%7Enelson/tmp/reqsPerDay.png>

10,000 different IPs a day: 316,000 in 72 days.

10 IPs account for 13% of all traffic
100 IPs account for 33% of all traffic
1000 IPs account for 63% of all traffic

1100 IPs asked my server for time more than once / 128 seconds on average.
(this count is limited to IPs who stuck around more than a day.)

A preliminary check of what time the clients are reporting to me
suggests a distressing number of clients are not actually setting
their clocks to the time I give them. Ie: the time they report is
consistently off from my server by many seconds. I'm looking for a
good statistical way to characterize this.



Some boring details:

The samples are from around 8am on 2005-09-16 (UTC) to 2am 2005-11-28.

My server is at 72.36.170.170 <http://72.36.170.170>. My server was up continuously during
this time and has been serving time accurately and well. There was
about one hour of network congestion on November 9, but I don't think
I was dropped from the pool. It's a Stratum 3 clock in the USA
(Texas), synchronized to six peers.

There were about 217,000 other client requests that my parser didn't
understand, mostly badly formed requests. Those aren't present here.

Here are the database schema I have:

Raw requests

mysql> describe reqs;
+---------+----------------------+------+-----+-------------------+-------+
| Field   | Type                 | Null | Key | Default           | Extra |
+---------+----------------------+------+-----+-------------------+-------+
| ip      | int(10) unsigned     | YES  | MUL | NULL              |       |
| ts      | timestamp            | YES  |     | CURRENT_TIMESTAMP |       |
| offset  | int(11)              | YES  |     | NULL              |       |
| version | tinyint(3) unsigned  | YES  |     | NULL              |       |
| stratum | tinyint(3) unsigned  | YES  |     | NULL              |       |
| poll    | smallint(5) unsigned | YES  |     | NULL              |       |
+---------+----------------------+------+-----+-------------------+-------+

Rollup of per client data

mysql> describe clients;
+-------------+----------------------+------+-----+---------+-------+
| Field       | Type                 | Null | Key | Default | Extra |
+-------------+----------------------+------+-----+---------+-------+
| ip          | int(10) unsigned     | YES  |     | NULL    |       |
| requests    | bigint(21)           | NO   |     | 0       |       |
| min_ts      | timestamp            | YES  |     | NULL    |       |
| max_ts      | timestamp            | YES  |     | NULL    |       |
| max_poll    | smallint(5) unsigned | YES  |     | NULL    |       |
| max_version | tinyint(3) unsigned  | YES  |     | NULL    |       |
| min_stratum | tinyint(3) unsigned  | YES  |     | NULL    |       |
| min_offset  | bigint(20)           | YES  |     | NULL    |       |
| max_offset  | bigint(20)           | YES  |     | NULL    |       |
| avg_offset  | decimal(14,4)        | YES  |     | NULL    |       |
| sd_offset   | decimal(24,4)        | YES  |     | NULL    |       |
+-------------+----------------------+------+-----+---------+-------+


_______________________________________________
timekeepers mailing list
[email protected]
https://fortytwo.ch/mailman/cgi-bin/listinfo/timekeepers

Reply via email to