RDBSS 定义多路复用 ID(MID),一个 16 位值,网络客户端(微型重定向器)和服务器都可以使用该值来区分任何连接上的并发活动请求。 网络重定向程序可以将 MID 与它使用的任何任意上下文或内部数据结构相关联。 是否分配和使用 MID 完全取决于网络重定向程序。
RDBSS 定义的 MID 是MID_ATLAS数据结构的一部分,该结构旨在满足多个标准。 与MID_ATLAS数据结构关联的是一系列用于将 MID 映射到关联上下文的一个或多个MID_MAP数据结构。
MID_ATLAS 数据结构、MID_MAP 结构和 MID 应具备良好的扩展能力,以处理各种远程服务器的不同性能。 例如,Windows 上的典型 LAN 管理器服务器允许在任何连接上发出 50 个未完成的请求。 某些类型的服务器可能只支持一个未决请求,而网关服务器可能需要支持更多的连接,达到数千个未决连接。
需要妥善处理的两个主要操作包括:
将 MID 映射到与之关联的上下文。 此例程将被调用,以处理在客户端和服务器上任何连接(假设服务器使用 MIDs)中接收到的每个数据包。
生成新的 MID 以将请求发送到服务器。 此例程将用于客户端强制实施最大连接限制,以及使用唯一 ID 标记每个并发请求。
MID 必须能够有效地在 65,536 个值的组合中管理多个 MID(通常为 50 个)的唯一标记和身份识别。 在某些情况下,创建小型MID_ATLAS结构可以节省MID_MAP结构使用的内核内存,并根据需要扩展MID_ATLAS结构的大小,以有效处理更大的使用。 为了确保适当的时空权衡,查找组织为三级层次结构。 用于表示 MID 的 16 位拆分为三位字段。 最右侧字段(最小有效)的长度由初始图集中允许的最大 MID 数决定。 此最大值是在首次创建MID_ATLAS数据结构时传递给 RxCreateMidAtlas 例程的参数。 此最大值确定所创建MID_ATLAS数据结构的初始大小以及可以容纳多少MID_MAP数据结构。 其余长度在接下来的两个字段之间平均拆分,这些字段确定可能的从属MID_ATLAS结构的最大大小,这些结构可以定义为将现有MID_ATLAS扩展和延展为MID_MAP数据结构的三级层次结构。 因此,每个MID_ATLAS数据结构可以包含最大数量的MID_MAP结构,或者包含指向从属MID_ATLAS以及MID_MAP结构的指针。
例如,如果在创建时最多分配了 50 个 MID,则第一个字段的长度为 6(64 (2 ** 6 ) 大于 50 个)。 其余长度拆分为第二和第三个分层级别的两个 5 位字段,以便可以扩展现有的MID_ATLAS数据结构,以适应更多MID_MAP条目。
RDBSS 提供以下例程,用于创建和操作 MID_ATLAS 数据结构、关联的 MID_MAP 数据结构和多路复用 ID。
| Routine | DESCRIPTION |
|---|---|
此例程将提供的不透明上下文与 MID_ATLAS 结构中的可用 MID 相关联。 |
|
此例程分配MID_ATLAS数据结构的新实例并初始化它。 |
|
此例程销毁MID_ATLAS数据结构的现有实例,并释放分配给它的内存。 作为副作用,它在MID_ATLAS结构中所有有效的上下文上调用传入的上下文析构函数。 |
|
此例程将 MID 映射到MID_ATLAS结构中的关联上下文。 |
|
此例程将 MID 映射到MID_ATLAS结构中的关联上下文,然后将 MID 与上下文取消关联。 |
|
此例程将 MID 与备用上下文重新关联。 |