学习笔记 SNTP

Fri 28 December 2007
By lewix

::: {#msgcns!BAC70107D054E892!319 .bvMsg} 看了一段代码,关于SNTP(Simple Network Time Protocol  RFC-1769)的Python实现。

SNTP:①

SNTP的消息格式与RFC-1305中所描述的NTP格式是一致的,不同的地方是:一些SNTP的数据域已被封装,也就是说已初始化为一些预定的值。

[ 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   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            根延迟                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            根差量                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          参考标识符                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                          参考时间戳(64)                       |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                           原始时间戳(64)                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                           接受时间戳 (64)                     |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                          传送时间戳(64)                       |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                                                               |
|                         认证符(可选项) (96)                   |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]{style="font-family:Courier New;"}

SNTP客户端操作的总结:

[字段名               请求             回答

Li                        0         闰秒指示器; 如果是3  (非同步),则放弃该消息
VN                        1( 参见正文)    忽略
方式            3( 客户端)      忽略
阶层                  0             忽略
轮询                   0               忽略
精度                    0             忽略
根延迟                   0               忽略
根差量              0               忽略
参考标识符             0               忽略
参考时间戳          0               忽略
原始用时间戳        0         忽略( 参见正文)
收到用时间戳        0         忽略( 参见正文)
传送天的时间戳        0         时间; 如果是0 (非同步),则忽略该消息
Authenticator.      (不使用)        忽略 ]{style="font-family:Courier New;"}

Python实现:②

请求:

data = 'x1b' + 47 * ''
client.sendto( data, ( ntp_server, 123 )) #UDP

接受解码:

data, address = client.recvfrom( 1024 )
if data:
    t = struct.unpack( '!12I', data )[10]
    t -= TIME1970

//参考

①中文RFC

组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang\@china-pub.com
译者:陈华鹏(shenmusic  hpchen\@eastcom.com)
译文发布时间:2001-7-14
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保
留本文档的翻译及版权信息。

②http://download.my-symbian.com/2/uiq/source/NTPConnection.zip

uip下的NTP软件,注释中有一段Python的SNTP实现

//
// NTP connection for symbian by draven \riksa\@medialab.sonera.fi
// Do what ever you wish with these...
// :::