发送到 NTP 服务器的 '\x1b' + 47 * '\0' 消息是什么意思?

utt*_*ool 4 networking ntp

我正在处理 NTP 客户端。其他一些线程表明包含 "\x1b' + 47 * '\0" 的消息被发送到 NTP 服务器,但这些线程都没有解释该消息的实际含义或发送的原因。我曾尝试查看 NTP RFC,但我也无法在其中找到任何有关它的信息。

Arn*_*rno 6

"\x1b' + 47 * '\0"表示一个 48 字节的数据字段。0x1B其次是47次 0。48 字节是 NTP UDP 数据包的大小。第一个字节(0x1B)指定LIVNMode

RFC 5905 NTP Specification (7.3. Packet Header Variables)指定消息头如下:

     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   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Run Code Online (Sandbox Code Playgroud)

将数据的第一个字节设置为0x1B00 011 011意味着

LI   = 0    (Leap indicator)
VN   = 3    (Version number)
Mode = 3    (Mode, mode 3 is client mode)
Run Code Online (Sandbox Code Playgroud)

您也可以使用更新的版本 ( 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 |
     +-------+--------------------------+
Run Code Online (Sandbox Code Playgroud)

指定Mode = 3将消息表示为客户端请求消息。

将这样的数据包发送到 NTP 服务器的 123 端口将强制服务器发送回复包。