网络时钟同步资料_第1页
网络时钟同步资料_第2页
网络时钟同步资料_第3页
网络时钟同步资料_第4页
网络时钟同步资料_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021/2/111 网络时钟同步网络时钟同步 NTP协议原理及程序设 计 2015年3月2日 2021/2/112 课程安排 主要内容 网络授时原理(NTP) 网络授时服务器和客户端软件编写与测试 时间(16学时) 理论学习:4学时 课程实践:12学时 要求 掌握NTP协议和Winsock网络编程原理,了解网络通信基 本原理 能够使用VC+编写网络授时服务器和客户端软件 2021/2/113 主要内容 一、NTP协议 1.1 NTP简介 1.2 NTP工作原理 1.3 NTP报文格式 1.4 NTP工作模式 1.5 NTP协议算法 二、Windows系统NTP服务 三、NTP程序设计 3.1

2、 VC+ 3.2 WinSock网络编程 2021/2/114 网络时间协议(network time protocol,NTP)由美国德拉瓦大 学的David L Mills教授于1985年提出,是用于设计使Internet 上的计算机保持时间同步的一种通信协议。 应用需求 互联网起源于军事用途明显的ARPA网。在军事应用领域, 时间从来就是一个非常重要的考虑因素。对于互联网的 时间同步和NTP的研究,就是在美国国防部的资助下启动 和进行的。 在备份服务器和客户机之间进行增量备份时,要求这两个 系统之间的时钟必须同步。 一、NTP协议简介 2021/2/115 一、NTP协议简介 有的应用程

3、序需要知道一个用户是什么时候登录到系统 的,以及一个文件的修改时间。 在一个网络中,系统之间的时钟相差一分钟或者更少的情 况很多。如果网络很大,不可能完全依靠系统管理员手工 输入date(时间设置命令)来调节各个系统的时钟。 调试与事件时间戳(timestamps):从不同路由器采集的 调试与事件时间戳是没有什么意义的,除非这些路由器是 以同一公共时间为参考。 仿真:复杂的事务往往需细分,由多个系统来处理,为保证事 件的正确顺序,多个系统必须参考同一时钟。 2021/2/116 一、NTP协议简介 网络时间协议可以估算出数据包在Internet上的往返延迟, 并可以独立估算计算机时钟偏差,在大

4、多数情况下,NTP可 以提供l50 ms的可靠时间源。 在很多实际应用中,只需要秒级的精确度就足够。这种情 况下,简单网络时间协议(simple network time protocol,SNTP)就出现了,它通过简化原来的NTP访问协 议,在保证时间精确度的前提下,使得对网络时间的开发和 应用变得更加容易。 2021/2/117 一、NTP协议简介 定义和由来 NTP是由RFC1305 (Request For Comments,征求修正意见书) 定义的时间同步协议,属于应用层协议,用于在分布式时间服 务器和客户端之间进行时间同步,它定义了协议实现过程中 所使用的结构、算法、实体和协议。

5、NTP 是基于IP和UDP 报文传输的,端口号为123,也可以被其 它协议组使用。 NTP是从时间协议和ICMP(Internet Control Message Protocol,网络控制报文协议)时间戳报文演变而来,主要从 准确性和强壮性方面进行了特殊的设计。 2021/2/118 一、NTP协议简介 NTP协议的优点 采用分层的方法来定义时钟的准确度。 支持访问控制和MD5加密验证。 可以采用单播、组播或广播方式发送协议报文。 时钟层 时钟的层数决定了时钟的准确度,其取值范围为015。 参考时钟的层数取值范围为015,准确度从0到15依次递 减。层数为0的时钟处于子网特殊位置,是基准时间

6、参考源, 目前普遍采用GPS的UTC时间源。 2021/2/119 一、NTP协议简介 简单网络时间协议(SNTP) 由RFC1769文档定义。SNTP 能够与NTP 协议具有互操 作性,即SNTP 客户可以与NTP服务器协同工作,同样NTP 客户也可以接收SNTP 服务器发出的授时信息。 因为NTP 和SNTP 的数据包格式是一样的,计算客户时间、 时间偏差以及包往返时延的算法也是一样的。因此,NTP 和SNTP 实际上是无法分割的。 2021/2/1110 一、NTP协议工作原理 网络结构 互联网中运用NTP进行时间同步和分配所涉及的设备和 通路的集合称为时间同步子网络。 时间同步子网络以

