NTP协议

来源:互联网 发布:求生之路2 mac 编辑:程序博客网 时间:2024/05/18 03:50

   NTP协议资料: http://support.ntp.org/bin/view/Support/DraftRfc2030

   c++的数据包定义如下 :

typedef struct ntp_time{UINT32 coarse;UINT32 fine;} ;struct ntp_packet{unsigned char leap_ver_mode; //chr(250)unsigned char startum; //0x4char poll; //0x3char precision; //系统时钟的精度。 0x1cUINT32 root_delay; //本地到主参考时钟源的往返时间。 //4096UINT32 root_dispersion; //系统时钟相对于主参考时钟的最大误差。 //9200UINT32 reference_identifier; //参考时钟源的标识。 //随便一串整数代表服务器标识ntp_time reference_timestamp; //系统时钟最后一次被设定或更新的时间。 ntp_time originage_timestamp; //NTP请求报文离开发送端时发送端的本地时间。ntp_time receive_timestamp; //NTP请求报文到达接收端时接收端的本地时间。ntp_time transmit_timestamp; //应答报文离开应答者时应答者的本地时间。};


ntp_time结构的填充:

time_t lvT;time(&lvT);UINT32 tmp_wrd = JAN_1970 + (long)lvT;// htonl();lvRec.transmit_timestamp.coarse = tmp_wrd;tmp_wrd = NTPFRAC((long)lvT);lvRec.transmit_timestamp.fine = tmp_wrd;

通讯过程:

client 打开123端口监听 --> 先将当前时间放于数据包A.transmit_timestamp -->将数据包A发到server 的端口123---> server收到后, 构建数据包B, 将b.originage_timestamp = A.transmit_timestamp,  B.transmit_timestamp=当前时间  -> 将数据包B 返回给client 的端口123 .

        Client/Server 数据包例子:





原创粉丝点击