Windows 7 中的网络跟踪:体系结构
下图显示了 Windows 7 中的基本网络跟踪体系结构。
网络跟踪利用 Windows 中可用的事件跟踪 (ETW) 框架。 Winsock、TCP/IP、NDIS、数据包捕获等网络组件 () 注册为 ETW 跟踪提供程序,并发出与网络活动相关的事件。 任何重要的可记录活动都可以是记录到 ETW 的事件。 可以使用充当 ETW 控制器的 netsh 跟踪 上下文启用对这些网络组件和数据包捕获的跟踪。
生成的跟踪收集在事件跟踪日志 (ETL) 文件中。 然后,可以使用多种工具(例如网络监视器 3.2 及更高版本、事件查看器、netsh 跟踪转换或Tracerpt.exe)分析这些 ETL 文件。
每个 ETW 事件都有一个通用标头,ETW 在其中存储事件属性、时间戳和活动 ID 等信息。 (有关活动 ID 的详细信息,请参阅 在端到端方案中编写相关事件) 。 活动 ID 用于关联事件。 在用户模式下,活动 ID 存储在线程中,在一个线程中记录的所有事件将自动使用相同的活动 ID 进行标记。 在内核模式下,记录事件时必须显式传递活动 ID。 默认情况下,ETL 文件与特定活动 ID 下的事件分组相关。
有关 Windows 事件和 ETW 的详细信息,请参阅 Windows 事件。
网络跟踪中的 ETW 组件
网络跟踪使用 ETW 作为其主要跟踪机制来提供有关网络子系统正在执行的操作的信息。 ETW 中有四个main组件:事件跟踪会话、事件提供程序、事件控制器和事件使用者。
缓冲和日志记录发生在 事件跟踪会话中,这些会话接受来自提供程序的事件并创建跟踪文件。
事件提供程序是将事件写入 ETW 会话的逻辑实体。 事件提供程序可以是用户模式应用程序、托管应用程序、驱动程序或任何其他软件实体。 事件提供程序向 ETW 注册,并通过调用 ETW 日志记录 API 从代码中的不同点编写事件。 由于许多操作系统组件中的事件检测越来越多,即使是 Windows 中的简单应用程序或方案也会包含多个作为事件提供程序的组件。
事件控制器启动和停止事件跟踪会话并启用提供程序。 当事件控制器应用程序动态启用事件提供程序时,提供程序会将事件发送到事件控制器指定的特定事件跟踪会话。 事件提供程序发送到事件跟踪会话的每个事件都包含一个固定标头,其中包括事件元数据和提供程序记录的任何其他自定义数据。
事件使用者是读取日志文件或侦听实时事件的事件跟踪会话并处理它们的应用程序。 事件使用者的一个示例是 Microsoft 网络监视器 3.2,其中包括在 Windows 7 中读取和显示网络跟踪生成的日志文件的功能。
事件按时间顺序传递给事件使用者,并且有各种事件使用者应用程序以特定格式显示事件。 将事件记录到会话时,ETW 会将其他信息添加到事件标头,包括日志记录线程的时间戳、进程和线程 ID、处理器编号以及 CPU 使用率数据。 然后,此数据连同提供程序包含的任何自定义数据一起传递给事件使用者。
使用新 事件日志 API 的 提供程序应提供名为 事件清单的 XML 文件。 此文件提供元数据,用于定义提供程序写入的事件的所有自定义数据和布局信息。 然后,常规用途使用者应用程序使用 跟踪数据帮助程序 (TDH) API 来检索事件元数据、解码事件并显示它们。
借助 Windows 7 中的网络跟踪,事件控制器/使用者端包括与整体 Windows 诊断和支持体验集成的基于方案的端到端跟踪支持。 方案定义方案中涉及的事件提供程序的集合。 事件控制器/使用者端定义可以使用跟踪) 上下文 (方案,包括跨网络组件给定方案的相关提供程序。 事件提供程序端包含来自网络堆栈中不同组件的标准化网络跟踪事件,这些事件可以通过 ETW 活动 ID 进行关联。 提供程序使用通用网络架构,该架构标准化 ETW 概念(如关键字、级别、任务和操作码)的使用。 该架构还定义许多网络组件通用的事件,例如错误事件、数据包丢弃事件、架构事件和状态转换事件。