7、分层主从结构模式运行。 2021/2/1111 2021/2/1112 一、NTP协议工作原理 NTP模型中,多个通过有线或无线系统与标准时钟同步的 主参考源被连接到网络内被广泛访问,如:骨干网关,这些主 参考源作为主时间服务器运行在网络中。 NTP的目的就是通过Internet将这些主时间服务器的计时 信息传送到其他时间服务器,并且反复核对时钟以减少由 于仪器或传播失误而产生的误差。 子网络中的设备可以扮演多重角色。例如一个第二层的 设备,对于第一层来说是客户机;对于第三层可能是服务器; 对于同层的设备则可以是对等机。这里对等机的含义是 相互用NTP进行同步的计算设备。 2021/2/111

8、3 一、NTP协议工作原理 NTP工作在时间同步子网络1级以下的其他各级设备中。 出于对精确度和可靠性的考虑,下层设备同时引用若干个 上层设备作为参考源;而且也可以引用同层设备作为参考 源。NTP能够从时间参考源中选择最好的几个时间源来 推断现行时间。 时间同步子网络和电信网络中的数字同步网一样,不允许 出 现 时 间 环 路 。 数 字 同 步 网 中 依 据 的 是 S S M (Synchronization Status Message,时间同步信息)信息, 而NTP则利用协议的优势,自动识别高精确度的时钟源,确 保时钟单方向地同步到高精确度的时钟,这样就绝对避免 了时间环路的出现。

9、2021/2/1114 一、NTP协议工作原理 同步原理 NTP主要通过交换时间服务器和客户端的时间戳,计算出 客户端相对于服务器的时延和偏差,从而实现服务器和客 户端之间时间的同步。 示例 假设路由器A和路由器B通过以太网端口相连,B做为NTP 服务器。同步之前A的时钟设定为10:00:00,B的时钟设定 为11:00:00。数据包在A和B之间单向传输所需要的时间 为1 秒。 2021/2/1115 2021/2/1116 一、NTP协议工作原理 client server T1 T2T3 T4 T1+t T3-t d/2d/2 时间序列图 双向时延:d =(T4-T1)-(T3-T2) A

10、相对B的时间差:offset =(T2-T1)+(T3-T4)/2 如果往返的传输时间相等,根据四个时刻可以求得时钟偏 差和传输时间 2021/2/1117 一、NTP协议报文格式 NTP和SNTP是用户数据报协议(UDP)的客户端,而UDP自 己是网际协议(IP)的客户端。UDP的端口是123,UDP头中 的源断口和目的断口都是一样的。NTP数据包消息直接 遵循UDP的消息头格式,其分组数据包由若干个数据字组 成,每个字长为32比特。 SNTP使用在RFC1305及其以前的版本所描述的标准 NTP时间戳的格式。与因特网标准一致,NTP数据被指定 为整数或定点小数,位以big-endian风格

11、从左边0位或者高 位计数。如不指定,全部数量都将设成unsigned的类型,并 且可能用一个在bit0前的隐含0填充全部字段宽度。 2021/2/1118 一、NTP协议报文格式 时间戳格式 NTP用时间戳表示为一64 bits unsigned 定点数,以秒的形式从 1900 年1月1 日的0:0:0算起。整数部分在前32bits里,后32bits (seconds Fraction)用以表示秒以下的部分。在Seconds Fraction 部分,无意义的低位应该设置为0。 这种格式把方便的多精度算法和变换用于UDP/TIME 的表示(单 位:秒),但使得转化为ICMP的时间戳消息表示法(单

12、位:毫秒)的过 程变得复杂了。 它代表的精度大约是200 picoseconds(皮秒/微微秒/万亿分之一 秒,nanosecond:纳秒/毫微秒/十亿分之一秒),这应该足以满足最 高的要求了。 2021/2/1119 一、NTP协议报文格式 时间戳格式 注意,从1968 年起,最高有效位(整数部分的0 bit位) 已经被确定,64位比特字 段在2036 年将溢出。 如果NTP或者SNTP在2036年还在使用的话,一些外 部方法将有必要用来调整与1900年及2036年有关的时间 (136年的其它倍 数也一样)。 用这样的限制使时间戳数据变得很讲究(要求合适的方法可容 易地被找到)。从今以后每1

