Ntp原理和客户端程序的设计优质PPT.ppt
《Ntp原理和客户端程序的设计优质PPT.ppt》由会员分享,可在线阅读,更多相关《Ntp原理和客户端程序的设计优质PPT.ppt(27页珍藏版)》请在冰豆网上搜索。
![Ntp原理和客户端程序的设计优质PPT.ppt](https://file1.bdocx.com/fileroot1/2022-10/7/76694133-8cea-457d-8217-133c3ca2c328/76694133-8cea-457d-8217-133c3ca2c3281.gif)
用于发送报告有关数据包的传送错误的协议。
TCP:
为应用程序提供可靠的通信连接。
适合于一次传输大批数据的情况,滑动窗口协议。
三次握手:
abbaabUDP:
提供了无连接通信,且不对传送包进行可靠的保证,适合于一次传输少量数据。
应用层:
telnet,ftp,smtp,pop3.dns,snmp,http,tftp传输层:
tcp/udp网络层:
icmp,igmp,ipv4,ipv6,bgp,rip网络接口层:
arp,rarp,mpls,ppp,slip,Ntp原理和客户端程序的设计,一.网络基础二.Socket介绍和常用函数三.udp编程四.Ntp协议和客户端程序的实现和调试五.TCP编程六.Tcp和Udp客户端服务端的例子七.开发环境的构建和TortoiseSVN,二.1.socket概念,在Linux中的网络编程是通过socket接口来进行的。
socket是一种特殊的I/O接口,它也是一种文件描述符,是一种常用的进程之间通信机制,通过它不仅能实现本地机器上的进程之间的通信,而且能够实现不同机器上的进程之间的通信。
有三种类型:
流式(SOCK_STREAM)数据报(SOCK_DGRAM)原始(SOCK_RAW),二.2.Socket相关数据结构,structsockaddrunsignedshortsa_family;
/*协议族*/charsa_data14;
/*协议地址,包含该socket的IP地址和端口号。
*/;
structsockaddr_inshortintsa_family;
/*协议族*/unsignedshortintsin_port;
/*端口号*/structin_addrsin_addr;
/*IP地址*/unsignedcharsin_zero8;
/*填充0以保持与structsockaddr同样大小/;
这两个数据类型是等效的,可以相互转换,通常使用sockaddr_in更为方便,二.3SocketAPI相关常用函数,基本函数:
socket()bind()connect()listen()accept()send()recv()sendto()shutdown()recvfrom()close().字节顺序:
htons()htonl()ntohs()ntohl().字符串的IP和32位的IP:
(“192.168.0.1”structin_addr)inet_aton(),inet_pton(),inet_addr().IP和域名的转换:
gethostbyname()getaddrinfo()gethostbyaddr().其它属性相关函数set/getsockopt()fcntl()ioctl()select()getsockname,二.3SocketAPI部分函数说明,socket():
用于建立一个socket连接。
bind():
用于将本地IP地址绑定到端口号,主要用于TCP的连接,listen():
用于创建一个等待队列,在其中存放未处理的客户端连接请求。
accept():
用于等待并接收客户端的连接请求,它通常从等待队列中取出第一个未处理的连接请求。
connect():
在TCP中用于与服务器端建立连接,send()和recv():
分别用于发送和接收数据,,Ntp原理和客户端程序的设计,一.网络基础二.Socket介绍和常用函数三.udp编程四.Ntp协议和客户端程序的实现和调试五.TCP编程六.Tcp和Udp客户端服务端的例子七.开发环境的构建和TortoiseSVN,三.1UDP介绍,UDP协议是一种无连接、不可靠的传输层协议。
使用该协议只是把应用程序传来的数据加上UDP头包括端口号、段长等字段,作为UDP数据包发送出去,但是并不保证数据包能到达目的地,其可靠性由应用层来提供。
就像发送一封写有地址的一般信件,却不保证信件能到达一样。
因为协议开销少,与TCP协议相比,UDP更适用于应用在低端的嵌入式领域中。
很多场合中,如网络管理SNMP、域名解析DNS、简单文件传输协议TFTP,大都使用UDP协议。
UDP具有TCP所望尘莫及的速度优势。
虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,这无疑使速度受到严重的影响。
而UDP将安全和排序等功能移交给上层应用来完成,极大地降低了执行时间,使速度得到了保证。
UDP协议的最早规范于1980年发布,尽管时间已经很长,但是UDP协议仍然继续在主流应用中发挥着作用,包括视频电话会议系统在内的许多应用都证明了UDP协议的存在价值。
因为相对于可靠性来说,这些应用更加注重实际性能,所以为了获得更好的使用效果(例如,更高的画面帧刷新速率)往往可以牺牲一定的可靠性(例如,会面质量)。
这就是UDP和TCP两种协议的权衡之处。
根据不同的环境和特点,两种传输协议都将在今后的网络世界中发挥更加重要的作用。
三.2UDP协议的流程图,Ntp原理和客户端程序的设计,一.网络基础二.Socket介绍和常用函数三.udp编程四.Ntp协议和客户端程序的实现和调试五.TCP编程六.Tcp和Udp客户端服务端的例子七.开发环境的构建和TortoiseSVN,四.1Ntp介绍和特点,NTP(NetworkTimeProtocol)是由美国德拉瓦大学的DavidL.Mills教授于1985年提出,除了可以估算封包在网络上的往返延迟外,还可独立地估算计算机时钟偏差,从而实现在网络上的高精准度计算机校时,它是设计用来在Internet上使不同的机器能维持相同时间的一种通信协议。
NTP是一个跨越广域网或局域网的复杂的同步时间协议,它通常可获得毫秒级的精度。
RFC2030Mills1996描述了SNTP(SimpleNetworkTimeProtocol),目的是为了那些不需要完整NTP实现复杂性的主机,它是NTP的一个子集。
特点:
1.从UTC获取标准时间2.NTP服务器分层提供服务3.过滤算法选择时间的最佳路径和来源4.识别机制抗干扰和恶意破坏,四.2NTP数据包格式,Ntp数据包格式的介绍在在RFC2030的第404行NTPpacket=NTPheader+FourTimeStamps=48bytes+header,16bytes233888共32bitsLIVNModeStratumPollPrecisionRootDelay(32bits)RootDispersion(32bits)ReferenceIdentifier(32bits)Timestamp1,8bytesReferenceTimestamp(64bits)Timestamp2,8bytesOriginateTimestamp(64bits)Timestamp3,8bytesReceiveTimestamp(64bits)Timestamp4,8bytesTransmitTimestamp(64bits)KeyIdentifier(optional)(32bits)Messagedigest(optional)(128bits),四.3NTP数据包各字段的说明,字段说明(请阅读RFC2030的453行)*LI:
LeapYearIndicator,跳跃指示器,警告在当月最后一天的最终时刻插入的迫近闺秒(闺秒)。
*VN:
VersionNumber,版本号。
*Mode:
模式,0预留;
1对称行为;
3客户机;
4服务器;
5广播;
6NTP控制信息*Stratum:
层级。
*Poll:
PollInterval,有符号整数表示连续信息间的最大间隔。
*Precision:
有符号整数表示本地时钟精确度。
*RootDelay:
有符号固定点序号表示主要参考源的总延迟,很短时间内的位15到16间的分段点。
*RootDispersion:
无符号固定点序号表示相对于主要参考源的正常差错。
*ReferenceIdentifier:
识别特殊参考源。
*ReferenceTimestamp*OriginateTimestamp:
这是向服务器请求分离客户机的时间,采用64位时标格式。
*ReceiveTimestamp:
这是向服务器请求到达客户机的时间,采用64位时标(Timestamp)格式。
*TransmitTimestamp:
这是向客户机答复分离服务器的时间,采用64位时标(Timestamp)格式。
*Authenticator(可选):
主要标识符和信息数字域就包括已定义的信息认证代码(MAC)信息。
四.4NTP较时客户端程序的操作,客户端:
1.初始化数据报头按如下初始化:
第一个字节和TransmitTimestamp(可以不)填上对应的内容.其它部分清02.向服务器发送请求3.等待服务器返回4.解析服务器返回的内容(在RFC2030的第631行)原文如下:
AunicastoranycastclientinitializestheNTPmessageheader,sendstherequesttotheserverandstripsthetimeofdayfromtheTransmitTimestampfieldofthereply.Forthispurpose,alloftheNTPheaderfieldsshownabovecanbesetto0,exceptthefirstoctetand(optional)TransmitTimestampfields.Inthefirstoctet,theLIfieldissetto0(nowarning)andtheModefieldissetto3(client).TheVNfieldmustagreewiththeversionnumberoftheNTP/SNTPserver;
四.5时间戳格式(timestampformat),时间戳格式(timestampformat)在RFC2030的第350行低32位是整数部分.高32位是小数部分NTP服务器上的时间戳为从1900年1月1日0时0分开始到至今的秒数(UTC时间)PC机上的时间戳为1970年1月1日0时0分到至今的秒数(程序中的time(NULL)返回的是UTC时间),四.5时间的计算(网络延时与时钟偏差的测量),TimestampNameIDWhenGeneratedOriginateTimestampT1timerequestsentbyclientReceiveTimestampT2timerequestreceivedatserverTransmitTimestampT3timereplysentbyserverDestinationTimestampT4timereplyreceivedatclientt为服务器和客户端之间的时间偏差;
d为两者之间的往返时间T2=T1+t+d/2;
T2-T1=t+d/2;
T4=T3-t+d