Windows 时间服务的工作原理
本部分内容
注意
本主题仅介绍 Windows 时间服务 (W32Time) 的工作方式。 有关如何配置 Windows 时间服务的信息,请参阅配置系统以获得高精度。
注意
在 Windows Server 2003 和 Microsoft Windows 2000 Server 中,目录服务被命名为 Active Directory 目录服务。 在 Windows Server 2008 和更高版本中,目录服务被命名为 Active Directory 域服务 (AD DS)。 本主题的其余部分引用了 AD DS,但该信息还适用于 Active Directory。
虽然 Windows 时间服务并不完全是网络时间协议 (NTP) 的实现,但它使用 NTP 规范中定义的一套复杂算法来确保整个网络中的计算机上的时钟尽可能精确。 理想情况下,AD DS 域中的所有计算机时钟都将与权威计算机的时间同步。 许多因素可能会影响网络上的时间同步。 以下因素通常会影响 AD DS 中同步的精度:
网络状况
计算机硬件时钟的精度
可用于 Windows 时间服务的 CPU 数量和网络资源量
重要
在 Windows Server 2016 之前,W32Time 服务并不是为了满足时间敏感型应用程序的需要。 但是,通过 Windows Server 2016 的更新,现在可以在域中实施可达到 1 毫秒准确性的解决方案。 有关详细信息,请查看 Windows 2016 精确时间和用于针对高精度环境配置 Windows 时间服务的支持边界。
默认配置不经常同步时间或未加入域的计算机与 time.windows.com 同步。 因此,在网络连接断断续续或无网络连接的计算机上,无法保证时间精度。
AD DS 林具有预先确定的时间同步层次结构。 Windows 时间服务将层次结构内的计算机的时间与最精确的参考时钟同步。 如果在一台计算机上配置了多个时间源,则 Windows 时间会根据计算机与该时间源的同步能力,使用 NTP 算法从配置的源中选择最佳的时间源。 Windows 时间服务不支持来自广播或多播对等方的网络同步。 有关这些 NTP 功能的详细信息,请参阅 IETF RFC Database 中的 RFC 1305。
运行 Windows 时间服务的每台计算机都使用该服务来保持最精确的时间。 默认情况下,作为域成员的计算机会充当时间客户端,因此在大多数情况下,不需要配置 Windows 时间服务。 但 Windows 时间服务可配置为从指定的参考时间源请求时间,还可为客户端提供时间。
计算机时间的精确程度称为“层次”。 网络上最精确的时间源(如硬件时钟)占据最低层次等级或一级层次。 这个精确的时间源称为“参考时钟”。 直接从参考时钟获取时间的 NTP 服务器占据的层次比参考时钟高一级。 从 NTP 服务器获取时间的资源与参考时钟隔了两个步骤,因此占据的层次比最精确的时间源高两级,依此类推。 随着计算机的层次数目的增加,其系统时钟的时间可能会变得不太精确。 因此,任何计算机的层次级别都表明了计算机与最精确时间源的同步程度。
W32Time 管理器收到时间样本时,它将使用 NTP 中的特殊算法来确定哪些时间样本最适合使用。 该时间服务还会使用另一组算法来确定哪些配置的时间源最精确。 当时间服务根据以上标准确定了哪个时间样本最佳后,它会调整本地时钟频率,使其朝正确时间收敛。 如果通过调整本地时钟频率,本地时钟和所选的精确时间样本之间的时间差(也称为“时间偏差”)太大而无法更正,则时间服务会将本地时钟设置为正确时间。 这种调整时钟频率或直接更改时钟时间称为“时钟约束”。
Windows 时间服务体系结构
Microsoft 时间服务由以下组件构成:
服务控制管理器
Windows 时间服务管理器
时钟约束
时间提供程序
下图显示了 Windows 时间服务的体系结构。
Windows 时间服务体系结构
服务控制管理器负责启动和停止 Windows 时间服务。 Windows 时间服务管理器负责启动操作系统随附的 NTP 时间提供程序的操作。 Windows 时间服务管理器控制 Windows 时间服务的所有功能和所有时间样本的合并。 除了提供当前系统状态的信息(例如当前时间源或上次更新系统时钟的时间),Windows 时间服务管理器还负责在事件日志中创建事件。
时间同步过程包括以下步骤:
输入提供程序从配置的 NTP 时间源请求和接收时间样本。
然后,将这些时间样本传递到 Windows 时间服务管理器,后者会收集所有样本并将其传递给时钟约束子组件。
时钟约束子组件应用 NTP 算法,从而选择最佳的时间样本。
通过调整时钟频率或直接更改时间,时钟约束子组件可以将系统时钟的时间调整为最精确的时间。
如果计算机已被指定为时间服务器,则它可以在此过程中的任何时间点将时间发送到任何请求时间同步的计算机。
Windows 时间服务时间协议
时间协议确定两台计算机时钟同步的相近程度。 时间协议负责确定最佳可用时间信息并收敛时钟,以确保在不同的系统上保持一致的时间。
Windows 时间服务使用网络时间协议 (NTP) 来帮助通过网络同步时间。 NTP 是一种 Internet 时间协议,其中包括同步时钟所需的约束算法。 NTP 是比某些 Windows 版本中使用的简单网络时间协议 (SNTP) 更准确的时间协议;但是,W32Time 继续支持 SNTP,以便能够与运行基于 SNTP 的时间服务(例如 Windows 2000)的计算机后向兼容。
网络时间协议
网络时间协议 (NTP) 是 Windows 时间服务在操作系统中使用的默认时间同步协议。 NTP 是一种容错、高度可缩放的时间协议,常用于通过指定的时间参考来同步计算机时钟。
NTP 时间同步发生在一段时间内,涉及通过网络传输 NTP 数据包。 NTP 数据包中的时间戳包括参与时间同步的客户端和服务器中的时间样本。
NTP 依赖参考时钟定义要使用的最精确时间,并将网络上的所有时钟与该参考时钟同步。 NTP 使用协调世界时 (UTC) 作为当前时间的通用标准。 UTC 不受时区影响,支持在世界各地使用 NTP,无需考虑时区设置。
NTP 算法
NTP 包括两种算法(时钟筛选算法和时钟选择算法),以帮助 Windows 时间服务确定最佳时间样本。 时钟筛选算法用于筛选从查询时间源接收的时间样本,并从每个源确定最佳时间样本。 然后,时钟选择算法会确定网络上最精确的时间服务器。 随后将此信息传递给时钟约束算法,该算法使用收集的信息更正计算机的本地时钟,同时弥补因网络延迟和计算机时钟不准导致的错误。
在轻度到中度的网络和服务器负载情况下,NTP 算法最为精确。 与考虑网络传输时间的任何算法一样,NTP 算法在极端网络拥塞的情况下可能会表现不佳。 有关 NTP 算法的详细信息,请参阅 IETF RFC Database 中的 RFC 1305。
NTP 时间提供程序
Windows 时间服务是一个完整的时间同步包,它可以支持各种硬件设备和时间协议。 若要启用此支持,该服务将使用可插入时间提供程序。 时间提供程序负责(从网络或硬件)获取精确的时间戳,或通过网络将这些时间戳提供给其他计算机。
NTP 提供程序是操作系统随附的标准时间提供程序。 NTP 提供程序采用 NTP 版本 3 为客户端和服务器指定的标准,可与 SNTP 客户端和服务器交互,以便与 Windows 2000 和其他 SNTP 客户端后向兼容。 Windows 时间服务中的 NTP 提供程序由以下两个部分组成:
NtpServer 输出提供程序。 这是对网络上的客户端时间请求作出响应的时间服务器。
NtpClient 输入提供程序。 这是一个时间客户端,它从另一个源(硬件设备或 NTP 服务器)获取时间信息,并且可以返回对同步本地时钟非常有用的时间样本。
虽然这两个提供程序的实际操作密切相关,但它们似乎与时间服务无关。 从 Windows 2000 Server 开始,当 Windows 计算机连接到网络时,它将被配置为 NTP 客户端。 此外,运行 Windows 时间服务的计算机仅默认尝试与域控制器或手动指定的时间源同步时间。 以上是首选的时间提供程序,因为它们会自动成为可用且安全的时间源。
NTP 安全性
在 AD DS 林中,Windows 时间服务依赖于标准域安全功能来强制对时间数据进行身份验证。 充当时间服务器的域成员计算机和本地域控制器之间发送的 NTP 数据包的安全性基于共享密钥身份验证。 Windows 时间服务使用计算机的 Kerberos 会话密钥在通过网络发送的 NTP 数据包上创建经过验证的签名。 NTP 数据包不在 Net Logon 安全通道内传输。 相反,计算机请求域层次结构中的域控制器的时间时,Windows 时间服务要求对时间进行身份验证。 然后,域控制器以 64 位值的形式返回所需的信息,该值已使用 Net Logon 服务中的会话密钥进行身份验证。 如果返回的 NTP 数据包未用计算机的会话密钥进行签名,或者未正确签名,则会拒绝该时间。 所有此类身份验证失败都记录在事件日志中。 通过这种方式,Windows 时间服务为 AD DS 林中的 NTP 数据提供安全性。
通常,Windows 时间客户端会自动从同一个域中的域控制器获得同步的精确时间。 在林中,子域的域控制器与父域中的域控制器同步时间。 当时间服务器将经过身份验证的 NTP 数据包返回到请求时间的客户端时,会通过域间信任帐户定义的 Kerberos 会话密钥对数据包进行签名。 域间信任帐户是在新的 AD DS 域加入林时创建的,而 Net Logon 服务管理会话密钥。 通过这种方式,在目录林根级域中配置为可靠的域控制器将成为父域和子域中所有域控制器的经过身份验证的时间源,并间接用于域树中的所有计算机。
Windows 时间服务可以配置为在林之间工作,但请务必注意,此配置不安全。 例如,NTP 服务器可以在其他林中使用。 但是,因为该计算机在其他的林中,所以没有用于对 NTP 数据包进行签名和身份验证的 Kerberos 会话密钥。 若要从其他林中的计算机获取精确的时间同步,客户端需要对该计算机的网络访问权限,并且必须将时间服务配置为使用其他林中的特定时间源。 如果手动将客户端配置为从其自身的域层次结构之外的 NTP 服务器访问时间,则不会对客户端和时间服务器之间发送的 NTP 数据包进行身份验证,因此不安全。 即使实施了林信任,Windows 时间服务在林之间也不会安全。 虽然 Net Logon 安全通道是适用于 Windows 时间服务的身份验证机制,但不支持跨林进行身份验证。
Windows 时间服务支持的硬件设备
基于硬件的时钟(如 GPS 或无线电时钟)通常用作高度精度的参考时钟设备。 默认情况下,Windows 时间服务 NTP 时间提供程序不支持将硬件设备直接连接到计算机,尽管可以创建支持此类连接的基于软件的独立时间提供程序。 这种类型的提供程序与 Windows 时间服务相结合,可提供可靠的稳定时间参考。
像铯原子钟或全球定位系统 (GPS) 接收器之类的硬件设备通过遵循获取精确时间定义的标准来提供精确的当前时间。 铯原子钟极其稳定,不受温度、压力和湿度等因素的影响,但也很昂贵。 GPS 接收器的操作开销更低,并且也是精确的参考时钟。 GPS 接收器从卫星获取时间,而卫星则从铯原子钟获取时间。 在不使用独立时间提供程序的情况下,Windows 时间服务器可以通过连接到外部 NTP 服务器来获取时间,该该服务器通过电话或 Internet 连接到硬件设备。 像美国海军天文台之类的组织提供连接到极其可靠的参考时钟的 NTP 服务器。
许多 GPS 接收器和其他时间设备可以在网络上充当 NTP 服务器。 你可以将 AD DS 林配置为仅当这些外部硬件设备也充当网络上的 NTP 服务器时,才根据这些外部硬件设备同步时间。 为此,请将充当林根中主域控制器 (PDC) 仿真器的域控制器配置为与 GPS 设备提供的 NTP 服务器同步。 为此,请参阅在目录林根级域中的 PDC 仿真器上配置 Windows 时间服务。
简单网络时间协议
简单的网络时间协议 (SNTP) 是一种简化的时间协议,适用于不需要 NTP 提供的精度的服务器和客户端。 SNTP 是更基本的 NTP 版本,并且是 Windows 2000 中使用的主要时间协议。 由于 SNTP 和 NTP 的网络数据包格式相同,这两种协议可彼此协作。 这两者之间的主要区别在于 SNTP 不具有 NTP 提供的错误管理和复杂筛选系统。 有关简单网络时间协议的详细信息,请参阅 IETF RFC Database 中的 RFC 1769。
时间协议互操作性
Windows 时间服务可在运行 Windows 2000、Windows XP 和 Windows Server 2003 的计算机的混合环境中运行,因为在 Windows 2000 中使用的 SNTP 协议可与 Windows XP 和 Windows Server 2003 中的 NTP 协议彼此协作。
Windows NT Server 4.0 中名为 TimeServ 的时间服务通过 Windows NT 4.0 网络同步时间。 TimeServ 是作为“Microsoft Windows NT 4.0 资源工具包”的一部分提供的附加功能,不提供 Windows Server 2003 所需的时间同步的可靠度。
Windows 时间服务可与运行 Windows NT 4.0 的计算机彼此协作,因为它们可以与运行 Windows 2000 或 Windows Server 2003 的计算机同步时间;但是,运行 Windows 2000 或 Windows Server 2003 的计算机不会自动发现 Windows NT 4.0 时间服务器。 例如,如果你的域配置为使用基于域层次结构的同步方法来同步时间,并且你希望域层次结构中的计算机与 Windows NT 4.0 域控制器同步时间,则必须手动将这些计算机配置为与 Windows NT 4.0 域控制器同步。
Windows NT 4.0 使用的时间同步机制比 Windows 时间服务使用的更简单。 因此,为了确保通过你的网络精确地同步时间,建议将任何 Windows NT 4.0 域控制器升级为 Windows 2000 或 Windows Server 2003。
Windows 时间服务进程和交互
Windows 时间服务用于在网络上同步计算机的时钟。 网络时间同步过程也称为时间收敛,每台计算机从更精确的时间服务器访问时间时,网络中就会发生此过程。 时间收敛涉及一个过程,通过此过程权威服务器将当前时间以 NTP 数据包的形式提供给客户端计算机。 数据包中提供的信息指示是否需要对计算机的当前时钟时间进行调整,以便将其与更精确的服务器同步。
在时间收敛过程中,域成员将尝试与同一域中的任何域控制器同步时间。 如果计算机是域控制器,则它将尝试与更权威的域控制器进行同步。
如果计算机运行 Windows XP Home Edition 或未加入域的计算机,则不会尝试与域层次结构同步,但会默认配置为从 time.windows.com 中获取时间。
若要将运行 Windows Server 2003 的计算机确立为权威计算机,则必须将该计算机配置为可靠时间源。 默认情况下,安装在 Windows Server 2003 域上的第一个域控制器将自动配置为可靠时间源。 由于它是域的权威计算机,因此必须配置为与外部时间源同步,而不是与域层次结构同步。 此外,在默认情况下,所有其他 Windows Server 2003 域成员都配置为与域层次结构同步。
建立 Windows Server 2003 网络后,你可以将 Windows 时间服务配置为使用以下其中一个同步选项:
基于域层次结构的同步
手动指定的同步源
所有可用的同步机制
不同步。
以下部分介绍了每种同步类型。
基于域层次结构的同步
基于域层次结构的同步使用 AD DS 域层次结构来查找同步时间所用的可靠来源。 根据域层次结构,Windows 时间服务确定每个时间服务器的精确度。 在 Windows Server 2003 林中,具有主域控制器 (PDC) 仿真器操作主机角色的计算机(位于目录林根级域中)保留最佳时间源的位置,除非已配置其他可靠时间源。 下图说明了域层次结构中的计算机之间的时间同步路径。
AD DS 层次结构中的时间同步
可靠时间源配置
被配置为可靠时间源的计算机被标识为时间服务的根。 时间服务的根是域的权威服务器,通常配置为从外部 NTP 服务器或硬件设备检索时间。 可以将时间服务器配置为可靠时间源,以优化跨域层次结构传输时间的方式。 如果将域控制器配置为可靠时间源,Net Logon 服务会在登录到网络时将该域控制器公布为可靠时间源。 当其他域控制器查找要与之同步的时间源时,他们会首先选择可靠的源(如果可用)。
时间源选择
时间源选择过程可能会在网络上产生两个问题:
其他同步周期。
在网络流量中增加了量。
当时间在一组域控制器之间保持一致时,会在同步网络中发生循环,并且该时间会在这些控制器之间持续共享,而不会与其他可靠时间源重新同步。 Windows 时间服务的时间源选择算法旨在防范这些类型的问题。
计算机使用以下方法之一来识别要与之同步的时间源:
如果计算机不是域的成员,则必须将其配置为与指定的时间源同步。
如果计算机是域中的成员服务器或工作站,则默认情况下,它将遵循 AD DS 层次结构,并将其时间与当前运行 Windows 时间服务的本地域中的域控制器进行同步。
如果计算机是域控制器,则最多进行六个查询来找出要与之同步的另一域控制器。 每个查询旨在识别具有特定属性(如域控制器类型、特定位置以及是否是可靠时间源)的时间源。 时间源还必须遵守以下限制:
可靠时间源只能与父域中的域控制器进行同步。
PDC 仿真器可与自身域中的可靠时间源或父域中的任何域控制器同步。
如果域控制器无法与它所查询的域控制器的类型同步,则不进行查询。 域控制器知道它可以在进行查询之前从哪种类型的计算机获取时间。 例如,本地 PDC 仿真器不会尝试查询 3 或 6,因为域控制器不会尝试与自己同步。
下表列出了域控制器用于查找时间源的查询以及查询顺序。
域控制器时间源查询
查询编号 | 域控制器 | 位置 | 时间源的可靠性 |
---|---|---|---|
1 | 父域控制器 | 站点内 | 首选可靠的时间源,但如果全部可用,则它可以与非可靠时间源同步。 |
2 | 本地域控制器 | 站点内 | 仅与可靠时间源同步。 |
3 | 本地 PDC 仿真器 | 站点内 | 不应用。 域控制器不会尝试自行同步。 |
4 | 父域控制器 | 站点外 | 首选可靠的时间源,但如果全部可用,则它可以与非可靠时间源同步。 |
5 | 本地域控制器 | 站点外 | 仅与可靠时间源同步。 |
6 | 本地 PDC 仿真器 | 站点外 | 不应用。 域控制器不会尝试自行同步。 |
注意
- 计算机永远不会与其自身同步。 如果尝试同步的计算机是本地 PDC 仿真器,则它不会尝试查询 3 或 6。
每个查询都会返回可用作时间源的域控制器的列表。 Windows 时间根据域控制器的可靠性和位置向被查询的每个域控制器分配一个分数。 下表列出了 Windows 时间分配给每种类型的域控制器的分数。
分数确定
域控制器状态 | 分数 |
---|---|
位于同一站点中的域控制器 | 8 |
被标记为可靠时间源的域控制器 | 4 |
位于父域中的域控制器 | 2 |
作为 PDC 仿真器的域控制器 | 1 |
当 Windows 时间服务确定它已找出分数最高的域控制器时,将不再执行任何查询。 由时间服务分配的分数是累计的,这意味着位于同一站点中的 PDC 仿真器会获得九分。
如果时间服务的根未配置为与外部源同步,则该计算机的内部硬件时钟会控制该时间。
手动指定的同步
通过手动指定的同步可以指定计算机从中获得时间的一个或一列对等机。 如果计算机不是域的成员,则必须手动将其配置为与指定的时间源同步。 默认情况下,作为域成员的计算机配置为从域层次结构中同步,手动指定的同步最适用于域的林根或未加入域的计算机。 手动指定与域的权威计算机同步的外部 NTP 服务器可提供可靠的时间。 但是,将域的权威计算机配置为与硬件时钟同步是一种更好的解决方案,可为你的域提供最准确、最安全的时间。
除非为手动指定的时间源编写了特定的时间提供程序,否则不会对其进行身份验证,因此这些源会容易受到攻击者的攻击。 此外,如果计算机与手动指定的源(而不是其身份验证域控制器)同步,则这两台计算机可能不同步,导致 Kerberos 身份验证失败。 这可能会导致要求网络身份验证的其他操作失败,如打印或文件共享。 如果只有林根配置为与外部源同步,则林中的所有其他计算机都保持彼此同步,从而使重播攻击变得很困难。
所有可用的同步机制
“所有可用的同步机制”选项是对网络用户最有价值的同步方法。 此方法允许与域层次结构同步,如果域层次结构不可用,则还可以提供备用时间源,具体取决于配置。 如果客户端无法与域层次结构同步时间,则时间源将自动回退到由 NtpServer 设置指定的时间源。 这种同步方法最有可能为客户端提供精确的时间。
停止时间同步
在某些情况下,你可能希望计算机停止同步时间。 例如,如果计算机尝试通过拨号连接从 Internet 上的某个时间源或 WAN 上的另一个站点同步,则可能会产生昂贵的电话费用。 禁用该计算机上的同步时,会阻止计算机尝试通过拨号连接访问时间源。
你还可以禁用同步,以防止在事件日志中生成错误。 每次计算机尝试与不可用的时间源同步时,会在事件日志中生成错误。 如果从定期维护的网络中获取时间源,并且不打算将客户端重新配置为根据其他源同步,则可以禁用客户端上的同步,以防止它在时间服务器不可用时尝试同步。
在指定为同步网络的根的计算机上禁用同步非常有用。 这表示根计算机信任其本地时钟。 如果同步层次结构的根未设置为 NoSync,并且它无法与其他时间源同步,则客户端不会接受此计算机发出的数据包,因为它的时间不受信任。
即使未与其他时间源同步,客户端也会信任的唯一时间服务器是由客户端标识为可靠时间服务器的服务器。
禁用 Windows 时间服务
Windows 时间服务 (W32Time) 可以完全禁用。 如果选择实现使用 NTP 的第三方时间同步产品,则必须禁用 Windows 时间服务。 这是因为所有 NTP 服务器都需要访问用户数据报协议 (UDP) 端口 123,只要 Windows 时间服务在 Windows Server 2003 操作系统上运行,Windows 时间仍会保留端口 123。
Windows 时间服务使用的网络端口
Windows 时间服务在网络上进行通信,以确定可靠的时间源,获取时间信息,并向其他计算机提供时间信息。 它按照 NTP 和 SNTP RFC 的定义执行此通信。
Windows 时间服务的端口分配
服务名称 | UDP | TCP |
---|---|---|
NTP | 123 | 不可用 |
SNTP | 123 | 不可用 |