13、36 年,就会有200picosecond 的间隔被忽略掉,64 个比特字段将全部置为0 ,按照惯列它将被解释为一个无效的或者不可获得 的时间戳。 2021/2/1120 Strat PollLIModeVN NTP v3 and v4 Root Delay Root Dispersion Reference Identifier Reference Timestamp (64) Originate Timestamp (64) Receive Timestamp (64) Transmit Timestamp (64) Message Hash (64 or 128) Seconds (32

14、)Fraction (32) NTP 时间戳 (64 bits) Authenticator字段可选,用来存放认证密钥或加密码 Key/Algorithm Identifier(32) Cryptosum Authenticator (Optional) Extension Field 1 (optional) Extension Field 2 (optional) NTP v4 only Prec Extension Field (填充至 32-bit) Field LengthField Type NTPv4 Extension Field 最后一个扩展域( field)填充至 64-b

15、it authentication only 0 2 5 8 16 24 32 LI:闰秒标示器 VN:版本号 Mode:工作模式 Stratum:时钟层 Poll:测试间隔 Prec:本地时钟精度 Root Delay:根时延 Root Dispersion:根时误差 Reference Identifier:参考时 钟标识 一、NTP协议报文格式 N T P 报 文 格 式 2021/2/1121 Strat PollLIModeVN Root Delay Root Dispersion Reference Identifier Reference Timestamp (64) Origi

16、nate Timestamp (64) Receive Timestamp (64) Transmit Timestamp (64) Authenticator(Optional) (96) Prec 0 2 5 8 16 24 32 S N T P 报 文 格 式 一、NTP协议报文格式 Strat PollLIModeVN 根延迟 根差量 参考标识符 参考时间戳 (64) 原始时间戳 (64) 接受时间戳 (64) 传送时间戳 (64) 认证符 (可选项) (96) Prec 0 2 5 8 16 24 32 SNTP的消息格式与RFC-1305中所描述的NTP格式是一 致的,不同的地方是

17、:一些SNTP的数据域已被封装,也就是 说已初始化为一些预定的值。 2021/2/1122 一、NTP协议报文格式 Strat PollLIModeVN 根延迟 根差量 参考标识符 参考时间戳 (64) 原始时间戳 (64) 接受时间戳 (64) 传送时间戳 (64) 认证符 (可选项) (96) Prec 0 2 5 8 16 24 32 1. LI(闰秒标识器):这是一个二位码, 预报当天最近的分钟里要被插入或删 除的闰秒秒数(7月1日7时第26次闰 秒)。用1/0表示,分别说明如下: LI Value 含义 - 00 0 无预告 01 1 最近一分钟有61秒 10 2 最近一分钟有59秒

18、 11 3 警告状态(时钟未同步) 2. VN(版本号):这是一个3bits的整 数,表示NTP的版本号,现在为3。 2021/2/1123 一、NTP协议报文格式 Strat PollLIModeVN 根延迟 根差量 参考标识符 参考时间戳 (64) 原始时间戳 (64) 接受时间戳 (64) 传送时间戳 (64) 认证符 (可选项) (96) Prec 0 2 5 8 16 24 32 3. Mode(模式):这是一个3bits的整数,表 示模式,定义如下: mode 含 义 - 0 保留 1 对称性激活 2 被动的对称性 3 客户端 4 服务器 5 广播 6 NTP控制性系保留 7 自用

19、保留 点对点模式下,客户端机在请求中设置 此字段为3,服务器在回答时设置为4;广播模 式下,服务器在回答时设置此字段为5。 2021/2/1124 一、NTP协议报文格式 Strat PollLIModeVN 根延迟 根差量 参考标识符 参考时间戳 (64) 原始时间戳 (64) 接受时间戳 (64) 传送时间戳 (64) 认证符 (可选项) (96) Prec 0 2 5 8 16 24 32 4. stratum(层):这是一个8bits的整 数(无符号),表示本地时钟的层次水 平,数值定义如下: stratum 含义 - 0 未指定或难以获得 1 主要参考(如无线电时钟钟) 2-15 第

20、二参考(通过NTP/SNTP) 16-255 保留 5Poll(测试间隔):八位signed integer,表示连续信息之间的最大间隔, 精确到秒的平方级。本字段的值从4 (16s)到14(16284s);然而,大多数 应用使用6(64s)到10(1024s)。 2021/2/1125 一、NTP协议报文格式 Strat PollLIModeVN 根延迟 根差量 参考标识符 参考时间戳 (64) 原始时间戳 (64) 接受时间戳 (64) 传送时间戳 (64) 认证符 (可选项) (96) Prec 0 2 5 8 16 24 32 6Prec(精度):八位signed integer,表

