Я работаю над клиентом NTP. Несколько других потоков указывают, что сообщение, содержащее "\x1b' + 47 * '\0", отправляется на сервер NTP, но ни один из этих потоков не дает объяснения того, что на самом деле означает это сообщение или почему оно отправляется. Я пытался посмотреть NTP RFC, но не смог найти там никакой информации об этом.
Что означает сообщение '\x1b' + 47 * '\0', отправленное на NTP-сервер?
Ответы (1)
"\x1b' + 47 * '\0"
представляет собой поле данных размером 48 байт. 0x1B
, а затем 47 раз 0
. 48 байт — это размер пакета NTP UDP. Первый байт (0x1B) определяет LI
, VN
и Mode
.
RFC 5905 Спецификация NTP (7.3. Переменные заголовка пакета) определяет заголовок сообщения следующим образом. :
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|LI | VN |Mode | Stratum | Poll | Precision |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Установка первого байта данных в 0x1B
или 00 011 011
означает
LI = 0 (Leap indicator)
VN = 3 (Version number)
Mode = 3 (Mode, mode 3 is client mode)
Вы также можете использовать более новую версию (VN = 4
). Это потребует, чтобы первый байт заголовка был установлен в 0x23 (00 100 011)
.
Режимы определяются как
+-------+--------------------------+
| Value | Meaning |
+-------+--------------------------+
| 0 | reserved |
| 1 | symmetric active |
| 2 | symmetric passive |
| 3 | client |
| 4 | server |
| 5 | broadcast |
| 6 | NTP control message |
| 7 | reserved for private use |
+-------+--------------------------+
Указание Mode = 3
указывает, что сообщение является сообщением запроса клиента.
Отправка такого пакета на порт 123 NTP-сервера заставит сервер отправить ответный пакет.
person
Arno
schedule
14.11.2014