21、示本地时钟精度,精确到秒的平方级。值 从-6(主平)到-20(微秒级时钟)。 7. Root Delay(根时延):32位带符号 定点小数,表示在主参考源之间往返的总 共时延,以小数位后1516bits。数值根据 相关的时间与频率可正可负,从负的几毫 秒到正的几百毫秒。 8. Root Dispersion(根差量):32位带 符号定点小数,表示与主参考源有关的名 义(相对)误差,以小数位后1516bits。 范围:0几百毫秒。 2021/2/1126 一、NTP协议报文格式 Strat PollLIModeVN 根延迟 根差量 参考标识符 参考时间戳 (64) 原始时间戳 (64) 接受时间

22、戳 (64) 传送时间戳 (64) 认证符 (可选项) (96) Prec 0 2 5 8 16 24 32 9. Reference Identifier参考标识符:32bits,用 来标识特殊的参考源。在stratum 0(未指定) 或stratum 1(基本参考)的情况下,该字段以 四个八位字节、左对齐、零填充的string表示。 当没有NTP枚举时,使用下列ASCII标识符: 阶层 代码 含 义 - 1 pps 精度校准源,例如ATOM(原子钟),PPS代表 (每秒脉冲精度源),等等 1 service 除了一般的NTP报时服务外,例如ACTS(计算机 自动化报 时服务),TIME(U

23、DP/Time协议),TSP(Unix 报时服务 协议),DTSS (数字化时间同步服务),等等 1 radio 一般的收音机服务,带有callsigns,例如 CHU,DCF77, MSF, TDF, WWV, WWVB, WWVH,等等 1 nav 无线电导航系统,例如OMEG(欧米加导航系统), LORC(远距离无线电导航系统),等等 1 satellite 一般的卫星业务,例如GOES(地球同步轨道环境卫星), GPS(全球卫星定位服务),等等 2 address 二级参考(4个八位二进制字节表示的NTP服务器因特网地 址) 2021/2/1127 一、NTP协议报文格式 Strat

24、PollLIModeVN 根延迟 根差量 参考标识符 参考时间戳 (64) 原始时间戳 (64) 接受时间戳 (64) 传送时间戳 (64) 认证符 (可选项) (96) Prec 0 2 5 8 16 24 32 10.Reference Timestamp参考时间戳:本地 时钟被修改的最新时间,64bits 。 11.Originate Timestamp原始时间戳(T1): 客户端发送的时间,64bits。 12. Receive Timestamp接受时间戳(T2): 服务端接受到的时间,64bits。 13.Transmit Timestamp传送时间戳(T3): 服务端送出应答的时

25、间,64bits。 14.认证符(可选项):当NTP的认证机制 已运行后,这个字段包含认证者的信息。在 SNTP中本字段一般被来报输入消息所忽略, 也不用在输出消息中。 2021/2/1128 一、NTP协议工作模式 根据NTP协议可知,NTP数据报文中携带了发送该报文的 时钟服务器的工作模式,它的取值范围为: 2021/2/1129 一、NTP协议工作模式 根据网络结构和时钟服务器在以太网中的位置,以及实现 时钟同步所必须的模式组合,主要有以下几种常用的工作 模式: 1. 服务器/客户端模式(server/client) 2. 对等体模式(symmetric active / symmetr

26、ic passive) 3. 广播模式(broadcast server / broadcast client) 4. 组播模式(multicast server / muticast client) 2021/2/1130 一、NTP协议工作模式 1. 服务器/客户端模式(server/client) 时钟过滤时钟过滤:从给定的对等体选择最好的时间样本。 时间选择时间选择:针对不同的对等体,分别向它们发送时间同步报文,在接收到应 答报文后利用时钟选择算法选择出最好的时钟进行同步。 2021/2/1131 一、NTP协议工作模式 2. 对等体模式(symmetric active / symm

27、etric passive) 2021/2/1132 一、NTP协议工作模式 3. 广播模式(broadcast server / broadcast client) 2021/2/1133 一、NTP协议工作模式 4. 组播模式(multicast server / muticast client) 2021/2/1134 一、NTP协议协议算法 NTP协议涉及4个算法: 时间滤波算法; 时间选择算法; 聚类算法; 时钟调节算法。 严格地说,这些算法并不是协议的固有部分,但是NTP的实 现却有赖于这些算法。 2021/2/1135 一、NTP协议协议算法 时间滤波算法 该算法的功能是确认数据

28、包的有效性和从某个给定的时间参考源 的时间样本中选取最佳的样本。它可以分成健全性校验和滤波两 个部分。 健全性校验:数据包的唯一性,数据包内容的符合性,服务器工作是 否正常,往返延迟和离差数值是否合理,如果协议配置了安全性要求, 则还将进行鉴权。 滤波。它备有一个时间参数寄存器数组,其深度N根据系统配置设 置。当前的时间参数根据NTP消息交换时的发送启始时间、对端 接收时间、对端回送时间和收到回送时间等四个时间戳信息计算 得出,以(,)形式表示。这里是样本时钟偏移,和是相关的 往返延迟和离差。 2021/2/1136 一、NTP协议协议算法 时间选择算法 NTP客户机可以有若干时间同步参考源。

29、时间选择算法则用于在 若干时间参考源中选取最佳的若干参考源。 NTP首先使用滤波算法的结果滤波离差 和同步距离 确定对于各个 时间源的有效的时间域值,也称之为交越值。然后对所有的时间逐 一进行校验,如落入交越值规定的范围内时,认为有效,否则将被予 以剔除。 2021/2/1137 一、NTP协议协议算法 聚类算法 NTP内部有一张时间参考源的表格,记录可供访问的所有时间参考 源。这些参考源中最为优秀的方能作为候选者进入参考源的优选 目录。 从可靠性和效率的折中考虑,通常在参考源中选取10个最佳的时钟 进入优选目录。 聚类算法根据前面滤波和选择两个算法的结果,对优选目录中的时 间参考源重新选择。

30、衡量标准说到底是精确度,具体表现则为NTP 的级、离差、延时、偏移和偏移的一次导数等的加权组合。 通过聚类算法,可以减少网络时间漂移产生的不良影响。 2021/2/1138 一、NTP协议协议算法 时钟调节算法 时钟调节是NTP实现至关重要的一个环节。时间精确度强烈依赖于时钟振 荡器的稳定度和时钟调节的精密度。 在NTP中,网络响应能力的变化产生的误差为抖动;振荡器频率稳定度产生 的误差为漂移。 目前使用自适应混合时钟调整算法。该调整算法校准计算机时钟的时间, 补偿固有频率误差,根据测得的抖动和漂移动态地调节相关参数。算法使 用了锁相环路PLL和锁频环路FLL两者的合成。 PLL消除抖动非常有

31、效,而只能间接地降低漂移,而FLL正好相反。因此,在 抖动主导的环境,使用PLL效果明显;在漂移占主导地位的环境中,FLL效果 明显。 2021/2/1139 一、NTP协议应用建议 尽量在本地局域网部署SNTP服务器,Internet上公用的 SNTP服务器时延具有不确定性,会对授时精度产生影响。 客户端授时请求要大于1min,以免SNTP服务器负担过重, 无法及时响应。 当客户机数目大于500台时,应配置多台SNTP服务器,以达 到要求的授时精度。SNTP最多每秒种能同时响应500个 请求,超过这一数目,授时精确度就得不到保证。 高可靠性系统中,最好配置多台SNTP服务器,利用DNS实 现

32、负载均衡。 客户端应能够识别服务器故障,一旦发现故障,应丢弃时间 戳,转向其他服务器请求授时。 2021/2/1140 主要内容 一、NTP协议 1.1 NTP简介 1.2 NTP工作原理 1.3 NTP报文格式 1.4 NTP工作模式 1.5 NTP协议算法 二、Windows系统NTP服务 三、NTP程序设计 3.1 VC+ 3.2 WinSock 2021/2/1141 二、Windows系统NTP服务 1. 服务器端配置 (1) 打开注册表 单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。 (2) 修改NTP服务功能选项的键值 HKEY_LOCAL_MACHINES

33、YSTEMCurrentControlSetServices W32TimeTimeProviders NtpServer内的Enabled设定为1,打开NTP服务器功能。 2021/2/1142 二、Windows系统NTP服务 (3) 修改时间源宣布键值 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices W32TimeConfig AnnounceFlags设定为5,该设定强制主机将它自身宣布为可靠的时 间源,从而使用内置的互补金属氧化物半导体(CMOS) 时钟。 (4) 在dos命令行执行以下命令,确保以上修改起作用 net stop w

34、32time net start w32time 2021/2/1143 二、Windows系统NTP服务 注意注意:如果该服务器和internet连接,那么,为了避免服务器 和internet上的ntp同步,最好追加以下配置: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices W32TimeTimeProviders NtpClient的enable设定为0 以防止作为客户端自动同步外界 的时间服务 2021/2/1144 二、Windows系统NTP服务 2. 客户端配置 (1) 打开注册表 (2) 修改NTP服务功能选项的键值 HKEY_

35、LOCAL_MACHINESYSTEMCurrentControlSetServices W32TimeTimeProviders NtpClient内的Enabled设定为1,打开NTP客户端功能 (3) 指定主时间服务器 在DOS方式输入“net time /setsntp:”,这里我们指 定 n t p . s j t u . e d u . c n 是 主 时 间 服 务 器 , 也 可 以 是 I P 地 址 (4)。 2021/2/1145 二、Windows系统NTP服务 2. 客户端配置 系统界面设置如右图。 (2) 自由设定XP时间 同步间隔 HKEY

36、_LOCAL_MACHI NESYSTEMCurrentC ontrolSetServicesW32 TimeTimeProviders N t p C l i e n t 的 SpecialPollInterval默 认设定为604800(或 86400) 2021/2/1146 二、Windows系统NTP服务 3. 配置防火墙允许NTP访问 (1) 关闭防火墙 (2) 在防火墙上添加允许 名称 端口 协议 方向 SNTP时间基准 123 UDP 入 4. 相关注册表说明 (1) 注册表项 MaxPosPhaseCorrection 路径 HKEY_LOCAL_MACHINESYSTEMC

37、urrentControlSet ServicesW32TimeConfig 该项指定服务可进行的最大正时间校准量(以秒为单位)。 2021/2/1147 二、Windows系统NTP服务 (2) 注册表项 MaxNegPhaseCorrection 路径 HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ServicesW32TimeConfig 该项指定服务可进行的最大负时间校准量(以秒为单位)。 (3) 注册表项 MaxPollInterval 路径 HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ServicesW3

38、2TimeConfig 该项指定系统轮询间隔所允许的最大间隔(单位是对数表示的秒)。 (4) 注册表项 MaxAllowedPhaseOffset 路径 HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ServicesW32TimeConfig 该项指定 W32Time 尝试使用时钟速率调整计算机时钟的最大偏 移量(以秒为单位)。 2021/2/1148 主要内容 一、NTP协议 1.1 NTP简介 1.2 NTP工作原理 1.3 NTP报文格式 1.4 NTP工作模式 1.5 NTP协议算法 二、Windows系统NTP服务 三、NTP程序设计 3.1 V

39、C+ 3.2 WinSock网络编程 2021/2/1149 三、NTP程序设计 3.1 VC+编程基础 编程环境 操作系统:Windows XP/7 编程平台:Visual Studio (VC+) 辅助工具:MSDN帮助 VC+ 与Win32紧密相连,利用VC+可完成各种各样应用程序的开发,包 括底层软件直到上层直接面向用户的软件,同时,还具有强大的调试 功能。 2021/2/1150 三、NTP程序设计VC+编程基础 头文件:用于调用系统API函数或用户自定义的函数等; 定义:#include 例:#include #include “selfDefined.h” 变量(variable

40、):一个包含部分已知或未知数值的储存地址。 定义: ; 例:double speed; char *receive_data; 2021/2/1151 三、NTP程序设计VC+编程基础 结构体(struct):由一系列具有相同类型或不同类型的数据 构成的数据集合,也叫结构。 定义: typedef struct ; ; ; 结构体变量: 结构体成员访问: . 或 - 2021/2/1152 三、NTP程序设计VC+编程基础 函数:具有一定功能的程序段:库函数(标准函数)和用户自 定义函数。一个C+程序由若干函数构成,但有且仅有一 个main函数,其他函数由main函数直接或间接调用。 定义:

41、() ; return ; : , , , 2021/2/1153 三、NTP程序设计VC+编程基础 类(class):将不同类型的数据和与这些数据相关的操作封 装在一起的集合体。 定义: Class public: ; () private: ; () ; 2021/2/1154 三、NTP程序设计WinSock网络编程 3.2 WinSock网络编程 网络编程是指:应用程序需要与网络中其它系统上的应用 程序之间进行通信。 计算机网络是相互连接的独立自主的计算机的集合,最简 单的网络形式由两台计算机组成。 AB 网络 1 0 协议协议 端口号

42、端口号 2021/2/1155 三、NTP程序设计WinSock网络编程 IP地址是一个逻辑地址,在因特网上具有全球唯一性。 协议为网络数据交换(通信)中建立的规则、标准或约 定。(=语义+语法+规则) 。不同层具有各自不同的协议。 网络体系结构就是将用不同媒介连接起来的不同设备和 网络系统在不同的应用环境下实现互操作性,把复杂的网 络互联问题划分为若干个较小的、单一的问题,在不同层 上予以解决。 2021/2/1156 三、NTP程序设计WinSock网络编程 OSI(Open System Interconnection)参考模型 将网络的不同功能划分为7层。 应用层应用层 表示层表示层

43、物理层物理层 会话层会话层 传输层传输层 网络层网络层 数据链路层数据链路层 处理网络应用处理网络应用 数据表示数据表示 主机间通信主机间通信 端到端的连接端到端的连接 寻址和最短路径寻址和最短路径 介质访问介质访问( (接入接入) ) 二进制传输二进制传输 n 通信实体的对等层之 间不允许直接通信; n 各层之间是严格单向 依赖; n 上层使用下层提供的 服务 Service user; n 下层向上层提供服 务 Service provider。 2021/2/1157 三、NTP程序设计WinSock网络编程 一台计算机要发送数据到另一台计算机,数据首先必须打 包,打包的过程称为封装。封

44、装就是在数据前面加上特定 的协议头部。 应用层 表示层 数据链路层 会话层 传输层 网络层 物理层 NTP 数据包IP报头UDP报头 NTP 数据包IP报头UDP报头MAC报头 NTP 数据包 封装 封装 NTP 数据包UDP报头 封装 2021/2/1158 NTP/SNTP授时精度影响因素(=1ms) 网络 路径时间 应用层 表示层 数据链路层 会话层 传输层 网络层 物理层 应用层 表示层 数据链路层 会话层 传输层 网络层 物理层 写入/读取 时间戳 报文 编码 报文 解码 不确定 不确定 不确定 三个环节都具有不确定性,d1与d2不相等,存在偏差 在高层(应用层)打时间戳,传输时间包

45、含三个环节 三、NTP程序设计WinSock网络编程 2021/2/1159 三、NTP程序设计WinSock网络编程 TCP/IP模型 起源于美国国防部高级研究规划署(DARPA)的一项研究计 划实现若干台主机的相互通信。 现在TCP/IP已成为Internet上通信的工业标准。 TCP/IP模型包括4个层次: 应用层 传输层 网络层 网络接口 2021/2/1160 三、NTP程序设计WinSock网络编程 TCP/IP与OSI参考模型的对应关系 应用层 表示层 会话层 传输层 物理层 数据链路层 网络层 7 6 5 4 3 2 1 OSI参考模型 应用层 传输层 网络接口 网络层 TCP

46、/IP模型 2021/2/1161 三、NTP程序设计WinSock网络编程 按照OSI七层模型的描述,传输层提供进程(应用程序) 通信的能力。为了标识通信实体中进行通信的进程(应 用程序),TCP/IP协议提出了协议端口(protocol port,简 称端口)的概念。 端口是一种抽象的软件结构(包括一些数据结构和I/O缓 冲区)。应用程序通过系统调用与某端口建立连接( binding)后,传输层与相应进程之间通过该端口进行数据 发送和接收。 端口用一个整数型标识符来表示,即端口号。端口使用一 个16位的数字来表示,范围是065535,1024以下的端口号 保留给预定义的服务。例如:http

47、使用80端口、windows time使用123端口。 2021/2/1162 三、NTP程序设计WinSock网络编程 WinSock Windows Sock(Windows套接字,简称WinSock)是微软 根据UNIX操作系统中流行的Berkeley(伯克利)套接字规 范,而实现的一套Microsoft Windows下的网络编程接口。 在ISO的OSI网络七层协议中,WinSock主要负责控制数据 的输入和输出,也就是传输层和网络层。 它屏蔽了数据链路层和物理层,给Windows下的网络编程 带来了巨大的变化。 2021/2/1163 三、NTP程序设计WinSock网络编程 Win

48、dows Sockets通信机制 Windows Sockets通信的基础是套接字(Socket)。 Socket就是在应用程序之间用于读(接收信息)或写( 发送信息)的一个网络对象。 客户机服务器模式 在TCP/IP网络应用中,通信的两个进程间相互作用的主要 模式是客户机/服务器模式(client/server),即客户向服务器 提出请求,服务器接收到请求后,提供相应的服务。 2021/2/1164 三、NTP程序设计WinSock网络编程 客户机/服务器模式在操作过程中采取主动请求的方式。 服务器方服务器方 首先服务器方服务器方要先启动,并根据请求提供相应的服务: 打开一个通信通道并告知本

49、地主机,它愿意在某一地址和端口 上接收客户请求。 等待客户请求到达该端口。 接收到服务请求,处理该请求并发送应答信号,同时要激活一个 新的进程(或线程)来处理这个客户请求。新进程(或线程) 处理此客户 请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客 户的通信链路,并终止。 返回第二步,等待另一客户请求。 关闭服务器。 2021/2/1165 三、NTP程序设计WinSock网络编程 客户机/服务器模式在操作过程中采取主动请求的方式。 客户方客户方: : 打开一个通信通道,并连接到服务器所在主机的特定端口。 向服务器发服务请求报文,等待并接收应答;继续提出请求。 请求结束后关闭通

50、信通道并终止。 2021/2/1166 三、NTP程序设计WinSock网络编程 面向连接(虚电路)或无连接 面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传 输都要经过建立连接,使用连接,终止连接的过程。在数据传输过程 中,各数据分组不携带目的地址,而使用连接号(connect ID)。本 质上,连接是一个管道,收发数据不但顺序一致,而且内容相同。 TCP 协议提供面向连接的虚电路。 无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地 址,各分组在系统中独立传送。无连接服务不能保证分组的先后顺 序,不进行分组出错的恢复与重传,不保证传输的可靠性。UDP 协 议提供无连接的数

51、据报服务。 2021/2/1167 基于TCP(面向连接)的socket编程 服务器端程序服务器端程序: 1、创建套接字(socket)。 2、将套接字绑定到一个本地地址和 端口上(bind)。 3、将套接字设为监听模式,准备接 收客户请求(listen)。 4、等待客户请求到来;当请求到来 后,接受连接请求,返回一个新的对应 于此次连接的套接字(accept)。 5、用返回的套接字和客户端进行通 信(send/recv)。 6、返回第4步,等待另一客户请求。 7、关闭套接字。 客户端程序客户端程序: 1、创建套接字(socket)。 2、向服务器发出连接请求 (connect)。 3、和服务

52、器端进行通信 (send/recv)。 4、关闭套接字。 2021/2/1168 基于UDP(无连接)的socket编程 服务器端程序服务器端程序: 1、创建套接字(socket)。 2、将套接字绑定到一个本地地址和 端口上(bind)。 3、通过套接字和客户端进行通信 (recvfrom/sendto)。 4、关闭套接字。 客户端程序客户端程序: 1、创建套接字(socket)。 2、向服务器发出连接请求 (connect)。 3、和服务器端进行通信 (sendto/recvfrom)。 4、关闭套接字。 2021/2/1169 三、NTP程序设计WinSock网络编程 基本套接字系统调用

53、创建套接字socket() SOCKET PASCAL FAR socket(int af, int type, int protocol); 该调用要接收三个参数:af、type、protocol。参数af指定通信发 生的区域,UNIX 系统支持的地址族有:AF_UNIX、AF_INET、AF_NS等 ,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址 族与协议族相同。参数type描述要建立的套接字的类型。参数protocol 说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议, 则置为0,使用默认的连接模式。 2021/2/1170 三、NTP程序设计

54、WinSock网络编程 指定本地地址bind() int PASCAL FAR bind(SOCKET s, const struct sockaddr FAR * name, int namelen); 参数s是由socket()调用返回的并且未作连接的套接字描述符(套 接字号)。参数name是赋给套接字s的本地地址(名字),其长度可变,结 构随通信域的不同而不同。namelen表明了name的长度。如果没有错误 发生,bind()返回0。否则返回值SOCKET_ERROR。 TCP/IP 协议的地址结构为: struct sockaddr_in short sin_family; /*AF

55、_INET*/ u_short sin_port; /*16 位端口号,网络字节顺序*/ struct in_addr sin_addr; /*32 位IP 地址,网络字节顺序*/ char sin_zero8; /*保留*/ 2021/2/1171 三、NTP程序设计WinSock网络编程 建立套接字连接connect()与accept() 这两个系统调用用于完成一个完整相关的建立,其中connect()用于建 立连接。无连接的套接字进程也可以调用connect(),但这时在进程之 间没有实际的报文交换,调用将从本地操作系统直接返回。这样做的 优点是程序员不必为每一数据指定目的地址,而且如果收到的一个数 据报,其目的端口未与任何套接字建立“连接”,便能判断该端口不可 操作。而accept(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论