Microsoft Windows 2000 TCP/IP 实现详述

/ns/wz/sys/data/20020801135322.htm

Microsoft Windows 2000 TCP/IP 实现详述

操作系统

白皮书

作者:Dave MacDonald 和 Warren Barkley

摘要

本白皮书详述了 Microsoft® Windows® 2000 操作系统 TCP/IP 的实现,同时它也是 Microsoft Windows 2000 TCP/IP 手册的补充。本文对 Microsoft TCP/IP 协议组件进行了细致入微的分析。文中使用了网络跟踪来阐明主要概念。这些跟踪是使用 Microsoft 网络监视器收集并设置格式的,后者是一个基于软件的协议跟踪与分析工具,它包含在 Microsoft Systems Management Server 产品中。本文面向的读者是熟悉 TCP/IP 的网络工程师与技术支持人员。

引言
Microsoft 将 TCP/IP 作为其平台的战略性企业网络传输协议。在九十年代初期,Microsoft 就启动了开发 TCP/IP 栈与服务的宏伟计划,后者可大大改善 Microsoft 网络的可伸缩性。随着 Microsoft® Windows NT® 3.5 操作系统的发行,Microsoft 引入了一个完全重写的 TCP/IP 栈。新栈加入了过去十年中有关性能和管理方面的最新成果。该栈是高性能、可移植的 32 位工业标准 TCP/IP 协议的实现。它随着每个 Windows NT 版本不断演化,增加新的功能与服务,改进了性能和可靠性。

设计 TCP/IP 栈的目的在于,使它:

符合标准
可互操作
可移植
可伸缩
高性能
通用
自调整
便于管理
自适应
本文说明 Windows 2000 的实现细节,它也是 Microsoft Windows 2000 TCP/IP 手册的补充。本文细致入微地分析了 Microsoft TCP/IP 的实现,面向的读者是熟悉 TCP/IP 网络工程师与技术支持人员。

本文使用网络跟踪来帮助阐明概念。这些跟踪是使用 Microsoft 网络监视器 2.0 收集并设置格式的,后者是一个基于软件的协议跟踪与分析工具,它包含在 Microsoft Systems Management Server 产品中。Windows 2000 Server 包含网络监视器的简化功能。该版本与 Systems Management Server 版的主要区别在于,有限版仅能捕获安装它的计算机上可查看到的帧,而不是捕获所有通过网络(需要网络适配器处于混合模式)的帧。该版本不能连接到远程网络监视代理程序。

功能
概述
使用 Windows 2000 的 TCP/IP 组件,可以简便地将 Microsoft 系统集成到大型企业、政府与公用网络中,并可以在这些网络上安全地运行。Windows 2000 是一个支持 Internet 的操作系统。

支持的标准功能
Windows 2000 支持以下标准功能:

可以使用不同媒体类型,绑定到多个网络适配器
逻辑与物理多宿主
内部 IP 路由选择功能
网际分组管理协议 (IGMP) 2 版(IP 多播)
重复 IP 地址检测
多个默认网关
间隔网关检测
自动路径最大传输单位 (PMTU) 发现
网际协议安全 (IPSec)
服务质量 (QoS)
ATM 服务
虚拟专用网络 (VPN)
第 2 层隧道协议 (L2TP)
性能改进
此外,Windows 2000 具有以下性能改进:

协议栈调整,包括增大默认窗口大小与高延迟链接新算法,它可增大吞吐量
TCP 可缩放的窗口大小(由 RFC 1323 支持)
选择性确认 (SACK)
TCP 快速重传
往返时间 (RTT) 与重传超时 (RTO) 计算的改进
管理大量连接的性能改进
硬件任务卸载机制
可用服务
Windows 2000 Server 操作系统系列提供下列服务:

动态主机配置协议 (DHCP) 客户与服务
Windows Internet 名称服务 (WINS),它是一个 NetBIOS 名称客户与服务器程序
动态域名服务器 (DDNS)
拨号 (PPP/SLIP) 支持
点对点隧道协议 (PPTP) 与第 2 层隧道协议。 (L2TP),它用于远程虚拟专用网络
TCP/IP 联网打印 (lpr/lpd)
SNMP 代理
NetBIOS 接口
Windows Sockets 版本 2 (Winsock2) 接口
远程过程调用 (RPC) 支持
网络动态数据交换 (NetDDE)
广域网 (WAN) 浏览支持
高性能 Microsoft Internet 信息服务 (IIS)
基本 TCP/IP 连接实用程序,包括:finger、ftp、rcp、rexec、rsh、telnet 和 tftp
简单网络协议的服务器软件,包括:字符生成器、白天、放弃、回应和当日报价
TCP/IP 管理与诊断工具,包括:arp、ipconfig、nbtstat、netstat、ping、pathping、route、nslookup 和 tracert
Microsoft TCP/IP 不同版本的功能对比表
下表列出现有的功能及其所在操作系统的版本以供参考。这些功能在本文中进行了详细地阐述。

表 1 默认情况下,N 代表“否”,Y 代表“是”,D 代表“禁用” 产品

Windows 95
Windows 95 Winsock 2
Windows 98
Windows 98 SE
Windows NT 4.0 SP5
Windows 2000

间隔网关检测

N

N

Y

Y

Y

Y


VJ 快速重传

N

Y

Y

Y

Y

Y


AutoNet

N

N

Y

Y

N

Y


SACK(选择性确认)

N

Y

Y

Y

N

Y


特大帧支持

Y

Y

Y

Y

Y

Y


大窗口

N

D

D

D

N

D


动态 DNS

N

N

N

N

N

Y


媒体侦听

N

N

N

N

N

Y


局域网唤醒

N

N

N

N

N

Y


IP 转发

N

N

N

D

D

D


NAT

N

N

N

D

N

D


Kerberos v5

N

N

N

N

N

Y


IPSec(网际协议安全)

N

N

N

N

N

Y


PPTP

N

N

Y

Y

Y

Y


L2TP

N

N

N

N

N

Y


IP 帮助程序 API

N

N

Y

Y

Y

Y


Winsock2 API

N

Y

Y

Y

Y

Y


GQoS API

N

N

Y

Y

N

Y


IP 筛选 API

N

N

N

N

N

Y


防火墙挂钩

N

N

N

N

N

Y


数据包调度程序

N

N

N

N

N

D


RSVP

N

N

Y

Y

N

Y


ISSLO

N

N

Y

Y

N

Y


Trojan 筛选

N

N

N

N

D

D


阻塞源路由选择

N

N

N

Y

Y

Y


ICMP 路由器发现

N

Y

Y

Y

D

D


卸载 TCP

N

N

N

N

N

Y


卸载 IPSec

N

N

N

N

N

Y




由 Microsoft Windows 2000 TCP/IP 支持的 Internet RFC
注释请求 (RFC) 是从 Internet 团体使用的系列报告、协议建议和协议标准演化而来的。可使用 FTP 从下列位置获取 RFC 的信息:

nis.nsf.net
nisc.jvnc.net
wuarchive.wustl.edu
src.doc.ic.ac.uk
normos.org
表 2 由该版本 Microsoft TCP/IP 支持的 RFC RFC
标题

768

用户数据报协议 (UDP)


783

一般的文件传输协议 (TFTP)


791

网际协议 (IP)


792

网际消息控制协议 (ICMP)


793

传输控制协议 (TCP)


816

故障隔离和恢复


826

地址解析协议 (ARP)


854

Telnet 协议 (TELNET)


862

回应协议 (ECHO)


863

放弃协议 (DISCARD)


864

字符生成器协议 (CHARGEN)


865

当日报价协议 (QUOTE)


867

白天协议 (DAYTIME)


894

基于 Ethernet 的 IP


919、 922

IP 广播数据报(使用子网进行广播)


950

Internet 标准子网化过程


959

文件传输协议 (TFTP)


1001、1002

NetBIOS 服务协议


1065、1035、1123、1886

域名系统 (DNS)


1042

IEEE 802 网络上的 IP 数据报传输标准


1055

串行线路上的 IP 传输 (IP-SLIP)


1112

网际分组管理协议 (IGMP)


1122、1123

主机要求(通讯与应用)


1144

压缩用于低速串行链路的 TCP/IP 报头


1157

简单网络管理协议 (SNMP)


1179

行式打印机监控程序协议


1188

FDDI 上的 IP


1191

路径 MTU 发现


1201

ARCNET 上的 IP


RFC

标题


1256

ICMP 路由器发现消息


1323

高性能的 TCP 扩展件(请参见 TCP1323opts 注册表参数)


1332

PPP 网际协议控制协议 (IPCP)


1518

带有 CIDR 的 IP 地址分配的体系结构


1519

无类别的域间路由 (CIDR):地址分配与会合策略


1534

DHCP 和 BOOTP 的互操作性


1542

自举协议的分类及扩展


1552

PPP 网际数据包交换控制协议 (IPXCP)


1661

点对点协议 (PPP)


1662

类似 HDLC 架构中的 PPP


1748

使用 SMIv2 的 IEEE 802.5 MIB


1749

使用 SMIv2 的 IEEE 802.5 站源路由 MIB


1812

IP 4 版路由器的要求


1828

使用密钥 MD5 的 IP 身份验证


1829

ESP DES-CBC 传输


1851

ESP 三路 DES-CBC 传输


1852

使用密钥 SHA 的 IP 身份验证


1886

支持 IP 版本 6 的 DNS 扩展件


1994

PPP 质询握手身份验证协议 (CHAP)


1995

DNS 中的增量区域传输


1996

用来提示 DNS 通知区域更改的机制


2018

TCP 选择性确认选项


2085

防止重发的 HMAC-MD5 IP 身份验证


2104

HMAC:消息身份验证的密码散列


2131

动态主机配置协议


2 2136

域名系统中的动态更新 (DNS UPDATE)

2
2181

对 DNS 规范的说明


2205

资源保留协议 (RSVP) 版本 1 功能规范


2236

网际分组管理协议 版本 2


2308

DNS 查询的负缓存 (DNS NCACHE)


2401

网际协议安全架构


2401

网际协议安全架构


2402

IP 身份验证报头


2406

IP 封装安全措施负载量 (ESP)


2581

TCP 阻塞控制




结构模型
概述
Microsoft TCP/IP 组件包含“核心协议单元”、“服务”及两者之间的“接口”。传输驱动程序接口 (TDI) 与网络设备接口规范 (NDIS) 是公用的,它们的规范可从 Microsoft 的下列网址中找到:1 http://www.microsoft.com 和 ftp://ftp.microsoft.com 。 此外,还有许多用户模型应用程序的更高级接口。最常用的接口是 Windows Sockets、远程过程调用 (RPC) 和 NetBIOS。


图 1 Windows 2000 TCP/IP 网络模型

即插即用
Windows 2000 引入了对即插即用的支持。即插即用具有以下功能:

对已安装硬件的自动与动态识别。这包括初始系统安装、对系统两次启动之间所作静态硬件更改的识别以及对运行时硬件事件(如插接或移除以及卡的插入或拔下)的响应。
与硬件自动与动态识别对应的改进硬件配置,包括动态硬件激活、资源仲裁、设备驱动程序加载、驱动器安装等等。
支持特殊总线以及有助于实现硬件自动与动态识别和改进的硬件配置的其它硬件标准,其中包括即插即用 ISA、PCI、PCMCIA、PC 卡/CardBus、USB 和 1394。它包括标准的颁布和硬件应如何操作的建议。
一个有序的即插即用架构,驱动程序编写者可以对它进行操作。它包括基本结构如设备信息 (INF) 接口、API、内核模式通知、执行接口等等。
允许用户模式代码与应用程序了解硬件环境中的更改,以便于采取相应操作的机制。
即插即用操作并不需要使用即插即用硬件。上述前两点可能既适用于传统硬件,又适用于即插即用硬件。某些情况下,依次列举旧式设备是不可能的,因为检测方法是破坏性的或非常耗时的。

即插即用支持对协议栈的主要影响在于,网络接口可随时插上或拔下。Windows 2000 TCP/IP 栈与相关组件经改制来支持即插即用。

NDIS 接口及其它
Microsoft 网络协议使用网络设备接口规范 (NDIS) 与网卡驱动程序进行通讯。多数 OSI 模型链路层功能是在协议栈中实现的。这使得网卡驱动程序的开发变得相当简单。

网络驱动程序接口规范(3.1 到 5.0)
NDIS 3.1 支持一些基本服务,允许协议模块在网络设备上发送原始数据包,并通知该模块网络设备收到的传入数据包。

NDIS 4.0 在 NDIS 3.1 的基础上,增加了以下新功能:

超带宽数据支持(用于 PC 广播)
WirelessWAN 媒体扩展
高速数据包发送与接收(性能显著提高)
快速 IrDA 媒体扩展
媒体侦听(用于 PC 97 中的 Designed for Windows 徽标以及后来的“硬件设计指南”)。Microsoft Windows 2000 TCP/IP 栈利用媒体侦听信息,它在本白皮书的“自动客户机配置”一节进行了说明。
所有本地数据包筛选器(防止网络监视器独占 CPU)
许多新的 NDIS 系统功能(在 Windows 95、Windows 98、Windows NT 和 Windows 2000 之间提供小型端口二进制兼容性)
除包括 NDIS 4.0 中定义的所有功能外,NDIS 5.0 还包括下列扩展功能:

NDIS 电源管理(用于网络电源管理与网络唤醒)
即插即用(Windows 95 NDIS 已有即插即用支持;因此该更改仅适用于 Windows 2000 网络驱动程序。)
支持 Windows 管理规范 (WMI),它提供与基于 Web 的企业管理 (WBEM) 兼容的 NDIS 小型端口及其有关适配器的规范
对所有 Windows 操作系统,使用单一 INF 格式。新的 INF 格式以 Windows 98 INF 格式为基础。
用于改进性能的串并转换小型端口
任务卸载机制,如 TCP 和 UDP 校验和与快速数据包转发
广播媒体扩展(用于 Windows 广播服务)
面向连接的 DIS(用于支持异步传输模式 [ATM]、非对称数字用户线路 [ADSL] 以及 Windows 驱动程序模型-连接流式结构 [WDM-CSA])
支持服务质量 (QoS)
中级驱动程序支持(用于广播 PC、虚拟 LAN、QoS 数据包调度以及 IEEE 1394 网络设备的 NDIS 支持)
当系统请求更改电源级别时,NDIS 可以关掉网络适配器电源。用户或系统均可以提出此请求。例如,用户可能要将计算机置为睡眠模式;或当键盘或鼠标处于静止状态时,系统请求更改电源级别。此外,如果网络接口卡 (NIC) 支持该功能,断开网络电缆可以产生一个关闭电源请求。在这种情况下,系统关闭 NIC 电源前要等待一段时间(可配置),因为断开连接可能是由网络上的临时电缆更改引起的,而不是由将电缆从网络设备上断开引起的。

NDIS 电源管理策略是基于“无网络活动”。这意味着,在关闭 NIC 电源前所有重叠的网络组件必须均同意此请求。如果网络上有活动的会话或打开的文件,则关闭电源的请求可能会被有关的一个或所有组件拒绝。

当有网络事件时,也可以将计算机从低能耗状态唤醒。下列情况可以引发唤醒信号:

检测到网络链接状态有变化(例如,电缆重新连接)
收到网络唤醒帧
收到“神奇程序包”。(有关详细信息,请访问以下网址: http://www.microsoft.com 。)
在驱动程序初始化时,NDIS 就会查询小型端口功能,以确定它是否支持“神奇程序包”、模式匹配或链接变化唤醒,并确定每种唤醒方式所需的最低能耗状态。然后,网络协议查询小型端口功能。在运行时,协议使用启用唤醒、设置数据包模式以及删除数据包模式等对象标识符 (OID),来设置唤醒策略。

目前,Microsoft TCP/IP 是支持网络电源管理的唯一 Microsoft 协议栈。在小型端口初始化时,它注册以下数据包模式:

定向 IP 数据包
站 IP 地址的 ARP 广播
站分配的计算机名称的 TCP/IP 上的 NetBIOS 广播
与 NDIS 兼容的驱动程序(用于各种 NIC)可从许多厂商处获得。NDIS 接口允许多个不同类型的协议驱动程序绑定到一个 NIC 驱动程序上,也允许单个协议绑定到多个 NIC 驱动程序上。NDIS 规范阐述了用于实现这一功能的多路复用机制。可以从 Windows 网络连接文件夹查看或更改绑定。

Windows 2000 TCP/IP 为下列各项提供支持:

以太网(和 802.3 SNAP)
FDDI
令牌环 (802.5)
ATM(LANE 和 CLIP)
ARCnet
专用广域网 (WAN) 链接,如数据电话数字服务 (DDS) 和 T 载体(Fractional T1、T1 和 T3)
拨号或永久电路交换 WAN 服务,如模拟电话、ISDN 和 xDSL
数据包交换 WAN 服务,如 X.25、帧中继与 ATM
这些新功能的目标包括:

提高使用的简便性并降低总体拥有成本 (TCO)
改进性能
启用新的媒体类型、服务与应用程序
提高驱动程序结构的灵活性
链接层功能
链接层功能是在网络接口卡/驱动程序组合与低级协议栈驱动程序之间进行划分的。网络接口卡/驱动程序组合筛选器是以每一帧的目标媒体访问控制 (MAC) 地址为基础的。

通常,硬件筛选出所有传入帧,包含下列一个目标地址的帧除外:

适配器地址
所有全“1”广播地址 (FF-FF-FF-FF-FF-FF)
使用 NDIS 原语,在该主机上的协议驱动程序有注册意向的多播地址
因为最初筛选的决定是硬件作出的,NIC 丢弃任何不满足筛选标准的帧,不进行任何 CPU 处理。然后,通过硬件筛选器的所有帧(包括广播)通过硬件中断上传到 NIC 驱动程序。2 NIC 驱动程序是运行在计算机上的软件,所以任何送来的帧均需要占用一定的 CPU 时间进行处理。NIC 驱动程序从接口卡将帧调入系统内存中。然后,帧被送到(上传)相应的绑定传输驱动程序。NDIS 5.0 规范给出了这一过程的详细信息。

帧按照它们所绑定的顺序上传至所有绑定的传输驱动程序。

当数据包通过一个网络或一组网络时,源媒体访问控制地址通常是将数据包放到媒体上的 NIC 的地址,目标媒体访问控制地址则是将数据包从媒体上取下来的那个 NIC 的地址。这说明,在路由网络中,源与目标媒体访问控制地址随着通过网络层设备(路由器或第 3 层交换机)的每个跃点而改变。

最大传输单位 (MTU)
每种媒体类型都有一个最大帧大小的上限。链接层负责发现 MTU,并向上述协议报告。协议栈可能会向 NDIS 驱动程序查询本地 MTU。接口的 MTU 信息被上层协议(如 TCP)所使用,这些协议自动优化每种媒体的数据包大小。有关详细信息,请参见本白皮书“传输控制协议 (TCP)”一节中有关 TCP 路径最大传输单位 (PMTU) 发现的讨论。

如果 NIC 驱动程序(如 ATM 驱动程序)使用 LAN 仿真模式,它报告的 MTU 要比该媒体类型预计值要高。例如,它可仿真以太网,但报告 MTU 为 9180 字节。Windows NT 和 Windows 2000 接受并使用该适配器报告的 MTU 大小,即使它超过给定媒体类型的正常 MTU。

有时,向协议栈报告的 MTU 比给定媒体类型的预计值要小。例如,由于链接层报头较大,使用以太网上的 QoS 的 802.1p 标准(与硬件有关)可将所报告的 MTU 减少 4 字节。

核心协议栈组件与 TDI 接口
核心协议栈组件是就是图 1 中 NDIS 和 TDI 接口之间的那些组件。它们是在 Windows 2000 Tcpip.sys 驱动程序中实现的。Microsoft 栈可通过 TDI 接口与 NDIS 接口来访问。Winsock2 接口还支持对协议栈的直接访问。

地址解析协议 (ARP)
ARP 对传出的数据包执行 IP 地址到媒体访问控制 (MAC) 地址解析。由于每个传出的 IP 数据报是封装在帧中的,因此必须增加源与目标媒体访问控制地址。由 ARP 来确定每个帧的目标媒体访问控制地址。

ARP 将每个出站 IP 数据报上的目标 IP 地址与发送帧的 NIC 的 ARP 缓存进行比较。如果有匹配的项,则从缓存中检索 MAC 地址。如果没有匹配的项,ARP 在本地子网上广播一个“ARP 请求数据包”,请求拥有所讨论的 IP 地址的所有者回复其媒体访问控制地址。如果数据包正在通过一个路由器,ARP 就会解析下一个跃点路由器(而不是最终目标主机)的媒体访问控制地址。当收到 ARP 回复时,就会用新信息更新 ARP 缓存,并用于在链接层数据包寻址。

ARP 缓存
您可以使用 ARP 实用程序查看、添加或删除 ARP 缓存中的项。下面列出了一些示例。手动添加的项是静态的,不会从缓存中自动删除,但是动态项可以从缓存中删除(有关详细信息,请参见“ARP 缓存老化”一节)。

arp 命令可以用于查看 ARP 缓存,如下所示:

C:\>arp -a
Interface: 199.199.40.123
Internet Address Physical Address Type
199.199.40.1 00-00-0c-1a-eb-c5 dynamic
199.199.40.124 00-dd-01-07-57-15 dynamic
Interface: 10.57.8.190
Internet Address Physical Address Type
10.57.9.138 00-20-af-1d-2b-91 dynamic

本示例中的计算机是“多宿主”计算机(有多个 NIC),因此每个接口均有一个不同的 ARP 缓存。

在下面的示例中,arp -s 命令用于向主机第 2 个接口所使用的 ARP 缓存中添加静态项,该主机的 IP 地址是 10.57.10.32,NIC 地址是 00608C0E6C6A:

C:\>arp -s 10.57.10.32 00-60-8c-0e-6c-6a 10.57.8.190
C:\>arp -a
Interface: 199.199.40.123
Internet Address Physical Address Type
199.199.40.1 00-00-0c-1a-eb-c5 dynamic
199.199.40.124 00-dd-01-07-57-15 dynamic
Interface: 10.57.8.190
Internet Address Physical Address Type
10.57.9.138 00-20-af-1d-2b-91 dynamic
10.57.10.32 00-60-8c-0e-6c-6a static

ARP 缓存老化
Windows NT 和 Windows 2000 自动调整 ARP 缓存的大小以满足系统需求。如果某个项未被任何传出数据报使用的时间持续两分钟,则该项将从 ARP 缓存中删除。十分钟后,被引用的项将从 ARP 缓存中删除。手动添加的项不会从缓存中自动删除。Windows NT 3.51 Service Pack 4 中添加了新的注册表参数 (ArpCacheLife),增加对老化的管理控制。在附录 A 中给出了这一参数的详细信息。

使用 arp -d 命令从缓存中删除项,如下所示:

C:\>arp -d 10.57.10.32
C:\>arp -a
Interface: 199.199.40.123
Internet Address Physical Address Type
199.199.40.1 00-00-0c-1a-eb-c5 dynamic
199.199.40.124 00-dd-01-07-57-15 dynamic
Interface: 10.57.8.190
Internet Address Physical Address Type
10.57.9.138 00-20-af-1d-2b-91 dynamic

ARP 仅查询出站 IP 数据包的指定目标地址,同时将该 IP 地址解析为媒体访问控制地址。如果基于用户数据报协议 (UDP) 的应用程序将多个 IP 数据报发送到一个目标地址而中间没有任何停顿,且没有 ARP 缓存项可用,一些数据报可能被丢弃。在发送数据包流前,应用程序通过调用 iphlpapi.dll 例程 SendArp() 建立 ARP 缓存项,来弥补这一点。有关 IP 帮助程序 API 的详细信息,请参见 Microsoft Knowledge Base 文章 Q193059<http://support.microsoft.com/servicedesks/msdn/search/default.htm> 或平台 SDK<http://msdn.microsoft.com/downloads/sdks/platform/platform.asp>。

网际协议 (IP)
IP 是 TCP/IP 协议的“邮局”,负责对 IP 数据进行分检和传递。在这一层,每个传入或传出的数据包被称作一个“数据报”。每个 IP 数据报包含发送者的源 IP 地址以及接收者的目标 IP 地址。与媒体访问控制地址不同,在数据包通过网络过程中数据报的 IP 地址保持不变。IP 层的功能如下所述。

路由选择
路由选择是 IP 的一个主要功能。数据报是从上面的 UDP 和 TCP 和下面的 NIC 传到 IP 的。每个数据报均标有源与目标 IP 地址。IP 检查每个数据报上的目标地址,将它与本地维护的路由表进行比较,然后决定要执行的操作。对于每个数据报,有三种可能性:

它被向上传到本地主机 IP 之上的一个协议层。
可使用本地连接的一个 NIC 对它进行转发。
将它丢弃。
路由表维护四种不同类型的路由。以下按搜索地址匹配的顺序,列出了这四种路由类型:

主机(到单个特定目标 IP 地址的路由)
子网(到一个子网的路由)
网络(到整个网络的路由)
默认(没有其它匹配项时使用)
要确定一个路由用来转发 IP 数据报时,IP 使用以下步骤:

对于路由表中的每个路由,IP 执行目标 IP 地址和网络掩码的位逻辑“与”操作。IP 将该结果与网络目标进行比较,看是否匹配。如果匹配,则 IP 将该路由标记为一个与目标 IP 地址匹配的路由。
从匹配路由列表中,IP 确定在网络掩码中有最多位的路由。 该路由与目标 IP 地址匹配的位数最多,因而是 IP 数据报的最确定路由。这也称为查找最长或最匹配的路由。
如果找到多个最匹配的路由,则 IP 使用跃点数最少的路由。如果找到多个跃点数最少的最匹配路由,则 IP 可以选用其中任何一个路由。
您可以在命令提示符下使用 route print 命令查看路由表,如下所示:

C:\>route print
=========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 a0 24 e9 cf 45 ...... 3Com 3C90x Ethernet Adapter
0x3 ...00 53 45 00 00 00 ...... NDISWAN Miniport
0x4 ...00 53 45 00 00 00 ...... NDISWAN Miniport
0x5 ...00 53 45 00 00 00 ...... NDISWAN Miniport
0x6 ...00 53 45 00 00 00 ...... NDISWAN Miniport
=========================================================================
=========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.99.99.254 10.99.99.1 1
10.99.99.0 255.255.255.0 10.99.99.1 10.99.99.1 1
10.99.99.1 255.255.255.255 127.0.0.1 127.0.0.1 1
10.255.255.255 255.255.255.255 10.99.99.1 10.99.99.1 1
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
224.0.0.0 224.0.0.0 10.99.99.1 10.99.99.1 1
255.255.255.255 255.255.255.255 10.99.99.1 10.99.99.1 1
Default Gateway: 10.99.99.254
=========================================================================
Persistent Routes:
None

以上是一台计算机的路由表,其 A 类 IP 地址为 10.99.99.1;子网掩码为 255.255.255.0;默认网关为 10.99.99.254。它包含下列 8 项:

第一项是默认路由地址 (0.0.0.0)。
第二项是计算机所在的子网地址 (10.99.99.0)。
第三项是本地主机的主机路由地址 (10.99.99.1)。它指定环回地址,这是有意义的,因为发到本地主机的数据报应在内部环回。
第四项是网络广播地址。
第五项是环回地址 (127.0.0.0)。
第六项用于 IP 多播,本文后面对它进行了讨论。
最后一项为有限广播(全“1”)地址。
Default Gateway 是当前活动的默认网关。这对于了解何时配置了多个网关是很有用的。

在该主机上,如果将数据包发送到 10.99.99.40,则最匹配的路由是本地子网路由(10.99.99.0,掩码是 255.255.255.0)。数据包通过本地接口 10.99.99.1 发送。如果数据包发送到 10.200.1.1,则最接近匹配的路由是默认路由。在这种情况下,数据包转发至默认网关。

在多数情况下,路由表是自动维护的。当主机初始化时,将添加本地网络、环回、多播以及配置的默认网关项。随着 IP 层对路由的识别,在表中就会出现更多的路由。例如,主机的默认网关使用 ICMP 可向主机建议一个到特定网络、子网或主机的更好路由,本白皮书的后面对 ICMP 进行了阐述。可以使用 route 命令手动添加路由,或者通过路由协议来添加。-p(永久)开关可与 route 命令一起使用以指定永久路由。永久路由保存在注册表中的注册表项下。

HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\Tcpip
\Parameters
\PersistentRoutes

Windows 2000 TCP/IP 为默认网关引入了新的跃点数配置选项。该跃点数允许更好地控制在某一特定时间哪个默认网关是活动的。跃点数的默认值是 1。首选项是跃点数较低的路由,而不是跃点数较高的路由。在使用默认网关的情况下,计算机使用跃点数最低的网关,除非该网关未激活,在这种情况下,间隔网关检测就会切换到列表中的下一个最低跃点数默认网关。默认网关跃点数可以使用 TCP/IP 高级配置属性进行设置。DHCP 服务器提供基础跃点数以及默认网关列表。如果 DHCP 服务器提供基础跃点数 100 以及有三个默认网关的列表,则网关将分别使用跃点数 100、101 和 102 进行配置。DHCP 提供的基础跃点数并不适于静态配置的默认网关。

多数自治系统 (AS) 路由器使用路由信息协议 (RIP) 或开放式最短路径优先 (OSPF) 等协议,相互交换路由表。Windows 2000 Server 支持这些协议。Windows 2000 Professional 支持无声 RIP。

默认情况下,基于 Windows 的系统并不用作路由器,也不在接口间转发 IP 数据报。但是,Windows 2000 Server 中提供“路由与远程访问”服务。可以使用并配置它,以便提供完整的多协议路由服务。

管理路由与远程访问
在开始菜单上,指向程序。
指向管理工具,然后单击路由和远程访问。
当在同一物理网络上运行多个逻辑子网时,可以使用下列命令通知 IP 将所有子网作为本地子网处理,并对目标地址直接使用 ARP:

route add 0.0.0.0 MASK 0.0.0.0 <my local ip address>

这样,要发往非本地子网的数据包被直接传送到本地媒体,而不是发送到路由器。实质上,本地接口卡可以被指定为默认网关。当在一个物理网络上中使用多个 C 类网络,但没有到外部网络的路由器或在代理 ARP 环境时,这一点很有用。

重复 IP 地址检测
重复地址检测是一项重要功能。当首次初始化栈或添加新的 IP 地址时,就会免费广播此本地主机 IP 地址的 ARP 请求。发送的 ARP 数量是由注册表参数 ArpRetryCount 控制的,默认值为 3。如果另一个主机回复了其中的一个 ARP,则此 IP 地址已被使用。发生这种情况时,基于 Windows 的计算机仍然启动;但是含有此违犯地址的接口被禁用,并生成系统日志项和显示错误消息。如果拥有此地址的那个主机也是基于 Windows 的计算机,则生成系统日志项,并在该计算机上显示错误消息。为了修复可能对其它计算机上 ARP 缓存造成的破坏,设置违犯地址的计算机就会重新广播另一个 ARP,还原其它计算机上 ARP 缓存中的原始数值。

在未连接到网络时,使用重复 IP 地址的计算机可以启动,在这种情况下检测不到冲突。但是,如果该计算机随后接到网络中,当它第一次发送 ARP 请求,请求另一个 IP 地址时,某个地址与之冲突的基于 Windows NT 的计算机就会检测到冲突。检测到冲突的计算机显示一条错误消息,并在系统日志中记录一个详细事件。示例事件日志项如下所示:

The system detected an address conflict for IP address 199.199.40.123 with the system having network hardware address 00:DD:01:0F:7A:B5. Network operations on this system may be disrupted as a result.

当检测到 IP 地址冲突时,启用 DHCP 的客户机就会通知 DHCP 服务器,而不是使栈无效。它们向 DHCP 服务器请求一个新的地址,并请求服务器将冲突地址标记为错误。该功能通常称为“DHCP 拒绝”支持。

多宿主
当计算机配置多于一个 IP 地址时,就被称作“多宿主”系统。多宿主有以下三种支持方式:

每个 NIC 有多个 IP 地址

要给一个接口添加地址,在开始菜单上,指向设置,然后单击网络和拨号连接。右键单击本地连接,然后单击属性。选择 Internet 协议 (TCP/IP),单击属性,然后单击高级。在高级设置对话框中,单击 IP 设置选项卡上的添加,添加 IP 地址。
TCP/IP 上的 NetBIOS (NetBT) 仅绑定到每个接口的一个 IP 地址上。当发出 NetBIOS 名称注册时,每个接口只注册一个 IP 地址。注册过程在用户接口 (UI) 中最先列出的 IP 地址上进行。
每个物理网络有多个 NIC。除硬件外,没有其它限制。
多种网络与媒体类型。 除硬件与媒体支持外,没有其它限制。有关所支持的媒体类型,请参见“NDIS 接口及其它”一节。
当 IP 数据报从多宿主主机发送时,将使用到目标的最简捷路由将其传送到接口。因而,数据报可能包含多宿主主机中一个接口的源 IP 地址,但是此数据报可能是通过另一个接口放在媒体上的。帧上的源媒体访问控制地址是实际将帧传输到媒体那个接口的地址;源 IP 地址是发送应用程序提取帧的地址,不一定是与网络连接 UI 中发送接口相关的一个 IP 地址。

当计算机有多个 NIC 连接不相连的网络时(网络之间彼此断开且互不识别,如远程访问连接网络和本地连接),可能就会出现路由问题。在这种情况下,通常有必要设置到远程网络的静态路由。

在两个不相连的网络上将一台计算机配置为多宿主时,最好在主要网络或最大且最不知名的网络上设置默认网关。然后,添加静态路由或使用路由协议提供到较小或较知名的网络上主机的连接。要避免在两端配置不同的默认网关,这样可能会出现意想不到的结果且连接中断。

备注 在任一时刻计算机只能有一个活动的默认网关。

有关多宿主计算机的名称注册、解析与出站数据报的 NIC 选择的详细信息,请参见文中以下章节:传输控制协议、TCP/IP 上的 NetBIOS 以及 Windows Sockets。

无类别的域间路由 (CIDR)
CIDR 摒弃了 IP 地址分配与管理过程中的类的概念,RFC 1518 和 1519 中对它进行了说明。CIDR 不使用预定义的、明确的界限,而是分配使用起始地址与一个范围来定义的地址,它将可以更有效地使用可用空间。此范围定义地址的网络部分。例如,ISP 分配给一个企业客户机的地址表示为:10.57.1.128 /25。它给本地使用提供 128 个地址块,其中前 25 位是地址的网络标识符部分。旧式分类的地址表示为:<net>.0.0.0 /8, <net>.<net>.0.0 /16 或 <net>.<net>.<net>.0 /24。当这些地址收回时,将使用无类 CIDR 技术重新分配。

对于给定的分类系统,初始 CIDR 实施是连接 C 类空间的地址片段。该过程称为“创建超级网”。超级网用于将多个 C 类网络地址合并到一个逻辑网络中。要创建超级网,合并的 IP 网络地址必须有相同的高位,并且子网掩码应缩短以减少地址的网络部分,并将它们添加到主机部分。例如,可以将 C 类网络地址 199.199.4.0、199.199.5.0、199.199.6.0 与 199.199.7.0 合并在一起,每个地址均使用子网掩码 255.255.252.0:

NET 199.199.4 (1100 0111.1100 0111.0000 0100.0000 0000)
NET 199.199.5 (1100 0111.1100 0111.0000 0101.0000 0000)
NET 199.199.6 (1100 0111.1100 0111.0000 0110.0000 0000)
NET 199.199.7 (1100 0111.1100 0111.0000 0111.0000 0000)
MASK 255.255.252.0 (1111 1111.1111 1111.1111 1100.0000 0000)

当确定路由时,只使用子网掩码屏蔽的位,这样,从路由的角度看,所有这些地址都在同一网络上。使用的任何路由必须也支持 CIDR,并可能需要特殊配置。Windows 2000 TCP/IP 支持 0 位和 1 位子网,在 RFC 1878 中对它进行了详细的说明。

IP 多播
IP 多播用于给不在同一网段的客户机提供有效的多播服务。例如,Windows Sockets 应用程序可以加入多播组参与一个广域会议。

Windows 2000 与 RFC 1112 二级(发送和接收)兼容。IGMP 是用于管理 IP 多播的协议,它将在本文后面进行讲述。

ATM 上的 IP
Windows 2000 引进了对 ATM 上 IP 的支持。RFC 1577(和后续)定义了 ATM 网络上 IP 的基本操作,更精确地说,是 ATM 网络上“逻辑 IP 子网”的基本操作。逻辑 IP 子网(或 LIS)是可以相互直接通讯的一组 IP 主机。不同逻辑 IP 子网的两个主机只能通过一个属于两个子网的 IP 路由器进行通讯。

ATM 地址解析
因为 ATM 网络是非广播的,所以 ARP 广播(用于以太网或令牌环)不是一个合适的解决方案。而是使用专用地址解析协议服务器(或 ARP 服务器),提供 IP 到 ATM 地址解决方案。

LIS 中的一个站用作 ARP 服务器(且 ARP 服务器软件装在上面)。使用 ARP 服务器的站称为“ARP 客户机”。LIS 中的所有 IP 站均为 ARP 客户机。每个 ARP 客户机均使用 ARP 服务器的 ATM 地址来配置。当 ARP 客户机启动时,它将 ATM 连接到 ARP 服务器,并向包含客户机 IP 与 ATM 地址的服务器发送数据包。ARP 服务器建立一个 IP 地址到 ATM 地址的映射表。当客户机要将 IP 数据包发送到另一个客户机(其 IP 地址已知,但 ATM 地址未知)时,它先向 ARP 服务器查询该客户机的 ATM 地址。当收到包含所需 ATM 地址的回复时,该客户机建立到目标客户机的直接 ATM 连接,并在该连接上向目标客户机发送 IP 数据包。

如果连接未激活,则客户机关闭任何 ATM 连接,包括到服务器的连接。所有客户机使用服务器定期刷新它们的 IP 与 ATM 地址信息(默认值为 15 分钟)。如一个项经过 20 分钟(默认值)后还没有刷新,服务器就会清除它。ATM ARP 客户机和 ARP 服务器均支持多个可调整的注册表参数,这些参数在附录 A 中列出。

网际消息控制协议 (ICMP)
ICMP 是一个维护协议,它定义在 RFC 792 中,通常被视为 IP 层的一部分。ICMP 消息封装在 IP 数据报中,所以它们可以在网络中进行路由。Windows NT 和 Windows 2000 使用 ICMP 进行:

建立和维护路由表。
执行路由器发现。
辅助路径最大传输单位 (PMTU) 发现。
诊断问题 (ping, tracert, pathping)。
调整流控制以防止链接或路由器饱和。
ICMP 路由器发现
Windows 2000 可以执行路由器发现,请参阅 RFC 1256。路由器发现提供了一个配置与检测默认网关的改进方法。主机并不使用手动配置或 DHCP 配置的默认网关,而是动态地查找其子网上的路由器。如果主路由器失败或网络管理员更改了路由器首选项,则主机可以自动切换到备份路由器。

当支持路由器发现的主机初始化时,它加入到全系统 IP 多播组 (224.0.0.1),然后侦听路由器发到该组的路由器发布。当初始化接口以避免任何配置延迟时,主机可以向所有路由器 IP 多播地址 (224.0.0.2) 发送路由器请求消息。Windows 2000 每隔大约 600 毫秒最多发送三个请求。

路由器发现的使用是由 PerformRouterDiscovery 和 SolicitationAddressBCast 注册表参数控制的,默认情况下,在 Windows 2000 中它是由 DHCP 控制。

将 SolicitationAddressBCast 设置为 1,路由器请求就会变成广播而不是多播,在 RFC 中对它进行了详细的说明。

维护路由表
当基于 Windows 的计算机初始化时,路由表通常只包含几个项。其中的一个项指定默认网关。如果数据报目标 IP 地址在路由表中没有较好的匹配,则它被发送到默认网关。但是,因为路由器共享有关网络拓扑的信息,因此默认网关可能知道到给定地址的更好路由。在这种情况下,当收到可采取更佳路径的数据报时,此路由器通常就会转发数据报。然后,它使用 ICMP Redirect 消息向发送者建议一条更好的路由。这些消息可以为一个主机、子网或整个网络指定重定向。当基于 Windows 的计算机接收到 ICMP 重定向时,就会执行有效性检查,确保它是否来自当前路由的第一个跃点网关,以及此网关是否在直接连接的网络上。如果是,则将一个生存时间为 10 分钟的主机路由添加到该目标 IP 地址的路由表中。如果 ICMP 重定向不是来自当前路由的第一个跃点网关,或者该网关不在直接连接的网络上,则忽略 ICMP 重定向。

路径最大传输单位 (PMTU) 发现
TCP 使用路径最大传输单位 (PMTU) 发现,如本文后面的“传输控制协议 (TCP)”一节所述。该机制取决于 ICMP Destination Unreachable 消息。

使用 ICMP 诊断问题
ping 命令行实用程序用于向 IP 地址发送 ICMP 回应请求并等待 ICMP 回应响应。ping 报告所收到的响应次数以及发送与接收响应之间的时间间隔。ping 实用程序可以使用许多不同的选项。在本文的疑难解答部分将更加详细地讲解 ping。
Tracert 是一个非常有用的路由跟踪实用程序。Tracert 的工作原理是:向 IP 地址发送 ICMP 回应请求的同时,递增 IP 报头的生存时间 (TTL) 字段(从 1 开始),并分析返回的 ICMP 错误。在 TTL 字段到达 0 之前,每个后续回应请求就会跳到网络中的下一个跃点,则要转发它的路由器就会返回一条 ICMP Time Exceeded 错误消息。Tracert 命令按顺序打印出路径中返回这些错误消息的路由器列表。如果使用 -d(不在每个 IP 地址上进行 DNS 逆序查询)开关,就会报告每个近端路由器接口的 IP 地址。下面是使用 tracert 命令查找一台计算机(通过点对点协议 (PPP) 拨入 Seattle 的 Internet 提供商)到以下地址路由的示例: http://www.whitehouse.gov 。
C:\>tracert www.whitehouse.gov
Tracing route to www.whitehouse.gov [128.102.252.1]
over a maximum of 30 hops:
1 300 ms 281 ms 280 ms roto.seanet.com [199.181.164.100]
2 300 ms 301 ms 310 ms sl-stk-1-S12-T1.sprintlink.net [144.228.192.65]
3 300 ms 311 ms 320 ms sl-stk-5-F0/0.sprintlink.net [144.228.40.5]
4 380 ms 311 ms 340 ms icm-fix-w-H2/0-T3.icp.net [144.228.10.22]
5 310 ms 301 ms 320 ms arc-nas-gw.arc.nasa.gov [192.203.230.3]
6 300 ms 321 ms 320 ms n254-ed-cisco7010.arc.nasa.gov [128.102.64.254]
7 360 ms 361 ms 371 ms www.whitehouse.gov [128.102.252.1]

Pathping 是一个命令行实用程序,它结合了 ping 和 tracert 功能并引入一些新功能。Pathping 具有 tracert 的跟踪功能,并在一段时间内探测路由上每个跃点,并显示延迟与数据包丢失,这有助于确定在路径中是否有薄弱的链接。
服务质量 (QoS) 与资源保留协议 (RSVP)
Windows 2000 的另一个新功能是支持 QoS。Windows 2000 支持多个 QoS 机制,如资源保留协议 (RSVP)、服务分级 (DiffServ)、IEEE 802.1p、ATM QoS 等等。Windows 2000 支持的 QoS 机制是从简单的类属 QoS (GQoS) API 抽象出来的。以下概述了栈和相关系统组件对 QoS 的支持。

GQoS API 是 Winsock 编程接口的扩展。它包括一些 API 和系统组件,给应用程序提供了保留客户机与服务器之间的网络带宽的方法。Windows 2000 自动将 GQoS 请求映射到 QoS 机制,如 RSVP、Diffserv、802.1p 或 ATM QoS。RSVP 是第 3 层信号传输协议,用于给网络上各个流保留带宽。RSVP 是基于每个流的 QoS 机制,因为它为每个流设置保留带宽。Diffserv 是另一个第 3 层 QoS 机制。Diffserv 在 IP 报头中定义了 6 个位,它决定了 IP 数据包优先级划分的方式3。Diffserv 通信可划分为 64 种可能的等级,称为基于每个跃点的行为 (PHB)。另一方面,802.1p 是第 2 层 QoS 机制,它定义了第 2 层设备(如以太网交换机)应如何划分通信的优先级。802.1p 定义了 8 个优先级,从 0 到 7。DiffServ 和 802.1p 被称为集合 QoS 机制,因为它们将所有通信分为有限个优先级。

下列一组事件体现了应用程序与 GqoS 相互作用的特点:

应用程序通过 GqoS 以抽象形式请求 QoS。
应用程序请求转换为 RSVP 信号传输消息。RSVP 信号传输消息发送到网络上,并在网络路径中所有支持 RSVP 的节点上保留带宽。
除设置保留带宽外,RSVP 消息还要受网络上策略服务器的审查。如果违反网络策略,策略服务器就会拒绝此 RSVP 请求。这就给网络管理员提供了一种方法,确定谁可获得 QoS。
安装了 RSVP 带宽保留之后,Windows 2000 就开始使用 DiffServ 级与 802.1p 优先级标记该数据流的所有传出的数据包。
当数据流通信在网络上传输时,它在启用 802.1p 的以太网交换机上就会得益于 802.1p 优先级划分;在启用 RSVP 的路由器上就会得益于 RSVP 带宽保留;在网络中启用 DiffServ 的“云”中就会得益于 DiffServ 优先级划分。
还有很多其它的 QoS 机制,如基于 ATM 的集成服务 (ISATM),它自动将 GQoS 请求映射到 ATM 网络的以前 IP 上的 ATM QoS。基于低速率的集成服务 (ISSLOW) 是另一个 QoS 机制,它改进了慢速 WAN 链接上优先通信的延迟问题。除了 GQoS API 外,控制或管理应用程序可通过通信控制 (TC) API 获得通信控制功能。TC API 允许控制或管理应用程序为未启用 QoS 的应用程序提供某种质量的服务。Windows 2000 还提供称为 QoS 许可控制服务 (QoS ACS) 的策略服务器。QoS ACS 允许网络管理员控制在网络上谁可以获得 QoS。QoS ACS 还提供一个称为本地策略模块 (LPM) API 的 API。LPM API 允许 ISV 建立自定义策略模块,增强 QoS ACS 中策略实施功能。

下面的图 2 给出了 QoS 和 RSVP 中所涉及的系统组件。GQoS 是一个 QoS 提供程序,它可以调用 RSVP 信号传输、触发通信控制并给应用程序提供事件通知。Rsvp.exe 负责将 RSVP 信号传入或传出网络,并负责调用 Traffic.dll,将流与筛选器添加到栈中。数据包分类器负责根据由 Traffic.dll 所表明的数据包筛选器对数据包进行分类。数据包调度程序为每个通信分类保留不同的独立队列并包含一致性分析程序、流整形程序和数据包序列发生器。流整形程序按协商好的速率将流加到数据包队列,且序列发生器按其排定的队列优先级顺序将数据包送到网络接口。没有使用 QoS 规范的通信放在“最佳效果”队列,其优先级最低。



图 2 QoS/RSVP 结构

图 2 中的流程表表明应用程序如何使用 QoS RSVP 将数据流传送到客户机上。应用程序是音频服务器,它需要 1 Mb/秒 的可靠带宽向客户机提供可接受的音频质量。RSVP 支持单播与多播数据流。该示例使用到单一客户机的单播数据流。

应用程序初始化并完善一个提供给 GqoS 的结构。该结构包括一个发送与接收数据流的规范。数据流规范包括入峰值带宽、滞后时间、延迟变化、服务种类等参数。服务种类的示例包括“最佳效果”和“保证服务”。

然后应用程序调用 WSAConnect,连接到客户机。对此函数的调用可触发多个事件。RSVP 被调用,它通过发送特殊路径消息向网络发送信号。路径消息发送到与数据流相同的目标 IP 地址;但是,它专用于在数据流中设置路由器以及标识数据流。接收路径消息的路由器将自身的 IP 地址插入路径消息的上一个跃点中并将消息转发至路径中的下一个路由器,直到它到达客户机为止。这使得客户机可以了解与发送者之间的路径,并在路径上为应用程序保留带宽。客户机将保留请求(再次说明指定的数据流)沿同一路径返回。路径中的路由器负责检查它们的可用资源,并决定它们是否可以接受带宽保留。如果沿路径中的所有路由器均同意接受带宽保留,则应用程序就有望拥有所需带宽与其它可用资源。

因为网络是动态的,并且服务器或者客户机放弃其资源而没有通知网络,因此路径消息与保留请求必须经常刷新。如果网络上没有发生变化,则附加路径消息与保留仅刷新现有路径。但是,如果出现新的路由,则数据流所采取的路径可能会随着网络调整而动态地进行修改。

当服务器应用程序用于向多个客户机多播时,就会发生相似的一组事件。一个有趣的差异是,当路由器收到不同客户(使用同一数据流)的保留请求时,路由器合并这些保留请求,而不是为同一信息流分别保留单个的带宽保留。

有关这些主题的更多、详细信息,请参见 Winsock2 规范与 RFC 2205。

网际协议安全 (IPSec)
网际协议安全 (IPSec) 是 Windows 2000 中的另一个新功能。IPSec 功能与实现细节非常复杂,在系列 RFC 和 IETF 草案和其它 Microsoft 白皮书中对它进行了详细地阐述。IPSec 使用基于密码的安全机制,提供访问控制、无连接完整性、数据源身份验证、防止重播、机密性与有限的通信流机密性。因为 IPSec 是在 IP 层提供的,栈的上层协议可以使用这些服务,并且现有应用程序也可以透明地使用这些服务。

IPSec 允许系统选择安全协议,确定对服务使用哪种算法,并建立与维护每个安全关系的加密密钥。IPSec 可以保护主机之间、安全网关之间以及主机与安全网关之间的路径。通信可用的和所需的服务是使用 IPSec 策略配置的。IPSec 策略可以在计算机本地上进行配置,或者使用 Active Directory 服务通过 Windows 2000 组策略机制指派。使用 Active Directory 时,主机在启动时检测策略指派、检索策略,然后定期检查策略更新。IPSec 策略指定计算机相互信任的方式。IPSec 可以使用证书或 Kerberos 作为身份验证的方法。要使用的最简单信任是基于 Kerberos 的 Windows 2000 域信任。预定义的 IPSec 策略配置为:信任同一域或其它受信任 Windows 2000 域中的计算机。

在 IP 层处理的每个 IP 数据报与安全策略提供的一组筛选器进行比较,一个域的计算机安全策略是由管理员进行维护的。对于任何数据报,IP 可以做以下三件事情之一:

给它提供 IPSec 服务。
允许它通过,并不作修改。
丢弃它。
IPSec 策略含有筛选器、筛选器操作、身份验证、隧道设置与连接类型。例如,可对同一 Windows 2000 域中的两台独立计算机进行配置,以便在它们之间使用 IPSec 并启动安全服务器策略。如果两台计算机不在同一域中,也不是受信任域中的成员,则必须在安全服务器模式下使用证书或预共享密钥来配置信任,步骤如下:

设置一个筛选器,指定两个主机之间的所有通信
选择一种身份验证方法
选择协商策略(在这种情况中为安全服务器,说明匹配筛选器的所有通信必须使用 IPSec)
指定连接类型(LAN、拨号或所有类型)
一旦策略就绪,与筛选器匹配的通信就开始使用由 IPSec 提供的服务。当一个主机将 IP 通信(包括与 ping 一样简单的信令)定向到另一个主机时,就会通过 UDP 端口 500 的简短会话并使用 Internet 密钥交换 (IKE) 来建立安全关联 (SA),然后通信开始流动。下列网络跟踪表明了在这样两个启用 IPSec 的主机间是如何建立 TCP 连接。在建立 SA 之后,IP 数据报中只有媒体访问控制和 IP 报头部分是未加密且对网络监视器是可见的:

Source IP Dest IP Prot Description
davemac-ipsec calvin-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 216 (0xD8)
calvin-ipsec davemac-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 216 (0xD8)
davemac-ipsec calvin-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 128 (0x80)
calvin-ipsec davemac-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 128 (0x80)
davemac-ipsec calvin-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 76 (0x4C)
calvin-ipsec davemac-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 76 (0x4C)
davemac-ipsec calvin-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 212 (0xD4)
calvin-ipsec davemac-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 172 (0xAC)
davemac-ipsec calvin-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 84 (0x54)
calvin-ipsec davemac-ipsec UDP Src Port: ISAKMP, (500); Dst Port: ISAKMP (500); Length = 92 (0x5C)
davemac-ipsec calvin-ipsec IP ID = 0xC906; Proto = 0x32; Len: 96
calvin-ipsec davemac-ipsec IP ID = 0xA202; Proto = 0x32; Len: 96
davemac-ipsec calvin-ipsec IP ID = 0xCA06; Proto = 0x32; Len: 88

在建立 SA 之后,打开一个已发出的 IP 数据报,几乎看不到数据报中的内容(TCP SYN 或连接请求)。数据包唯一可见的部分是以太网和 IP 报头。甚至 TCP 报头也已加密,如果使用 ESP,网络监视器就无法对它进行分析。

Src IP Dest IP Protoc Description
===================================================
davemac-ipsec calvin-ipsec IP ID = 0xC906; Proto = 0x32; Len: 96
+ FRAME: Base frame properties
+ ETHERNET: ETYPE = 0x0800 : Protocol = IP: DOD Internet Protocol
IP: ID = 0xC906; Proto = 0x32; Len: 96
IP: Version = 4 (0x4)
IP: Header Length = 20 (0x14)
IP: Precedence = Routine
IP: Type of Service = Normal Service
IP: Total Length = 96 (0x60)
IP: Identification = 51462 (0xC906)
+ IP: Flags Summary = 2 (0x2)
IP: Fragment Offset = 0 (0x0) bytes
IP: Time to Live = 128 (0x80)
IP: Protocol = 0x32
IP: Checksum = 0xD55A
IP: Source Address = 172.30.250.139
IP: Destination Address = 157.59.24.37
IP: Data: Number of data bytes remaining = 76 (0x004C)
00000: 52 A4 68 7B 94 80 00 00 90 1D 84 80 08 00 45 00 R.h{..........E.
00010: 00 60 C9 06 40 00 80 32 D5 5A AC 1E FA 8B 9D 3B .`..@..2.Z.....;
00020: 18 25 18 D9 03 E8 00 00 00 01 F6 EF D0 23 1C 59 .%...........#.Y
00030: BD 01 78 BE 69 24 D6 EB AE 4F 08 DA 0F D4 6C 04 ..x.i$...O....l.
00040: 5F BC A6 E0 8D BE 5C 89 2D 56 60 80 FA 8B CC 5E _.....\.-V`....^
00050: 4E 61 3D 46 75 B9 D1 5B 52 45 79 7D 1E 36 1F 01 Na=Fu..[REy}.6..
00060: FF 25 E5 BA 48 AF D7 7A D5 9A 34 3E 5D 7D .%..H..z..4>]}

使用安全服务器策略也会限制所有其它类型的通信到达不能识别 IPSec 或不在同一信任组的目标地址。安全初始化策略给服务器提供最适用的设置并尝试通信安全性,但是如果客户机无法识别 IPSec,则协商就会改发明文数据包。

使用 IPSec 进行数据加密时,网络性能通常会下降,这是加密的处理开销所致。要减小处理开销的影响,一个可能的办法是卸载硬件设备处理。因为 NDIS 5.0 支持任务卸载,所以将加密硬件加到 NIC 上是可行的。很多厂商均提供支持 IPSec 硬件卸载的 NIC。

对于公用网络通信以及要求机密性的内部企业/政府通信,IPSec 均提供保护。通常的实现方法是,只在用于存储和/或提供机密信息的特定服务器上,实施安全的服务器 IPSec 策略。

网际分组管理协议 (IGMP)
Windows 2000 向 IP 多播(IGMP 版本 2)提供第 2 级(完全)支持,在 RFC 1112 和 RFC 2236 中对它进行了详细的说明。RFC 1112 的引言部分给出了 IP 多播的一个总体摘要。其内容如下:

IP 多播是将 IP 数据报传输到“主机组”,它是用单个 IP 地址标识的零个或几个主机。多播数据报使用与常规单播 IP 数据报相同的“最佳效果”可靠性将传送到目标主机组的所有成员;也就是说,不能保证该数据报完整无缺地到达目标组的所有成员中,也不保证其顺序与其它数据报的顺序相同。

主机组的成员身份是动态的;也就是说,主机可以随时加入或离开组。对于主机组中成员的位置与数量没有限制。主机可以同时是几个组的成员。要向一个组发送数据报,主机并不要求是它的成员。

主机组可以是永久的或暂时的。永久组有一个明确的、从管理上分配的 IP 地址。地址是永久不变的,但组的成员不是永久不变的;在某一时刻,永久组中可能有任意数量的成员,甚至为零。那些永久组没有保留的 IP 多播地址会动态分配给暂时组,只有当组中有成员时,临时组才存在。

IP 多播数据报的网络转发是由多播路由器处理的,它们可能与 Internet 网关在一起,或者与之分开。主机将 IP 多播数据报作为本地网络多播进行传输时,它到达目标主机组的所有直接近邻成员。如果数据报 IP 生存时间大于 1,则连接到本地网络的多播路由器负责将它转发到有目标组成员的所有其它网络。在 IP 生存时间内可以到达的其它成员网络上,连接的多播路由器通过将数据报作为本地多播进行传输来完成传送。

IP 多播的 IP/ARP 扩展
要支持 IP 多播,需要在主机上定义另外一个路由。该路由指定(默认添加)是否将数据报发送到多播主机组,是否应通过本地接口卡将它发送到主机组的 IP 地址而不是转发到默认网关。下列路由(可以使用 route print 命令查找)表明:

Network Address Netmask Gateway Address Interface Metric
224.0.0.0 224.0.0.0 10.99.99.1 10.99.99.1 1

主机组地址是很容易标识的,因为它们是 D 类地址,范围是从 224.0.0.0 到 239.255.255.255。所有这些 IP 地址高位均为 1110。

要使用本地接口将数据包发送到主机组,必须将 IP 地址解析为媒体访问控制地址。正如 RFC 中所述:

“通过将 IP 地址的低 23 位放到以太网多播地址 01-00-5E-00-00-00(十六进制)的低 23 位,可将 IP 主机组地址映射到以太网多播地址。因为在 IP 主机组地址中有 28 位之多,所以可能会有几个主机组地址映射到一个以太网多播地址上。”

例如,多播地址为 225.0.0.5 的数据报将被发送到(以太网)媒体访问控制地址 01-00-5E-00-00-05。该媒体访问控制地址是由 01-00-5E 和 225.0.0.5 (00-00-05) 的低 23 位组成的。

因为几个主机组地址可能映射到同一以太网多播地址,所以接口可能会将本地应用程序无注册意向的主机组标记为执行多播。TCP/IP 丢弃其它多余的多播。

Windows Sockets 的多播扩展
目前仅在 SOCK_DGRAM 和 SOCK_RAW 类型的 AF_INET 套接字上支持 IP 播。默认情况下,IP 多播数据报与值为 1 的生存时间 (TTL) 一起发送。应用程序可以使用 setsockopt 函数指定 TTL。按照惯例,多播路由器使用 TTL 阈值确定转发数据报的距离。这些 TTL 阈值定义如下:

初始 TTL 为 0 的多播数据报限定到同一主机。
初始 TTL 为 1 的多播数据报限定到同一子网。
初始 TTL 为 32 的多播数据报限定到同一站点。
初始 TTL 为 64 的多播数据报限定到同一地区。
初始 TTL 为 128 的多播数据报限定到同一洲。
初始 TTL 为 255 的多播数据报没有限制。
Windows 组件对 IGMP 的使用
一些 Windows NT 和 Windows 2000 组件使用 IGMP。例如,默认情况下路由器发现使用多播。当定位复制伙伴时,WINS 服务器使用多播。

传输控制协议 (TCP)
TCP 给应用程序提供一个基于连接而可靠的字节流服务。Microsoft 网络借助于 TCP 传输进行登录、文件与打印共享、域控制器间的信息复制、浏览列表传输以及其它常用功能。它仅用于一对一通讯。

TCP 使用校验和检查每段的报头和负载,以减少网络损坏漏检的几率。NDIS 5.0 支持任务卸载,Windows 2000 TCP 通过允许 NIC 执行 TCP 校验和计算(如果 NIC 驱动程序支持)来使用这一功能。在高吞吐量环境中,卸载硬件的校验和计算可改善性能。Windows 2000 TCP 性能已得到加强,可抵御过去几年中出现的各种攻击,并进行了内部安全检查以增强防范未来攻击的能力。例如,已对初始序列号算法进行了修改,这样 ISN 使用基于 RC4 的随机数发生器(在系统启动时初始化了 2048 位随机密钥)自增随机增量。

TCP 接收窗口大小计算与窗口缩放 (RFC 1323)
TCP 接收窗口大小是指在连接上一次可以缓存的接收数据量(字节数)。在等待接收主机的确认以及窗口更新之前,发送主机仅能发送该数量的数据。在大多数环境中 Windows 2000 TCP/IP 栈可以自调整,并使用较以前版本更大的默认窗口。TCP 不使用硬编码的默认接收窗口大小,而是调整连接建立过程中协商的最大段大小 (MSS) 的偶数倍增量。将接收窗口大小与偶数倍 MSS 增量匹配,可提高批量数据传输过程中使用完整大小 TCP 段的百分比。

接收窗口大小默认值计算如下:

发送到远程主机的第一个连接请求发布接收窗口大小为 16 KB(16,384 字节)。
一旦建立连接后,接收窗口大小上舍入到最大 TCP 段大小的增量,它是在连接建立过程中协商后获得的。
如果它不足 MSS 的 4 倍,则将它调整为 MSS 的 4 倍,最大值为 64 KB,除非窗口缩放选项 (RFC 1323) 有效。
对于以太网,窗口通常设置为 17,520 字节(16 KB 向上舍入为 12 个 1460 字节的段)。有两种方法可以将接收窗口大小设置为指定值:

TcpWindowSize 注册表参数(参见附录 A)
Setsockopt Windows Sockets 函数(以每个套接字为基础)
为改善高带宽、高延迟网络的性能,Windows 2000 引入了可缩放的窗口支持 (RFC 1323)。该 RFC 详细介绍了实现可缩放窗口支持的方法,即允许 TCP 在连接建立时协商窗口大小的缩放因子。它允许实际接收窗口大小高达 1 GB。RFC 1323 2.2 节给出了很好的说明:

3 字节的窗口缩放选项可以由 TCP 在 SYN 段中进行发送。这有两个目的:1. 表明 TCP 已准备好缩放发送和接收窗口。2. 协商的缩放因子可用到其接收窗口。这样,已准备好缩放窗口的 TCP 应发送该选项,即使其自身的缩放因子为 1。缩放因子只能是 2 的幂数并按对数进行编码,因此它可以由二进制转换运算实现。

TCP Window Scale Option (WSopt):
Kind: 3 Length: 3 bytes
+---------+---------+---------+
| Kind=3 |Length=3 |shift.cnt|
+---------+---------+---------+

该选项仅供参考;双方必须在它们的 SYN 段中发送窗口缩放选项,以便任一方均可使用窗口缩放。如果启用窗口缩放,那么发送该选项的 TCP 将其真实接收窗口值右移‘shift.cnt’位(在 SEG.WND 中传输的)。shift.cnt 值可以是零(参考值,此时接收窗口的缩放因子为 1)。

该选项可以在初始的 <SYN> 段中进行发送,换句话说,段的 SYN 位打开,ACK 位关闭。也可以在 <SYN,ACK> 段中进行发送(仅在初始 <SYN> 段收到“窗口缩放”选项时才可以)。段中不带 SYN 位的“窗口缩放”选项可忽略。

在 SYN 中的窗口字段(换句话说,<SYN> 或 <SYN,ACK>)段自身从不缩放。

阅读支持缩放窗口的两台计算机建立连接的网络跟踪结果时,切记跟踪中发布的窗口大小一定已按协商的缩放因子缩放了。缩放因子可以在连接建立(三路握手)数据包中找到,如下列网络监视器捕获结果所示:

*************************************************************************
**************************
Src Addr Dst Addr Protocol Description
THEMACS1 NTBUILDS TCP ....S., len:0, seq:725163-725163,
ack:0, win:65535, src:1217 dst:139
+ FRAME: Base frame properties
+ ETHERNET: ETYPE = 0x0800 : Protocol = IP: DOD Internet
Protocol
+ IP: ID = 0xB908; Proto = TCP; Len: 64
TCP: ....S., len:0, seq:725163-725163, ack:0, win:65535,
src:1217 dst:139 (NBT Session)
TCP: Source Port = 0x04C1
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 725163 (0xB10AB)
TCP: Acknowledgement Number = 0 (0x0)
TCP: Data Offset = 44 (0x2C)
TCP: Reserved = 0 (0x0000)
+ TCP: Flags = 0x02 : ....S.
TCP: Window = 65535 (0xFFFF)
TCP: Checksum = 0x8565
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
+ TCP: Maximum Segment Size Option
TCP: Option Nop = 1 (0x1)
TCP: Window Scale Option
TCP: Option Type = Window Scale
TCP: Option Length = 3 (0x3)
TCP: Window Scale = 5 (0x5)
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: Timestamps Option
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: SACK Permitted Option
00000: 8C 04 C8 BD A3 82 00 00 50 7D 83 80 08 00 45 00 ........P}....E.
00010: 00 40 B9 08 40 00 80 06 A7 1A 9D 36 15 FD AC 1F .@..@......6....
00020: 3B 42 04 C1 00 8B 00 0B 10 AB 00 00 00 00 B0 02 ;B..............
00030: FF FF 85 65 00 00 02 04 05 B4 01 03 03 05 01 01 ...e............
00040: 08 0A 00 00 00 00 00 00 00 00 01 01 04 02 ..............
*************************************************************************
**************************

发送上述数据包的计算机提供“窗口缩放”选项,其缩放因子为 5。如果目标计算机响应,并在 SYN-ACK 中接受“窗口缩放”选项,那么可以理解,该计算机发布的任何 TCP 窗口需要从该点左移 5 位(SYN 自身不缩放)。例如,如果计算机第一次数据发送时发布 32 KB 窗口,则该数值需左移 5 位(从右边移到 0 位),如下所示:

32Kbytes = 0x7fff = 111 1111 1111 1111
Left-shift 5 bits = 1111 1111 1111 1110 0000 = 0xffffe (1,048,544
bytes)
As a check, left-shifting a number 5 bits is equivalent to
multiplying it by 25, or 32. 32767 * 32 = 1,048,544

缩放因子不一定是对称的,所以数据流的两个方向上可能会不同。

如果将 TcpWindowSize 值设置为大于 64 KB,且将 Tcp1323Opts 注册表参数设置适当,Windows 2000 就会自动使用窗口缩放。有关设置该参数的详细信息,请参见附录 A。

延迟确认
正如在 RFC 1122 所述,TCP 使用延迟确认 (ACK),以便减少媒体上发送数据包的数量。Microsoft TCP/IP 栈采用通用的方法实现延迟 ACK。由于在连接中由 TCP 接收数据,如果满足下列条件之一,则仅发回一个确认:

上一个收到的段没有发送 ACK。
收到一个段,但是在 200 毫秒之内该连接没有任何段到达。
总之,对于连接上收到 TCP 段,每隔一个段发送一个 ACK,除非延迟 ACK 计时器(200 毫秒)时间已到。可修改 TcpDelAckTicks 注册表参数调整 ACK 计时器,该参数是 Windows 2000 的新增功能。

TCP 选择性确认 (RFC 2018)
Windows 2000 引入了一个重要的性能特性,称为“选择性确认”(SACK)。对于使用大 TCP 窗口的连接来说,SACK 尤其重要。在使用 SACK 之前,接收者仅能确认收到的连续数据的最新序号,或接收窗口的左边沿。启用 SACK 时,接收者继续使用 ACK 编号确认接收窗口的左边沿,但是它也可以分别确认收到的其它非相邻数据块。SACK 使用 TCP 报头选项,如下所示。该内容节选自 RFC 2018:

Sack 许可选项

此 2 字节选项可以放在 SYN 中由 TCP 发送,其功能已得到扩展,当连接打开后可接收(并可能处理)SACK 选项。该选项不可放在非 SYN 段上发送。

TCP Sack-Permitted Option:
Kind: 4
+---------+---------+
| Kind=4 | Length=2|
+---------+---------+

Sack Option Format

SACK 选项用于在建立的 TCP 连接上发送接收者的扩展确认信息。

TCP SACK Option:
Kind: 5
Length: Variable
+--------+--------+
| Kind=5 | Length |
+--------+--------+--------+--------+
| Left Edge of 1st Block |
+--------+--------+--------+--------+
| Right Edge of 1st Block |
+--------+--------+--------+--------+
| |
/ . . . /
| |
+--------+--------+--------+--------+
| Left Edge of nth Block |
+--------+--------+--------+--------+
| Right Edge of nth Block |
+--------+--------+--------+--------+

启用 SACK 时(默认选项),可能会丢失一个数据包或多个数据包,接收者可以确切通知发送者收到了哪些数据,以及数据在哪(洞)丢失的。然后发送者有选择地重新发送丢失的数据,而无须重发已成功收到的数据块。SACK 是由 SackOpts 注册表参数控制的。下面的网络监视器捕获结果表明,主机确认了序号在 54857341 以下以及在 54858789-54861685 之间的数据。

+ FRAME: Base frame properties
+ ETHERNET: ETYPE = 0x0800 : Protocol = IP: DOD Internet Protocol
+ IP: ID = 0x1A0D; Proto = TCP; Len: 64
TCP: .A...., len:0, seq:925104-925104, ack:54857341, win:32722,
src:1242 dst:139
TCP: Source Port = 0x04DA
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 925104 (0xE1DB0)
TCP: Acknowledgement Number = 54857341 (0x3450E7D)
TCP: Data Offset = 44 (0x2C)
TCP: Reserved = 0 (0x0000)
+ TCP: Flags = 0x10 : .A....
TCP: Window = 32722 (0x7FD2)
TCP: Checksum = 0x4A72
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
+ TCP: Timestamps Option
TCP: Option Nop = 1 (0x1)
TCP: Option Nop = 1 (0x1)
TCP: SACK Option
TCP: Option Type = 0x05
TCP: Option Length = 10 (0xA)
TCP: Left Edge of Block = 54858789 (0x3451425)
TCP: Right Edge of Block = 54861685 (0x3451F75)

TCP 时间戳 (RFC 1323)
支持 TCP 时间戳是 Windows 2000 中引入的另一个 RFC 1323 功能。与 SACK 一样,时间戳对于使用大窗口的连接是很重要的。时间戳有助于 TCP 精确测量往返时间 (RTT),以便调整重新传输的超时数。用于时间戳的 TCP 报头选项如下所示(节选自 RFC 1323):

TCP Timestamps Option (TSopt):

Kind: 8
Length: 10 bytes
+-------+-------+---------------------+---------------------+
|Kind=8 | 10 | TS Value (TSval) |TS Echo Reply (TSecr)|
+-------+-------+---------------------+---------------------+
1 1 4 4

时间戳选项带有两个 4 字节时间戳字段。时间戳数值字段 (TSval) 包含发送该选项的 TCP 时间戳时钟的当前数值。

时间戳回应回复字段 (TSecr) 仅当 TCP 报头中设置了 ACK 位时才有效;如果有效,则它回应远程 TCP 在时间戳选项 TSval 字段中发送的时间戳值。当 TSecr 无效时,其值必须为零。TSecr 值一般取自收到的最新时间戳选项;但是也有一些例外。

TCP 可能在初始 <SYN> 段中发送时间戳选项 (Tsopt),此段包含 SYN 位但不包含 ACK 位,并且仅当它收到连接上初始 <SYN> 段的 TSopt 时,才可以在其它段中发送 Tsopt。”

通过展开 TCP 选项字段,可以在网络监视器捕获结果中查看时间戳选项字段,如下所示:

TCP: Timestamps Option
TCP: Option Type = Timestamps
TCP: Option Length = 10 (0xA)
TCP: Timestamp = 2525186 (0x268802)
TCP: Reply Timestamp = 1823192 (0x1BD1D8)

在默认情况下,禁用时间戳。可以使用 Tcp1323Opts 注册表参数启用时间戳,请参阅附录 A。

路径最大传输单位 (PMTU) 发现
PMTU 发现是在 RFC 1191 中定义的。当两个主机建立连接时,彼此交换它们的 TCP 最大段大小 (MSS) 数值。较小的 MSS 数值用于连接。过去,主机的 MSS 比链接层的 MTU 少 40 个字节,这些字节用于 IP 和 TCP 报头。但是,对时间戳等其它 TCP 选项的支持功能,已使典型 TCP+IP 报头增加到 52 个字节或更多。


图 3 MTU/MSS

当 TCP 段要发往非本地网络时,就会在 IP 报头设置 Don't Fragment 位。路径上的路由器或媒体的 MTU 可能与两个主机的 MTU 不同。对于要路由的 IP 数据包来说,媒体段的 MTU 太小,则路由器就要将数据报相应地进行分片。然后,它发现在 IP 报头中已设置 Don't Fragment 位。此时,路由器应通知发送主机不进行分片,就不能进一步转发数据报。这是通过发送 ICMP Destination Unreachable Fragmentation Needed 和 DF Set 消息完成的。多数路由器也为下一个跃点指定 MTU,方法是将数值放在 ICMP 报头字段的低 16 位(RFC 792 中不使用)。有关该消息的格式,请参见 RFC 1191 第 4 节。接收到 ICMP 错误消息后,TCP 将连接的 MSS 调整为指定的 MTU 减去 TCP 和 IP 报头大小之和,这样,在连接上随后发送的数据包就不会大于最大值,不用分片就可以通过路径。

备注 允许的最小 MTU 为 88 个字节,且 Windows 2000 TCP 加强了该限制。

一些非兼容路由器可能会不经询问就丢弃无法分片的 IP 数据报,或者没有正确报告它们的下一个跃点 MTU。如果发生这种情况,可能有必要修改 PMTU 检测算法的配置。在 Windows 2000 中,可以修改 TCP/IP 栈的两个注册表,以解决这些设备故障。在附录 A 中对这些注册表项进行了详细说明:

EnablePMTUBHDetect - 调整 PMTU 发现算法,以便检测黑洞路由器。在默认情况下,禁止使用黑洞检测。
EnablePMTUDiscovery - 完全启用或禁用 PMTU 发现机制。禁用 PMTU 发现时,536 字节的 MSS 用于所有非本地目标地址。在默认情况下,PMTU 发现可以使用。
两个主机间的 PMTU 可以使用带 -f (don't fragment) 开关的 ping 命令手动发现,如下所示:

ping -f -n <number of pings> -l <size> <destination ip address>

正如下面示例中所示,size 参数在找到 MTU 之前可以修改。ping 使用的 size 参数是要发送的数据缓冲区的大小,不包括报头。ICMP 报头使用 8 个字节,IP 报头通常为 20 个字节。在下面的情况中(以太网),链接层 MTU 等于最大 ping 缓冲区加上 28,或者是 1500 个字节:

C:\>ping -f -n 1 -l 1472 10.99.99.10

Pinging 10.99.99.10 with 1472 bytes of data:

Reply from 10.99.99.10: bytes=1472 time<10ms TTL=128

>Ping statistics for 10.99.99.10:

Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms
C:\>ping -f -n 1 -l 1473 10.99.99.10

Pinging 10.99.99.10 with 1473 bytes of data:

Packet needs to be fragmented but DF set.

Ping statistics for 10.99.99.10:

Packets: Sent = 1, Received = 0, Lost = 1 (100% loss),

Approximate round trip times in milliseconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms

在上面的示例中,IP 层返回一条 ping 解释的 ICMP 错误消息。如果路由器是一个黑洞路由器,只要超出该路由器可处理的 MTU 大小,就不对 ping 作出应答。可以按这种方式使用 ping 检测此类路由器。

下面给出了一个示例 ICMP Destination unreachable 错误消息:

******************************************************************************
Src Addr Dst Addr Protocol Description
10.99.99.10 10.99.99.9 ICMP Destination Unreachable: 10.99.99.10
See frame 3
+ FRAME: Base frame properties
+ ETHERNET: ETYPE = 0x0800 : Protocol = IP: DOD Internet Protocol
+ IP: ID = 0x4401; Proto = ICMP; Len: 56
ICMP: Destination Unreachable: 10.99.99.10 See frame 3
ICMP: Packet Type = Destination Unreachable
ICMP: Unreachable Code = Fragmentation Needed, DF Flag Set
ICMP: Checksum = 0xA05B
ICMP: Next Hop MTU = 576 (0x240)
ICMP: Data: Number of data bytes remaining = 28 (0x001C)
ICMP: Description of original IP frame
ICMP: (IP) Version = 4 (0x4)
ICMP: (IP) Header Length = 20 (0x14)
ICMP: (IP) Service Type = 0 (0x0)
ICMP: Precedence = Routine
ICMP: ...0.... = Normal Delay
ICMP: ....0... = Normal Throughput
ICMP: .....0.. = Normal Reliability
ICMP: (IP) Total Length = 1028 (0x404)
ICMP: (IP) Identification = 45825 (0xB301)
ICMP: Flags Summary = 2 (0x2)
ICMP: .......0 = Last fragment in datagram
ICMP: ......1. = Cannot fragment datagram
ICMP: (IP) Fragment Offset = 0 (0x0) bytes
ICMP: (IP) Time to Live = 32 (0x20)
ICMP: (IP) Protocol = ICMP - Internet Control Message
ICMP: (IP) Checksum = 0xC91E
ICMP: (IP) Source Address = 10.99.99.9
ICMP: (IP) Destination Address = 10.99.99.10
ICMP: (IP) Data: Number of data bytes remaining = 8 (0x0008)
ICMP: Description of original ICMP frame
ICMP: Checksum = 0xBC5F
ICMP: Identifier = 256 (0x100)
ICMP: Sequence Number = 38144 (0x9500)
00000: 00 AA 00 4B B1 47 00 AA 00 3E 52 EF 08 00 45 00 ...K.G...>R...E.
00010: 00 38 44 01 00 00 80 01 1B EB 0A 63 63 0A 0A 63 .8D........cc..c
00020: 63 09 03 04 A0 5B 00 00 02 40 45 00 04 04 B3 01 c....[...@E.....
00030: 40 00 20 01 C9 1E 0A 63 63 09 0A 63 63 0A 08 00 @. ....cc..cc...
00040: BC 5F 01 00 95 00

该错误是由于在基于以太网的主机上使用 ping -f -n 1 -l 1000 命令,通过仅支持 576 字节 MTU 的路由器接口发送大的数据报造成的。当路由器试图将大的帧放到 MTU 较小的网络上时,它发现不允许分片。因此,它返回表明可以转发的最大数据报为 0x240 或 576 字节的错误消息。

间隔网关检测
使用间隔网关检测,TCP 可以检测默认网关故障并调整 IP 路由表以便使用其它默认网关。Microsoft TCP/IP 栈使用 RFC 816 中所述的触发重选方法,并根据用户经验和反馈做了少许改动。

当通过默认网关路由的 TCP 连接向目标地址多次(等于 TcpMaxDataRetransmissions 注册项的一半)发送 TCP 数据包而未收到响应时,该算法就会修改远程 IP 地址的路由缓存项 (RCE),以使用列表中的下一个默认网关。当 25% TCP 连接被移到下一个默认网关时,该算法建议 IP 将计算机的默认网关改为当前连接正在使用的网关。

例如,假设当前有到 11 个不同的 IP 地址的 TCP 连接,这些 IP 地址是经默认网关路由的。现在假设默认网关有故障,并且配置了第 2 个默认网关,TcpMaxDataRetransmissions 默认值为 5。

当第 1 个 TCP 连接试图发送数据时,它没有收到任何确认。第 3 次重新传输后,该远程 IP 地址的 RCE 就被切换到列表中的下一个默认网关。此时,到某个远程 IP 地址的 TCP 连接已切换到新的默认网关,但剩余连接仍试图使用原先的默认网关。

当第 2 个 TCP 连接试图发送数据时,发生相同的情况。现在,11 个 RCE 中已有 2 个指向新网关。

当第 3 个 TCP 连接试图发送数据时,第 3 次重新传输后,11 个 RCE 中已有 3 个已被切换到第 2 个默认网关。因为此时超过 25% 的 RCE 已转移,所以整个计算机的默认网关就移到新网关。

计算机的默认网关仍作为主要网关直到出现故障(间隔网关算法就会再查找表中的下一个网关)或者计算机重新启动为止。

当搜索到达表中的最后一个网关时,它返回到表的起点。

TCP 重新传输行为
当每个出站段被下传至 IP 时,TCP 就启动重新传输计时器。如果在计时器超时之前,且没有收到给定段中数据的确认,则重新传输该数据段。对于新的连接请求,重新传输计时器初始化为 3 秒(可用每个适配器注册表参数 TcpInitialRtt 控制),且请求 (SYN)重新发送的次数不超过 TcpMaxConnectRetransmissions 指定的值(windows2000 的默认值是 2 次)。对于现有的连接,重新传输次数由 TcpMaxDataRetransmissions 注册表参数控制(默认值为 5)。根据连接的不同特点,可使用平滑往返时间 (SRTT)计算,动态地调整重传超时,Van Jacobson 的 Congestion Avoidance and Control 一文中对 SRTT 进行了阐述。每次该段重新传输后,给定段的计时器时间加倍。使用该算法,TCP 将自身调整到正常的连接延迟。基于高延迟链接的 TCP 连接超时时间比那些基于低延迟链接的连接要长。4

下面摘录的跟踪结果给出了同一子网上通过以太网连接的两个主机之间重新传输的算法。当接收主机从网络上断开连接时,FTP 文件传送正在进行。因为该连接的 SRTT 值很小,所以约半秒钟之后进行第一次重新传输。此后的每次重新传输后,计时器加倍。第五次重新传输之后,计时器再次加倍,如果在超时之前没有收到确认,连接就告失败。

delta source ip dest ip pro flags description
0.000 10.57.10.32 10.57.9.138 TCP .A.., len: 1460, seq: 8043781, ack: 8153124, win: 8760
0.521 10.57.10.32 10.57.9.138 TCP .A.., len: 1460, seq: 8043781, ack: 8153124, win: 8760
1.001 10.57.10.32 10.57.9.138 TCP .A.., len: 1460, seq: 8043781, ack: 8153124, win: 8760
2.003 10.57.10.32 10.57.9.138 TCP .A.., len: 1460, seq: 8043781, ack: 8153124, win: 8760
4.007 10.57.10.32 10.57.9.138 TCP .A.., len: 1460, seq: 8043781, ack: 8153124, win: 8760
8.130 10.57.10.32 10.57.9.138 TCP .A.., len: 1460, seq: 8043781, ack: 8153124, win: 8760

在有些情况下,TCP 会在重新传输计时器到时间之前重新传输数据。其中,“快速重传”功能引起的提前重新传输最为常见。当支持快速重传的接收者收到的数据序号不是预期值时,它会认为一些数据被丢弃。要使发送者得知该事件,接收者立即发送一个 ACK,且该 ACK 号设置为它预期的序号。对于每个附加 TCP 段,如果包含传入流中丢失数据之后的数据,接收者将持续发送此 ACK。当发送者接收到确认相同序号的 ACK 流,但序号比正在发送的序号要早时,它就可以推判出有一个或多个段被丢弃。支持快速重传算法的发送者立刻重传该段,使接收者填补数据的空缺,而不是等到该段重传计时器到期时才重传。这种优化大大提高了繁忙网络环境中的性能。

默认情况下,如果 Windows 2000 收到对同一序号的三次 ACK,且该序号滞后当前值,就会重传该段。这是使用 TcpMaxDupAcks 注册表参数控制的。另请参见本文的“TCP 选择性确认 (RFC 2018)”一节。

TCP 保留消息
TCP 保留数据包就是一个 ACK,其序号比连接的当前序号小 1。接收到其中一个 ACK 的主机用带有当前序号的 ACK 应答。保留消息可以用于验证连接的远端计算机是否仍可用。如果在 TCP 连接上没有其它数据或其它更高等级的保留消息传送的话,TCP 保留消息将每隔 KeepAliveTime(默认值是 7,200,000 毫秒或两小时)发送一次。如果对保留消息没有响应,它每隔 KeepAliveInterval 秒重复一次。KeepAliveInterval 默认值为 1 秒。NetBT 连接(如许多 Microsoft 网络组件使用的连接)对 NetBIOS 保留消息的发送更为频繁,所以通常在 NetBIOS 连接上不发送 TCP 保留消息。默认情况下,禁用 TCP 保留消息,但是 Windows Sockets 应用程序可以用 setsockopt 函数启用它们。

慢速启动算法和阻塞避免
连接建立之后,TCP 开始会慢慢启动以估算连接的带宽,避免路径上的接收主机、任何其它设备或链接的溢出。发送窗口设置为 2 个 TCP 段,如果被确认,就增加为 3 个段。5如果它们再次被确认,段数就继续增加,直到每次成组发送的数据量达到远程主机接收窗口的大小。此时,慢速启动算法就不再使用,而由接收窗口控制数据流。但是,在传输过程中,连接上仍会随时发生阻塞。如果发生这种情况(表现为需重新传输),则使用阻塞避免算法暂时减小发送窗口的大小,再逐步增大到接收窗口的大小。在 RFC 1122 和 RFC 2581 中对慢速启动和阻塞避免进行了详细的讨论。

低能窗口综合症 (SWS)
低能窗口综合症在 RFC 1122 中描述如下:

简而言之,当接收者有新的可用缓冲区接收数据而超过窗口右边界时,或者由于发送者使用增量窗口(不管有多小)发送更多的数据 [TCP:5] 时,就会引起 SWS。结果可能会造成持续发送小的数据段,即使发送者和接收者在连接上总缓冲区空间很大。

正如 RFC 1122 所述,Windows 2000 TCP/IP 在接收端通知其有足够的窗口大小来发送一个完整 TCP 段之前,不再进一步发送数据,从而可避免 SWS。接收端通过不打开增量小于一个 TCP 段的接收窗口,也可避免 SWS。

Nagle 算法
Windows NT 和 Windows 2000 的 TCP/IP 实现了 Nagle 算法(参阅 RFC 896)。该算法的目的在于减小发送很小段的数量,尤其是在高延迟(远程)链接上。Nagle 算法一次仅允许一个小段等待确认。如果第一个小段等待 ACK 时,又生成更多的小段,则这些小段合并为一个大段。假设有足够的接收窗口可用,则所有完整段总是立刻被发送。Nagle 算法可有效地减少 Telnet 等交互应用程序发送数据包的数量,尤其是通过慢速链接发送。

Nagle 算法可在下面 Microsoft 网络监视器捕获的跟踪中看到。该跟踪是以 9600 BPS 速率使用 PPP 拨入 Internet 提供商时捕获的。先建立一个 Telnet(字符模式)会话,然后在 Windows NT 工作站上按下 Y 键。在所有时间里,只发送一个段,后面的 Y 字符由栈保存,直到收到前一个段的确认为止。在本例中,每次有 3-4 个 Y 字符被放在缓冲区中,然后在一个数据段中一起发送。Nagle 算法大大节省了发送数据包的数量,数据包数量减少了 3 倍。

Time Source IP Dest IP Prot Description
0.644 204.182.66.83 199.181.164.4 TELNET To Server Port = 1901
0.144 199.181.164.4 204.182.66.83 TELNET To Client Port = 1901
0.000 204.182.66.83 199.181.164.4 TELNET To Server Port = 1901
0.145 199.181.164.4 204.182.66.83 TELNET To Client Port = 1901
0.000 204.182.66.83 199.181.164.4 TELNET To Server Port = 1901
0.144 199.181.164.4 204.182.66.83 TELNET To Client Port = 1901
. . .

每个段均包含多个 Y 字符。下面列出了第一段的更完整分析,数据部分按十六进制形式显示在底端。

***********************************************************************
Time Source IP Dest IP Prot Description
0.644 204.182.66.83 199.181.164.4 TELNET To Server Port = 1901
+ FRAME: Base frame properties
+ ETHERNET: ETYPE = 0x0800 : Protocol = IP: DOD Internet Protocol
+ IP: ID = 0xEA83; Proto = TCP; Len: 43
+ TCP: .AP..., len: 3, seq:1032660278, ack: 353339017, win: 7766,
src: 1901 dst: 23 (TELNET)
TELNET: To Server From Port = 1901
TELNET: Telnet Data
D2 41 53 48 00 00 52 41 53 48 00 00 08 00 45 00 .ASH..RASH....E.
00 2B EA 83 40 00 20 06 F5 85 CC B6 42 53 C7 B5 .+..@. .....BS..
A4 04 07 6D 00 17 3D 8D 25 36 15 0F 86 89 50 18 ...m..=.%6....P.
1E 56 1E 56 00 00 79 79 79 .V.V..yyy
^^^
data

Windows Sockets 应用程序可通过设置 TCP_NODELAY 套接字选项,禁止使用其连接的 Nagle 算法。但应避免这样做,除非确实必要,因为 Nagle 算法可提高网络的使用率。如果在设计中未考虑到发送大量小数据包所带来的后果,也未考虑使用 Nagle 算法,那么这些网络的性能就会很差。出于性能方面的原因,Nagle 算法不适用于环回 TCP 连接。Windows 2000 Netbt 禁止在 TCP 上的 NetBIOS 连接以及直接宿主重定向器/服务器连接上使用 Nagling 算法,这可改善那些发送大量小文件处理命令的应用程序的性能。例如,那些频繁使用文件锁定/解锁的应用程序。

TCP TIME-WAIT 延迟
断开 TCP 连接时,套接字对被置于一种称为 TIME-WAIT 的状态。这样,新的连接不会使用相同的协议、源 IP 地址、目标 IP 地址、源端口和目标端口,直到经过足够长的时间后,确保任何可能被错误路由或延迟的段没有被异常传送。在 RFC 793 中,将这种套接字对不被其它连接重新使用的时间长度指定为 2 个 MSL(最大段生存时间的 2 倍)或 4 分钟。对于 Windows NT 和 Windows 2000 来说,这是默认设置。然而,在此默认设置下,某些网络应用程序在很短时间内执行多个出站连接,就可能会在端口收回前用完所有的可用端口。

Windows NT 和 Windows 2000 提供两种方法来控制这种情况。第一种方法是使用 TcpTimedWaitDelay 注册表参数,改变该数值。对于 Windows NT 和 Windows 2000,其值最低可设置为 30 秒,这样在大多数情况下不会出现问题。每二种方法是使用 MaxUserPorts 注册表参数,来配置用户可访问的临时端口数(用作出站连接的源端口)。默认情况下,当应用程序从系统请求任何套接字用于出站调用时,就会提供一个数值在 1024 到 5000 之间的端口。MaxUserPorts 参数可用于设置管理员所允许的出站连接的最大端口值。例如,将该值设置为 10,000(十进制),就会有约 9000 个用户端口可用于出站连接。关于这一概念的详细信息,请参见 RFC 793,也可参见 MaxFreeTcbs 和 MaxHashTableSize 注册表参数。

多宿主计算机的 TCP 连接
当 TCP 连接到多宿主主机时,WINS 客户机和域名解析服务器(DNR)就会确定名称服务器提供的任何目标 IP 地址是否与本地算机的某个接口位于同一子网上。如果位于同一子网上,则这些地址被排到列表的顶部,这样,应用程序可以处理这些地址,然后再处理那些不在同一子网上的地址。如果这些地址均不与本地计算机在同一子网上,则采取的操作视名称空间的不同而有所不同。PrioritizeRecordData TCP/IP 注册表参数可用于禁止 DNR 组件将本地子网地址排在列表的顶部。

在 WINS 名称空间中,客户机负责对所提供地址随机排列或平衡负载。WINS 服务器总是按相同顺序返回地址列表,WINS 客户从中为每个连接随机挑选一个地址。

在 DNS 名称空间中,DNS 服务器通常按照循环方式来提供地址。DNR 不对地址作进一步的随机排列。某些情况下,希望连接到多宿主计算机的指定接口上。最好的实现方法是给接口提供它自己的 DNS 项。例如,名为 raincity 的计算机可能有一个列出两个 IP 地址(实际上是 DNS 中名称相同的两个不同的记录)的 DNS 项,并在 DNS 中记录为 raincity1 和 raincity2,每个记录分别与该计算机分配的一个 IP 地址关联。

当 TCP 连接来自一个多宿主主机时,情况就更加复杂。如果连接是使用 DNS 名称空间的 Winsock 连接,则一旦连接的目标 IP 地址已知,TCP 就会从可用的最佳 IP 地址中进行连接。另外,路由表用于地址选择决策。如果本地计算机上有一个接口与目标 IP 地址在同一子网上,则它的 IP 地址用作连接请求的源地址。如果没有最佳源 IP 地址可供使用,系统就会随机地选择一个。

如果连接是基于 NetBIOS 的连接(使用重定向器),在应用程序一级几乎没有路由信息。NetBIOS 接口支持基于各种协议的连接,但不支持 IP 协议。相反,重定向器调用绑定的所有传输。如果计算机中有两个接口,但只装了一个协议,那么对重定向器就有两个传输可用。两个传输都可调用,NetBT 使用每个接口的 IP 地址向栈发送连接请求。有可能两个调用都会成功。如果是这样,重定向器就会取消其中一个。取消哪一个调用取决于重定向器注册表 ObeyBindingOrder 的值6。如果该参数设置为 0(默认值),那么首选主传输(取决于绑定顺序),直到主传输超时,重定向器才能选择次要传输。如果该参数设置为 1,则忽略绑定顺序,重定向器接受成功的第一个连接而取消其它连接。

吞吐量考虑
TCP 可为各种链接条件提供最优的性能,Windows 2000 还包含了一些改进功能,如对 RFC 1323 的支持。链接的实际吞吐量取决于很多因素,但是最重要的因素是:

链接速度(每秒钟传输的比特数)
传播延迟
窗口大小(在 TCP 连接上未确认的数据量)
链接可靠性
网络和中间设备的阻塞
路径 MTU
W. Richard Stevens7 所著的 TCP/IP Illustrated 第 20-24 章中对 TCP 吞吐量计算进行了详细的讨论。以下列出了一些要点:

管道的容量等于带宽乘以往返时间。这称为“带宽-延迟乘积”。如果该链接可靠,要获得最佳性能,窗口大小应大于或等于管道容量,这样发送的栈才能将管道填满。因为在 TCP 报头中窗口大小为一个 16 位字段,所以可指定的最大窗口大小为 65535,但要获得更大的窗口,可使用本文前面提到的窗口缩放来协商。请参见附录 A 中的 TcpWindowSize。
吞吐量不能超过窗口大小/往返时间的比值。
如果链接不可靠或者严重阻塞,并发生数据包丢失,那么使用较大的窗口可能并不会提高吞吐量。除支持窗口缩放处,Widnows 2000 还支持选择性确认(SACK,参阅 RFC 2018),以便改善发生数据包丢失环境中的性能。它还支持时间戳(参阅 RFC 1323)。
传播延迟取决于光速、传输设备的延迟等等。
传输延迟取决于媒体的传输速率。
对于指定路径,传播延迟是固定的,但是传输延迟取决于数据包的大小。
在低速率下,传输延迟是限制性因素。在高速率下,传播延迟变成限制性因素。
总之,Windows NT 和 Windows 2000 TCP/IP 可以适应大多数网络条件,并可在每个连接上动态提供最优的吞吐量和可靠性。手动调整通常是不可行的,除非有资深网络工程师先对数据流作一番仔细的研究。

用户数据报协议 (UDP)
UDP 提供无连接、不可靠的传输服务。它通常用于使用广播或多播 IP 数据报的通讯。因为 UDP 数据包的传送是没有保证的,所以如果需要的话,使用 UDP 的应用程序必须使用它们自己的机制提供可靠性。Microsoft 网络使用 UDP 进行登录、浏览和名称解析。UDP 也可用于传送 IP 多播流。

UDP 和名称解析
UDP 可用于 NetBIOS 名称解析(通过单播到 NetBIOS 名称服务器或子网广播);UDP 还用于将 DNS 主机名称解析到 IP 地址。NetBIOS 名称解析是在 UDP 端口 137 上实现的。DNS 查询使用 UDP 端口 53。因为 UDP 自身不能保证数据包的传送,所以如果它们没有收到查询应答时,这些服务就会使用它们自己的重新传输机制。广播 UDP 数据报通常不通过 IP 路由器转发,因此在路由环境中的 NetBIOS 名称解析需要某些类型的名称服务器,或使用静态数据库文件。

基于 UDP 的邮筒
许多 NetBIOS 应用程序使用“邮筒”消息。二级邮筒是一个简单机制,即基于 UDP 将消息从一个 NetBIOS 名称服务器发送到另一个名称服务器。邮筒消息能在子网上广播,或者发送到远程主机。要将邮筒消息发送到另一台主机,必须有 NetBIOS 名称解析方法。为此,Microsoft 特提供 Windows Internet 名称服务器 (WINS)。

TCP/IP 上的 NetBIOS
在 Windows NT 和 Windows 2000 中,TCP/IP 上 NetBIOS 的实现称为 NetBT。NetBT 使用以下 TCP 和 UDP 端口:

UDP 端口 137(名称服务)
UDP 端口 138(数据报服务)
TCP 端口 139(会话服务)
在 RFC 1001 和 RFC 1002 中对 TCP/IP 上的 NetBIOS 进行了详细阐述。NetBT.sys 驱动程序是一个内核模式的组件,它支持传输驱动程序接口 (TDI)。使用 TDI 调用 NetBT 是比较困难的编程任务,但提供更高的性能,并且不受传统 NetBIOS 的限制。NetBIOS 概念将在本文“网络应用程序接口”一节作进一步讨论。

传输驱动程序接口 (TDI)
Microsoft 开发了传输驱动程序接口 (TDI),与现有的 NetBIOS 和 Windows Sockets 等接口相比,它提供了更大的灵活性和更好的功能。所有 Windows 传输提供程序们都支持 TDI。TDI 规范描述了传输驱动程序和 TDI 客户机通讯用到的一组基本功能以及访问它们所使用的调用机制。目前,TDI 仅用于内核模式。

Windows 2000 重定向器和服务器均直接使用 TDI,而不经过 NetBIOS 映射层。这样,它们就不再受 NetBIOS 的许多限制了,例如旧式的最多 254 个会话的限制。

TDI 功能
在所有 Windows 网络 API 中,TDI 可能是最难使用的一个。它是一种简单的管道,所以程序员必须确定消息的格式和含义。

TDI 包括以下功能:

大多数的 Windows NT和 Windows 2000 传输支持 TDI(但 DLC 不支持)
开放式命名和寻址方案
消息和流模式数据传输
异步操作
支持事件的主动指示
可扩展性,客户机可以向理解它们的传输驱动程序提交专有请求。
支持有限使用标准内核模式 I/O 函数,发送和接收数据。
32 位寻址与数值
支持 TDI 地址对象上的访问控制列表(ACL,用于安全性)
有关 TDI 的详细信息,可以从 Windows 2000 设备驱动程序包(DDK)中找到。

安全性考虑
当机器连接到公用网络上时,网络安全是管理员要考虑的一个重要的问题。Microsoft 的 TCP/IP 栈对许多攻击来说是坚不可摧的,并且在其默认状态中可抵御大多数的常见攻击。通过启用注册表中的 SynAttackProtect 项,可进一步加强对流行的“拒绝服务”攻击的防范。使用该注册表项,管理员可针对 SYN 攻击选择多个等级的保护。

下面是能减少遭受攻击的一般性原则:

禁用那些不必要的或者可选的服务(例如,在 IIS 服务器上的“Microsoft 网络用户”)。
启用 TCP/IP 筛选并仅限访问那些服务器所必需的端口。(有关 Windows 服务所使用的端口列表,请参见 Microsoft Knowledge Base 文章编号 Q150543<http://search.support.microsoft.com/kb/c.asp>。)
不需要时,不要绑定 TCP/IP 上的 NetBIOS
对公用适配器配置静态 IP 地址和参数
配置注册表设置以获得最大保护(参见附录 D)。
有关安全公告,请定期访问 Microsoft 安全 Web 站点:<http://www.microsoft.com/security/default.asp>。

网络应用程序接口
使用 TCP/IP 协议栈,网络应用程序可以有多种通讯方式。某些方法(如命名管道)要经过网络重定向器,它是 Workstation 服务的一部分。许多旧式应用程序是为 NetBIOS 接口编写,它是由TCP/IP 上的 NetBIOS 进行支持的。

目前,Windows Sockets 接口是很流行的。这里给出了 Windows Sockets 接口和 NetBIOS 接口的概述。

Windows Sockets
Windows Sockets 是一个编程接口,它是在加州大学伯克利分校开发的套接字接口的基础上定义的。它包括了一组扩展件,以充分利用 Microsoft Windows 消息驱动的特点。规范的 1.1 版是在 1993 年 1 月发行的,2.2.0 版在 1996 年 5 月发行。8 Windows 2000 支持 2.2 版,即通常所指的 Winsock2。

应用程序
目前有很多种 Windows Sockets 应用程序。许多与 Windows2000 一起发行的应用程序是基于 Windows Sockets 的,包括 FTP 和 DHCP 客户和服务器、Telnet 客户等等。还有一些借助于 Winsock 的高级编程接口,如 Internet Explorer 使用的 Windows Internet API (WinInet)。

名称和地址解析
Windows Sockets 应用程序通常使用 gethostbyname() 函数,将主机名称解析为 IP 地址。gethostbyname() 函数使用以下(默认)名称查询顺序:

检查本地主机,查找匹配名称
检查 hosts 文件,查找匹配的名称项
如果配置有域名服务器,就会向它查询。
如果未找到匹配名称,就尝试 NetBIOS 名称解析直到使用 DNS 解析为止。
某些应用程序使用 gethostbyaddr() 函数,将 IP 地址解析为主机名称。gethostbyaddr() 函数调用使用以下(默认)顺序:

检查 hosts 文件,查找匹配的地址项。
如果配置了域名服务器,就会向它查询。
向被查询的 IP 地址发送一个 NetBIOS 适配器状态请求。如果它作出响应,并给出该适配器注册的 NetBIOS 名称列表,则将其解析为计算机名称。
支持 IP 多播
Winsock2 支持 IP 多播。在 Windows Sockets 2.0 规范以及本文的 IGMP 一节对多播进行了阐述。目前,仅在 SOCK_DGRAM 和 SOCK_RAW 类型的 AF_INET 套接字上支持 IP 多播。

预备日志参数
Windows Sockets 服务器应用程序通常创建一个套接字,然后在其上使用 listen() 函数侦听连接请求。调用 listen() 函数时要传递的参数之一就是连接请求的预备日志,应用程序要求 Windows Sockets 对其进行排队。该数值控制未被接受的连接数(可以进行排队)。一旦应用程序“接受”一个连接,它就被移出连接请求的预备日志,不再计算在内。Windows Sockets 1.1 规范表明预备日志允许的最大值为 5;而 Windows NT 3.51 允许预备日志最大值为 100;Windows NT 4.0 和 Windows 2000 Server 则为 200;Windows NT 4.0 Workstation 和 Windows 2000 Professional 的值为 5(可减少内存需求)。

Push 位解释
默认情况下,当满足以下一个条件时,Windows 2000 TCP/IP 就会完成一次 recv() 调用:

到达的数据设置了 PUSH 位
用户 recv 缓冲区已满
在数据到达后已过了 0.5 秒
如果客户应用程序运行在一台计算机上,其 TCP/IP 实现没有将发送操作设置 PUSH 位,可能就会出现响应延迟。最好在客户机上进行纠正;但是将配置参数 (IgnorePushBitOnReceives) 添加到 Afd.sys 中,也可以强制它将所有到达的数据包当作 PUSH 位已设置来处理。该参数是 Windows NT 4.0 中的新增特性;在 Windows 2000 中也支持该参数。

TCP/IP 上的 NetBIOS
NetBIOS 定义了一个软件接口和命名规则,而不是一个协议。Microsoft 网络产品的早期版本仅向 NetBEUI 局域网协议提供 NetBIOS 应用程序编程接口。NetBEUI 是一个小型而快速的协议,它没有网络层;因此,它是不可路由的,通常不适用于 WAN 实现。NetBEUI 使用广播进行名称解析和服务查找。TCP/IP 上的 NetBIOS 提供 TCP/IP 协议上的 NetBIOS 编程接口,将 NetBIOS 客户和服务器程序的使用范围扩展到 WAN,并提供与各种操作系统的互操作性。

Workstation 服务、Server 服务、浏览器、Messenger 和 NetLogon 服务均是 NetBT(直接的)客户程序。这些服务使用 TDI(在本文前面已讲述)与 NetBT 进行通讯。Windows NT 和 Windows 2000 还包含一个 NetBIOS 仿真器。仿真器从 NetBIOS 应用程序中获取标准 NetBIOS 请求,并将它们解释为等同的 TDI 原语。

Windows 2000 仍然使用 TCP/IP 上的 NetBIOS 与 Windows NT 的早期版本或其它客户程序(如 Windows 95 )进行通讯。但是 Windows 2000 重定向器和服务器组件目前还支持“直接宿主”,与其它运行 Windows 2000 的计算机进行通讯。直接宿主使用 DNS 进行名称解析。不使用 NetBIOS 名称解析(WINS 或广播),并且协议更简单。直接宿主 TCP 使用端口 445,而不是 NetBIOS TCP 端口 139。

默认情况下,NetBIOS 和直接宿主均启用,当建立新的连接时,并行地使用这两种方式进行连接。连接最先成功的方式用于以后的其它连接。可以禁用 NetBIOS 支持以强制所有通信均使用直接宿主方式。

禁用 NetBIOS 支持

在开始菜单上,指向设置,然后单击网络和拨号连接。右键单击本地连接,然后单击属性。
选择 Internet 协议 (TCP/IP),然后单击属性。
单击高级。
单击 WINS 选项卡,然后选择禁用 TCP/IP 上的 NetBIOS。
此后,使用 NetBIOS 的应用程序和服务将不再可用,所以在禁用前要确认任何客户机和应用程序均不再需要 NetBIOS 支持是很重要的。例如,对于一台禁用 NetBIOS 的 Windows 2000 计算机,使用 Windows 2000 之前操作系统的计算机将不能浏览、定位或创建文件与打印共享连接。

NetBIOS 名称
NetBIOS 名称空间是没有层次的,这说明在名称空间中所有名称必须是唯一的。NetBIOS 名称长度为 16 位字符。资源是按 NetBIOS 名称来标识的,该名称是在计算机启动、服务或应用程序启动或用户登录时动态注册的。名称可以注册为唯一的(一个所有者)或组(多个所有者)名称。NetBIOS 名称查询通过将此名称解析为 IP 地址,来查找资源。

Microsoft 网络组件(如 Workstation 与 Server 服务)允许 NetBIOS 名称前 15 个字符由用户或管理员指定,但保留 NetBIOS 名称的第 16 位字符,用以标明资源类型(00-FF 十六进制)。许多主流第三方软件包也使用该字符标识并记录它们的特定服务。表 3 列出了一些 Microsoft 组件所使用的 NetBIOS 名称。

表 3 Microsoft 组件使用的 NetBIOS 名称示例 唯一的名称
服务

computer_name[00h]

Workstation 服务


computer_name[03h]

Messenger 服务


computer_name[06h]

RAS Server 服务


computer_name[1Fh]

NetDDE 服务


computer_name[20h]

Server 服务


computer_name[21h]

RAS Client 服务


computer_name[BEh]

网络监视器代理程序


computer_name[BFh]

网络监视器应用程序


user_name[03]

Messenger 服务


domain_name[1Dh]

主浏览器


domain_name[1Bh]

域主浏览器


组名
服务

domain_name[00h]

域名


domain_name[1Ch]

域控制器


domain_name[1Eh]

浏览器服务选择


\\--__MSBROWSE__[01h]

主浏览器




要查看计算机已注册哪些 NetBT 名称,在命令提示符下键入:

nbtstat -n

在计算机启动后,Windows 2000 允许使用名称服务器重新注册名称。要重新注册,在命令提示符下键入:

nbtstat -RR

NetBIOS 名称注册与解析
Windows TCP/IP 系统使用几种方法查找 NetBIOS 资源:

NetBIOS 名称缓存
NetBIOS 名称服务器
IP 子网广播
静态 Lmhosts 文件
本地主机名称(可选,取决于 EnableDns 注册表参数)
静态 hosts 文件(可选,取决于 EnableDns 注册表参数)
DNS 服务器(可选,取决于 EnableDns 注册表参数)
NetBIOS 名称解析顺序取决于节点类型与系统配置。它支持以下节点类型:

B 节点,它使用广播进行名称注册与解析。
P 节点,它使用 NetBIOS 名称服务器 (WINS) 进行名称注册与解析。
M 节点,它使用广播进行名称注册。对于名称解析,它首先使用广播,如果没有收到应答,则切换到 P 节点。
H 节点,它使用 NetBIOS 名称服务器进行注册与解析。但是,如果找不到名称服务器,则切换到 B 节点。它继续对名称服务器进行轮询,当名称服务器可用时就切换到 P 节点。
Microsoft 增强节点,除标准节点类型外,它还使用本地 Lmhosts 文件或 WINS 代理以及 Windows Sockets gethostbyname 调用(使用标准 DNS 和/或本地 hosts 文件)。
Microsoft 发布了一个 NetBIOS 名称服务器,称为 Windows Internet 命名服务 (WINS)。多数 WINS 客户设置为 H 节点;也就是说,它们首先使用 WINS 注册并解析名称,如果失败,则使用本地子网广播。通常优先使用名称服务器查找资源而不是使用广播,原因有两个:

广播通常不通过路由器转发。
子网上的所有计算机均接收广播,并占用每台计算机的处理时间。
多宿主计算机的 NetBIOS 名称注册与解析
正如前面所提到的,NetBT 只绑定到每个物理网络接口上的一个 IP 地址。从 NetBT 的角度来看,仅当计算机安装了多于一个 NIC 时,才认为它是一个多宿主计算机。当一个名称注册数据包从多宿主机器发出时,它被标记为多宿主名称注册,这样,就不会与该计算机另一接口注册的同一名称冲突。

如果多宿主机器收到一个广播名称查询,所有收到此查询的 NetBT/接口绑定就会响应并给出它们的地址,默认情况下,客户机选择第一个响应并连接到它所提供的地址。可使用 RandomAdapter 注册表参数对它进行控制,此参数见附录 B 所述。

当指定的名称查询发送到 WINS 服务器时,WINS 服务器响应,并给出一个多宿主计算机使用 WINS 注册的所有 IP 地址的列表。

选择最佳 IP 地址连接到多宿主计算机,是一个客户机功能。现在按下面列出的顺序,使用下列算法:

如果名称查询响应列表中的一个 IP 地址与本地计算机上 NetBT 调用绑定在同一逻辑子网上,则选择该地址。如果多个地址满足该条件,则从那些匹配地址中随机选一个。
如果列表中的一个 IP 地址与本地计算机上 NetBT 调用绑定在同一(无类)网络上,则选择该地址。如果多个地址满足该条件,则从那些匹配地址中随机选一个。
如果列表中的一个 IP 地址与本地计算机上任何 NetBT 绑定在同一逻辑子网上,则选择该地址。如果多个地址满足该条件,则从那些匹配地址中随机选一个。
如果在列表中没有一个 IP 地址与本地计算机上任何 NetBT 绑定在同一逻辑子网上,则随机从列表中选择一个地址。
该算法提供了一个相当好的方法,通过多个 NIC 平衡到一个服务器的连接;当直接连接(同一子网)可用时,优先使用直接连接。当返回一个 IP 地址列表时,这些地址按最佳顺序进行排序,NetBT 对列表中的每个地址进行 ping,直到有一个地址响应为止。NetBT 然后尝试连接到该地址。如果没有地址响应,则尝试连接到列表中的第一个地址。在有防火墙或其它设备筛选 ICMP 通信的情况下,使用此方法。Windows 2000 支持每个接口的 NetBT 名称缓存,nbtstat -c 可显示每个接口的名称缓存。

NetBT Internet/DNS 增强与 SMB 设备
通常,通过 Internet 将一台基于 Windows 的计算机和一台使用 NetBT 的计算机连接起来是可能的。要作到这一点,必须提供一些名称解析的方法。两种通用的方法是使用 Lmhosts 文件或 WINS 服务器。在 Windows NT 4.0 中引入了一些增强功能,并用到 Windows 2000 中,从而不再需要这些特殊的配置。

现在可以使用以下两种方法,连接到 TCP/IP 上的 NetBIOS 资源:

{0>Use the command net use \\ip address\share_name.<}0{>使用 net use \\ip address\share_name 命令。0} ?{0>This eliminates the need for NetBIOS name-resolution configuration.<}0{>这样,就不需要 NetBIOS 名称解析配置。<0}
使用 net use \\FQDN\share_name 命令。它允许使用 DNS 连接到一台计算机,方法是使用计算机的完全合格的域名称 (FQDN)。
以下是使用新功能将驱动器映射到 ftp.microsoft.com 的一些示例。在此列出的 IP 地址可能会有所改变。

net use f: \\ftp.microsoft.com\data
net use \\198.105.232.1\data
net view \\198.105.232.1
dir \\ftp.microsoft.com\bussys\winnt
此外,一些应用程序(如事件查看器日志菜单上选择计算机选项)允许您直接输入 FQDN 或 IP 地址。在 Windows 2000 中,也可以使用“直接宿主”在 Windows 2000 计算机间建立重定向器或服务器连接,而根本不使用 NetBIOS 名称空间或映射层。默认情况下,Windows 使用这两种方法建立连接,这样,它可以支持到低级计算机的连接。但是,仅在 Windows 2000 环境中,您可以从“网络连接”文件夹中完全禁用 NetBIOS。

在 Windows 2000 中有一个新接口,称为“SMB 设备”,它使无 NetBIOS 的操作成为可能。对于重定向器与服务器来说,它就像另一个接口,它与单个网络适配器/协议栈绑定非常相似。但是,在 TCP/IP 栈中,SMB 设备绑定到 ADDR_ANY,并且它内部使用 DNS 名称空间,就像一个 Windows Sockets 应用程序一样。调用 SMB 设备将导致标准的 DNS 查找,以便将 (DNS) 名称解析到 IP 地址,随后,它使用路由表确定的最佳源 IP 地址与接口发出一个出站连接请求(甚至在多宿主计算机上)。另外,与传统的 TCP/IP 上的 NetBIOS 不同,在 TCP 连接顶层没有建立 NetBIOS 会话。默认情况下,重定向器调用 NetBIOS 设备与 SMB 设备,文件服务器接收两者的调用。文件服务器 SMB 设备在 TCP 端口 445 上进行侦听,而不是在传统 NetBIOS 的 TCP 端口 139 上进行侦听。

TCP 上的 NetBIOS 会话
NetBIOS 会话是在两个名称间建立的。例如,当基于 Windows 2000 Professional 的工作站与使用 TCP/IP 上 NetBIOS 的服务器建立文件共享连接时,就会发生下列事件:

服务器的 NetBIOS 名称解析为 IP 地址。
IP 地址解析为媒体访问控制地址。
使用端口 139,建立工作站到服务器的
TCP 连接。
工作站通过 TCP 连接将 NetBIOS 会话请求发送到此服务器名称。如果服务器在侦听该名称,它就会做出响应,这样就建立了一个会话。
NetBIOS 会话建立后,工作站与服务器协商使用哪个级别的 SMB 协议。任何时候,Microsoft 网络在两个名称间只使用一个 NetBIOS 会话。任何附加文件或打印共享连接使用 SMB 报头内标识符,多路复用一个 NetBIOS 会话。

在每个连接上使用 NetBIOS 保留,来验证服务器与工作站是否均能保持它们的会话。因此,如果工作站不正常关机,服务器就会清除连接和相关资源,反之亦然。NetBIOS 保留是由 SessionKeepAlive 注册表参数控制的,默认情况下为每小时一次。

如果使用 LMhosts 文件且有一项拼写错了,则它可能会使用正确的 IP 地址但不正确的名称来连接服务器。在这种情况下,到服务器的 TCP 连接仍会建立。但是,NetBIOS 会话请求(使用错误的名称)被服务器拒绝,因为没有发布该名称的侦听。就会返回错误 51:Remote computer not listening。

NetBIOS 数据报服务
数据报通过 UDP 端口 138 从一个 NetBIOS 名称发送到另一个名称。数据报服务提供向唯一名称或组名发送消息的功能。组名可以解析为一组 IP 地址或广播。例如,net send /d:mydomain test 命令向组名 mydomain[03] 发送包含“test”文本的数据报。mydomain[03] 名称解析为一个 IP 子网广播,因此数据报发送具有以下特点:

目标媒体访问控制地址:广播 (FFFFFFFFFFFF)。
源媒体访问控制地址:本地计算机的 NIC 地址。
目标 IP 地址:本地子网广播地址。
源 IP 地址:本地计算机 IP 地址。
目标名称:mydomain[03](在远程计算机上的信使服务)。
源名称:username[03](在本地计算机上的信使服务)。
在子网上的所有主机提取数据报并对它进行处理,并至少送到 UDP 协议处理。在运行 NetBIOS 数据报服务的主机上,UDP 将数据报传递到端口 138 上的 NetBT。NetBT 检查目标名称,以便确定是否有应用程序已发布了数据报接收,如果有,则上传数据报。如果接收没有发布,则丢弃数据报。

如果 Windows 2000 中禁用 NetBIOS 支持(如本节前面所述),则 NetBIOS 数据报服务不可用。

重要客户服务与栈组件
本文的重点放在核心 TCP/IP 栈组件上,而不是使用这些组件的可用服务上。但是,栈本身借助一些服务获取配置信息以及名称和地址解析。下面讨论了其中一些重要客户服务。

自动客户配置与媒体侦听
一个最重要的客户服务就是动态主机配置协议 (DHCP) 客户。在 Windows 2000 中 DHCP 客户的功能有了扩展。其主要的新功能是:当客户机从小型专用网络(如家庭网络)上启动而没有 DHCP 服务器用于分配地址时,它就会自动配置 IP 地址与子网掩码。另一个新功能就是支持“媒体侦听”,它给便携设备用户提供了更好的漫游功能。

如果已安装 Microsoft TCP/IP 客户机,并且设置为从 DHCP 服务器动态获得 TCP/IP 协议配置信息(而不是手动配置 IP 地址和其它参数),则每次重新启动计算机时,DHCP 客户服务就可使用。DHCP 客户服务现使用两个步骤,来配置客户机的 IP 地址与其它配置信息。
当一个客户机安装后,它就要查找 DHCP 服务器的位置,并从中获得配置消息。许多 TCP/IP 网络使用 DHCP 服务器,可从管理上对它进行配置以便向网络上的客户机分发信息。如果查找 DHCP 服务器失败,Windows 2000 DHCP 客户机就会使用 IANA 保留的 B 类网络 169.254.0.0(子网掩码为 255.255.0.0)中的选定 IP 地址自动配置它的栈9 。DHCP 客户机测试(使用免费的 ARP)以保证选定的 IP 地址还未使用。如果已使用,则选择另外一个 IP 地址(它可以选择最多 10 个地址)。一旦 DHCP 客户机选择了确实没有使用的地址,它就会使用该地址对其接口进行配置。它继续在后台每隔 5 分钟检查一次 DHCP 服务器。如果找到 DHCP 服务器,则放弃此自动配置信息,而使用 DHCP 服务器提供的配置。此自动配置功能称为“自动专用 IP 寻址”(APIPA),它允许单个子网家庭办公室或小型办公室网络在没有静态配置或 DHCP 服务器管理的情况下使用 TCP/IP。
如果 DHCP 客户机以前从 DHCP 服务器获得一个租约,就会发生以下事件:

如果客户机的租约在启动时仍然有效(没有到期),客户机就会使用 DHCP 服务器续订租约。如果续订时客户机找不到 DHCP 服务器,则它就会 ping 租约中列出的默认网关。如果 ping 默认网关成功,则 DHCP 客户机就认为服务器仍在它获得当前租约的同一网络上,并继续使用租约。默认情况下,当租约时间到达一半时客户机就试图在后台续订其租约。
如果 ping 默认网关的尝试失败,则客户机就认为服务器已移到一个当前没有 DHCP 服务的网络上(如家庭网络),然后按照上述步骤对自身进行自动配置。一旦自动配置好,则它继续在后台每隔 5 分钟查找一次 DHCP 服务器。
在 NDIS 5.0 中增加了“媒体侦听”。它给网络接口卡 (NIC) 提供了一个通知协议栈媒体连接与媒体断开事件的机制。Windows 2000 TCP/IP 利用这些通知辅助自动配置。例如,在 Windows NT 4.0 中,当找到一台便携计算机并在以太网子网上配置了 DHCP,然后移至另一个子网而没有重新启动时,协议栈没有收到有关移动的任何信息。这说明配置参数已过时,不再适用于新的网络。另外,如果关闭计算机,将其带回家并重新启动,协议栈并不知道 NIC 已与网络断开,则配置参数也是过时的。这种配置是有问题的,因为子网路由、默认网关等可能会与拨号参数冲突。

媒体侦听支持允许协议栈对这些事件作出反应,取消过时的参数。例如,如果运行 Windows 2000 的计算机断开网络连接(假定 NIC 支持媒体侦听),栈中确定的一段缓冲时间(目前为 3 秒)过后,TCP/IP 就会取消与断开网络有关的参数。不再允许发送 IP 地址,且与该接口有关的路由被置为无效。通过选择一个连接,右键单击它,单击属性,然后选择连接后在任务栏中显示图标复选框,就可以在任务栏中看到网络连接的状态。当适配器连接有问题时,网络连接图标上也将自动带有红色“X”标记。

如果应用程序绑定到正在使用无效地址的套接字,它就会处理该事件并按适当方式进行恢复,如试图使用系统中的另一个 IP 地址或通知用户断开连接。

动态更新 DNS 客户机
正如 RFC 2136 中所述,Windows 2000 支持 DNS 动态更新。每次有地址事件发生时(新地址或更新),DHCP 客户机向 DHCP 服务器发送选项 81 及其完全合格的名称,并请求 DHCP 服务器替它注册 DNS 指针资源记录 PTR RR。动态更新客户机自己注册 A RR。这是因为,只有客户机知道主机上的哪个 IP 地址映射至该名称。DHCP 服务器无法正确地注册 A RR,因为它对以上信息不完全了解。但是,可以配置 DHCP 服务器,让客户机允许服务器使用 DNS 注册这两个记录。与动态更新 DNS 客户机相关的参数将在附录 C 中进行讨论。

Windows 2000 DHCP 服务器可处理选项 81 请求,在 RFC 草案中定义10。如果 Windows 2000 DHCP 客户机与不处理选项 81 的低级 DHCP 服务器进行对话,则它自己注册 PTR RR。Windows 2000 DNS 服务器可以处理动态更新。

静态配置的(非 DHCP)客户机可使用 DNS 服务器自己注册 A RR 和 PTR RR。

DNS 解析缓存服务
Windows 2000 包含一个缓存 DNS 解析服务,默认情况下该服务可以使用。出于疑难解答的考虑,该服务像任何其它 Windows 服务一样可以查看、终止和启动。缓存解析服务器通过为 DNS 查询提供本地缓存,可减少 DNS 网络通信并加速名称解析。名称查询响应缓存在响应中指定的 TTL 字段(不超过 MaxCacheEntryTtlLimit 参数中指定的值),并且(如有可能)从缓存直接应答后面的查询。DNS 解析缓存服务的一个有趣的功能是它支持负缓存。例如,如果向 DNS 服务器查询给定主机的名称,且响应是否定的;在 NegativeCacheTime 秒(默认为 300 秒)之内,后面对该名称的查询可从缓存来应答(负)。负缓存的另一个例子是,如果查询了所有 DNS 服务器且没有一个符合要求,NetFailureCacheTime 秒后(默认为 30)所有后面的名称查询立即失败,而不是等到超时。该功能可以节省在启动过程中服务查询 DNS 所用的时间,尤其客户机从网络上启动时。

DNS 解析缓存服务有许多其它可调整的注册表参数,如附录 C 中所述。

TCP/IP 疑难解答工具与策略
许多网络疑难解答工具可以用于 Windows。多数工具包含在产品或 Windows 2000 Server Resource Kit 中。Microsoft 网络监视器是一个优良的网络跟踪工具。其完全版本是 Microsoft 系统管理服务器产品的组成部分,其有限版本包含在 Windows 2000 Server 产品中。

当要解决某个疑难问题时,使用合理的方法大有帮助。经常会问到的一些问题是:

哪些方法有效?
哪些方法无效?
有效的方法与无效的方法之间有什么联系?
这些无效的方法以前在该计算机/网络上有效吗?
如果以前有效,从那些起更改了哪些内容?
对疑难问题刨根问底通常是快速查出问题的好方法。以下工具就是按照这一方法列出的。

IPConfig 工具
IPConfig 是一个命令行实用程序,它打印出主机的 TCP/IP 相关配置。当使用 /all 开关时,它列出所有接口的详细配置报告,包括所有配置的串行端口 (RAS)。可以将输出重定向到一个文件,并粘贴到其它文档中:

C:\>ipconfig /allWindows 2000 IP configuration:
Host Name . . . . . . . . . . . . : DAVEMAC2
Primary DNS Suffix . . . . . . . : mytest.microsoft.com
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : microsoft.com
Ethernet adapter Local Area Connection 2:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : 3Com EtherLink III EISA (3C579-TP)
Physical Address. . . . . . . . . : 00-20-AF-1D-2B-91
DHCP Enabled. . . . . . . . . . . : No
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 10.57.8.190
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : 10.57.9.254
Primary WINS Server . . . . . . . : 10.57.9.254
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : AMD Family PCI Ethernet Adapter
Physical Address. . . . . . . . . : 00-80-5F-88-60-9A
DHCP Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 199.199.40.22
Autoconfiguration Enabled . . . . : Yes
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 199.199.40.1
DNS Servers . . . . . . . . . . . : 199.199.40.254
Primary WINS Server . . . . . . . : 199.199.40.254

Ping 工具
Ping 是一个验证 IP 级可达性的工具。ping 命令可用于向目标名称或 IP 地址发送一个 ICMP 回应请求。首先,ping 目标主机的 IP 地址看它是否响应,因为这是最简单的测试。如果成功,则尝试 ping 名称。Ping 使用 Windows Sockets 类型的名称解析,将名称解析为地址,因此如果按地址 ping 成功,但按名称 ping 失败,问题出在名称解析而不是网络连通性。

键入 ping -? 以确定那些命令行选项可用。Ping 允许您指定要使用的数据包大小、数据包发送的数量、是否记录所使用的路由、使用的 TTL 数值以及是否设置 don't fragment 标志。有关使用 ping 手动确定两个计算机间的 PMTU 的详细信息,请参见本文的 PMTU 发现一节。

下列示例说明如何发送两个 ping 命令寻址 10.99.99.2,每个命令 1450 字节:

C:\>ping -n 2 -l 1450 10.99.99.2

Pinging 10.99.99.2 with 1450 bytes of data:

Reply from 10.99.99.2: bytes=1450 time<10ms TTL=32
Reply from 10.99.99.2: bytes=1450 time<10ms TTL=32

Ping statistics for 10.99.99.2:

Packets: Sent = 2, Received = 2, Lost = 0 (0% loss),

Approximate round trip times in milliseconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms

默认情况下,ping 在超时前等待要返回的每个响应一秒钟。如果要探测的远程系统是在一个高延迟链接(如卫星链接)上,响应返回可能要花费更长的时间。-w(等待)开关可用于指定更长的超时时间。使用 IPSec 的计算机在响应 ping 命令之前,可能需要几秒钟建立安全关联。

PathPing 工具
Pathping 命令是一个路由跟踪工具,它结合了 ping 与 tracert 命令的功能,并带有这两个工具未提供的附加信息。在一段给定的时间内,Pathping 命令数据包送到到达最终目标的路径上的每个路由器,然后计算从每个跃点返回的基于数据包的结果。由于该命令显示了任何给定的路由器或链接上数据包的丢失程度,因此很容易确定哪个路由器或链接可能会出现网络问题。-R -T 开关与 Pathping 一起使用时,可确定路径上的设备是否符合 802.1p 标准且支持 RSVP。

下列示例给出了跟踪到 www.sectur.gov.ar [200.1.247.2] 的路由的默认输出(跃点数最多为 30 个):

0 warren.microsoft.com [163.15.2.217]
1 tnt2.seattle2.wa.da.uu.net [206.115.150.106]
2 206.115.169.217
3 119.ATM1-0-0.HR2.SEA1.ALTER.NET [152.63.104.38]
4 412.atm11-0.gw1.sea1.ALTER.NET [137.39.13.73]
5 teleglobe2-gw.customer.ALTER.NET [157.130.177.222]
6 if-0-3.core1.Seattle.Teleglobe.net [207.45.222.37]
7 if-1-3.core1.Burnaby.Teleglobe.net [207.45.223.113]
8 if-1-2.core1.Scarborough.Teleglobe.net [207.45.222.189]
9 if-2-1.core1.Montreal.Teleglobe.net [207.45.222.121]
10 if-3-1.core1.PennantPoint.Teleglobe.net [207.45.223.41]
11 if-5-0-0.bb1.PennantPoint.Teleglobe.net [207.45.222.94]
12 BOSQUE-aragorn.tecoint.net [200.43.189.230]
13 ARAGORN-bosque.tecoint.net [200.43.189.229]
14 GANDALF-aragorn.tecoint.net [200.43.189.225]
15 Startel.tecoint.net [200.43.189.18]
16 200.26.9.245
17 200.26.9.26
18 200.1.247.2

Computing statistics for 450 seconds:

Source to Here This Node/Link
Hop RTT Lost/Sent = Pct Lost/Sent = Pct Address
0 warren.microsoft.com [63.15.2.217]
0/ 100 = 0% |
1 115ms 0/ 100 = 0% 0/ 100 = 0% tnt2.seattle2.wa.da.uu.net [206.115.150.106]
0/ 100 = 0% |
2 121ms 0/ 100 = 0% 0/ 100 = 0% 206.115.169.217
0/ 100 = 0% |
3 122ms 0/ 100 = 0% 0/ 100 = 0% 119.ATM.ALTER.NET [152.63.104.38]
0/ 100 = 0% |
4 124ms 0/ 100 = 0% 0/ 100 = 0% 412.atm.sea1.ALTER.NET [137.39.13.73]
0/ 100 = 0% |
5 157ms 0/ 100 = 0% 0/ 100 = 0% teleglobe2-gw.ALTER.NET [157.130.177.222]
0/ 100 = 0% |
6 156ms 0/ 100 = 0% 0/ 100 = 0% if-0-3.Teleglobe.net [207.45.222.37]
0/ 100 = 0% |
7 198ms 0/ 100 = 0% 0/ 100 = 0% if-1-3.core1.Teleglobe.net [207.45.223.113]
0/ 100 = 0% |
8 216ms 0/ 100 = 0% 0/ 100 = 0% if-1-2.core1. Teleglobe.net [207.45.222.189]
0/ 100 = 0% |
9 207ms 0/ 100 = 0% 0/ 100 = 0% if-2-1.Teleglobe.net [207.45.222.121]
0/ 100 = 0% |
10 220ms 0/ 100 = 0% 0/ 100 = 0% if-3-1.core1.Teleglobe.net [207.45.223.41]
0/ 100 = 0% |
11 240ms 0/ 100 = 0% 0/ 100 = 0% if-5-0-0.bb1.Teleglobe.net [207.45.222.94]
0/ 100 = 0% |
12 423ms 1/ 100 = 1% 1/ 100 = 1% BOSQUE-aragorn.tecoint.net [200.43.189.230]
0/ 100 = 0% |
13 412ms 0/ 100 = 0% 0/ 100 = 0% ARAGORN-bosque.tecoint.net [200.43.189.229]
0/ 100 = 0% |
14 415ms 1/ 100 = 1% 1/ 100 = 1% GANDALF-aragorn.tecoint.net [200.43.189.225]
0/ 100 = 0% |
15 578ms 0/ 100 = 0% 0/ 100 = 0% Startel.tecoint.net [200.43.189.18]
2/ 100 = 2% |
16 735ms 2/ 100 = 2% 0/ 100 = 0% 200.26.9.245
5/ 100 = 5% |
17 1005ms 8/ 100 = 8% 1/ 100 = 1% 200.26.9.26
0/ 100 = 0% |
18 1089ms 7/ 100 = 7% 0/ 100 = 0% 200.1.247.2

Trace complete.

运行 Pathping 时,在测试问题时首先查看路由的结果。此路径与 tracert 命令显示的路径相同。Pathping 命令对下一个 450 秒显示忙消息(它随跃点数变化而变化)。在此期间,Pathping 从以前列出的所有路由器及其之间的连接收集信息。结束时,它显示测试的结果。

最右边的两栏 This Node/Link Lost/Sent=Pct 和 Address 包含的信息最有用。200.26.9.245(跃点 16)和 200.26.9.26(跃点 17)间的链接丢弃 8% 的数据包。

对链接显示的丢失率(在最右边一栏标记为 |)表明沿路径转发丢失的数据包。该丢失表明链接阻塞。显示的路由器丢失率(由最右边一栏中它们的 IP 地址指示)表明这些路由器的 CPU 可能超负荷运行。这些阻塞的路由器可能也是端到端问题的一个因素。

Arp 工具
arp 命令对于查看 ARP 缓存很有用。如果在同一子网上的两个主机相互之间 ping 失败,尝试在每台计算机上运行 arp -a 命令,以确定计算机是否列出对方的正确 MAC 地址。使用 IPConfig 命令,确定主机媒体访问控制地址。如果网络上另一个主机与它的 IP 地址重复,则 ARP 缓存可能已将另一台计算机的媒体访问控制地址缓存在其中。使用 arp -d,可以删除不正确的项。使用 arp -s,可以添加项。

Tracert 工具
Tracert 是路由跟踪实用程序。Tracert 使用 IP TTL 字段和 ICMP 错误消息来确定从一个主机到网络上其它主机的路由。tracert 命令的示例输出如本文的 ICMP 一节所示。

路由工具
Route 用于查看或修改路由表。Route print 显示主机 IP 知道的当前路由的列表。示例输出如本文的 IP 一节所示。注意:在 Windows 2000 中当前活动的默认网关显示在路由列表的末尾。Route add 将路由添加到表中。Route delete 将路由从表中删除。

除非指定 -p 开关,否则添加到表中的路由就不是永久性的。计算机重新启动后,非永久性路由就会无效。

对于交换 IP 数据报的两个主机来说,它们必须均有到对方的路由,或者它们必须使用知道其中一个路由的默认网关。通常情况下,路由器相互之间使用协议交换信息,如路由信息协议 (RIP) 或开放式最短路径优先 (OSPF))。无声 RIP 在 Windows 2000 Professional 中可用,在 Windows 2000 Server 中的“路由和远程访问服务”支持完整的路由协议。

Netstat
Netstat 显示协议统计和当前 TCP/IP 连接。Netstat -a 显示所有连接,netstat -r 显示路由表和任何活动连接。-n 开关通知 netstat 不要将地址与端口号转换到名称,这可加快执行速度。-e 开关显示以太网统计信息,且可以与 -s 开关一起使用,后者显示协议统计信息。示例输出如下所示:

C:\>netstat -e

Interface statistics:

Received Sent
Bytes 372959625 123567086
Unicast packets 134302 145204
Non-unicast packets 55937 886
Discards 0 0
Errors 0 0
Unknown protocols 1757381
C:\>netstat -an

Active connections:

Proto Local Address Foreign Address State
TCP 0.0.0.0:42 0.0.0.0:0 LISTENING
TCP 0.0.0.0:88 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:389 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:593 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1038 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1041 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1048 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1054 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1077 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1080 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1088 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1092 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1723 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3268 0.0.0.0:0 LISTENING
TCP 10.99.99.1:53 0.0.0.0:0 LISTENING
TCP 10.99.99.1:139 0.0.0.0:0 LISTENING
TCP 10.99.99.1:389 10.99.99.1:1092 ESTABLISHED
TCP 10.99.99.1:1092 10.99.99.1:389 ESTABLISHED
TCP 10.99.99.1:3604 10.99.99.1:135 TIME_WAIT
TCP 10.99.99.1:3605 10.99.99.1:1077 TIME_WAIT
UDP 0.0.0.0:42 *:*
UDP 0.0.0.0:88 *:*
UDP 0.0.0.0:123 *:*
UDP 0.0.0.0:135 *:*
UDP 0.0.0.0:389 *:*
UDP 0.0.0.0:445 *:*
UDP 0.0.0.0:1073 *:*
UDP 0.0.0.0:1076 *:*
UDP 0.0.0.0:1087 *:*
UDP 10.99.99.1:53 *:*
UDP 10.99.99.1:67 *:*
UDP 10.99.99.1:137 *:*
UDP 10.99.99.1:138 *:*
UDP 127.0.0.1:1052 *:*
D:\>netstat -s

IP statistics:

Packets Received = 3175996
Received Header Errors = 0
Received Address Errors = 38054
Datagrams Forwarded = 0
Unknown Protocols Received = 0
Received Packets Discarded = 0
Received Packets Delivered = 3142564
Output Requests = 3523906
Routing Discards = 0
Discarded Output Packets = 0
Output Packet No Route = 0
Reassembly Required = 0
Reassembly Successful = 0
Reassembly Failures = 0
Datagrams Successfully Fragmented = 0
Datagrams Failing Fragmentation = 0
Fragments Created = 0

ICMP statistics:

Received Sent
Messages 462 33
Errors 0 0
Destination Unreachable 392 4
Time Exceeded 0 0
Parameter Problems 0 0
Source Quenchs 0 0
Redirects 0 0
Echos 1 22
Echo Replies 12 1
Timestamps 0 0
Timestamp Replies 0 0
Address Masks 0 0
Address Mask Replies 0 0

TCP statistics:

Active Opens = 12164
Passive Opens = 12
Failed Connection Attempts = 79
Reset Connections = 11923
Current Connections = 1
Segments Received = 2970519
Segments Sent = 3505992
Segments Retransmitted = 18

UDP statistics:

Datagrams Received = 155620
No Ports = 16578
Receive Errors = 0
Datagrams Sent = 17822

NBTStat 工具
NBTStat 是用于 NetBIOS 名称解析疑难解答的一个很有用的工具。NBTStat -n 显示在系统上本地注册的应用程序名称,如服务器与重定向器。NBTStat -c 显示 NetBIOS 名称缓存,它包含其它计算机名称到地址的映射。NBTStat -R 清除名称缓存并从 Lmhosts 文件重新加载。NBTStat -RR(Windows 2000 和 NT 4.0 SP5 中新增的功能)使用名称服务器重新注册所有名称。NBTStat -a name 对用 name 指定的计算机执行 NetBIOS 适配器状态命令。适配器状态命令返回该计算机的本地 NetBIOS 名称表,以及适配器卡的媒体访问控制地址。NBTStat -s 列出当前会话及其状态,包括统计信息在内。

Nslookup 工具
Nslookup 是 Windows NT 4.0 中增加的功能,它是解决主机名称解析等 DNS 问题的一个有用工具。当您启动 nslookup 时,它显示本地系统配置的 DNS 服务器主机名称和 IP 地址,然后显示命令提示符。如果键入问号 (?),nslookup 显示可用的各种命令。

要使用 DNS 查找主机的 IP 地址,键入主机名称后按 Enter。默认情况下,Nslookup 显示正在运行的计算机所配置的 DNS 服务器,但是您也可以键入 server name,来查看其它 DNS 服务器(name 是查找所使用的服务器主机名称)。

当您使用 Nslookup 时,应了解域名递归方法。如果只键入主机名称并按 Enter,nslookup 查询 DNS 之前将计算机的域后缀(如 cswatcp.microsoft.com)附到主机名称后面。如果名称未找到,则域后缀归递减一个标签(此时,cswatcp 被删除,后缀变为 microsoft.com)。然后重新查询。基于 Windows 2000 的计算机仅将名称递归到第二级域(此处为 microsoft.com),因此如果该查询仍失败,则不进一步解析名称。如果键入完全合格的域名(以后缀点表示),则仅向 DNS 服务器查询该名称而不执行递归。要查找根本不在本域的主机名称,必须键入完全合格的名称。

一个非常有用的疑难解答功能是调试模式,可通过键入 set debug 来调用;如要获得更详细的信息,则键入 set d2。在调试模式中,nslookup 列出完成该命令所采取的步骤,如下面的示例所示:

C:\>nslookup
(null) davemac3.cswatcp.microsoft.com
Address: 10.57.8.190
> set d2
> rain-city
(null) davemac3.cswatcp.microsoft.com
Address: 10.57.8.190
------------
SendRequest(), len 49
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
rain-city.cswatcp.microsoft.com, type = A, class = IN
------------
Got answer (108 bytes):
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: response, auth. answer, want recursion, recursion avail.
questions = 1, answers = 2, authority records = 0, additional = 0
QUESTIONS:
rain-city.cswatcp.microsoft.com, type = A, class = IN
ANSWERS:
-> rain-city.cswatcp.microsoft.com
type = CNAME, class = IN, dlen = 31
canonical name = seattle.cswatcp.microsoft.com
ttl = 86400 (1 day)
-> seattle.cswatcp.microsoft.com
type = A, class = IN, dlen = 4
internet address = 10.1.2.3
ttl = 86400 (1 day)
------------
(null) seattle.cswatcp.microsoft.com
Address: 10.1.2.3
Aliases: rain-city.cswatcp.microsoft.com

在该示例中,执行 set d2 命令,将 nslookup 置为调试模式,然后查找主机名称 rain-city 的地址。输出的前两行显示要查找的 DNS 服务器的主机名称与 IP 地址。下一段显示了本地机器的域后缀 (cswatcp.microsoft.com) 被附加到 rain-city 名称之后,并且 nslookup 将该问题提交给 DNS 服务器。再下一个段表明,nslookup 接收一个 DNS 应答,并且一个问题有两个应答记录。对该问题响应了两次,并有两个应答记录。此处,第一个应答记录表明,rain-city.cswatcp.microsoft.com 名称实际上是主机名称 seattle.cswatcp.microsoft.com 的规范名称(别名)。第二个应答记录列出该主机的 IP 地址为 10.1.2.3。

Microsoft 网络监视器
Microsoft 网络监视器是 Microsoft 开发的一个工具,可使解决复杂网络问题的任务更简单、更经济。它是 Microsoft 系统管理服务器产品的一部分,但是可以用作独立的网络监视器。此外,Windows NT 和 Windows 95 包含“网络监视器代理程序”软件;Windows NT Server 和 Windows 2000 包括网络监视器的有限版本。运行网络监视器的站可以通过网络连接到运行代理程序软件的站,或使用拨号(远程访问)执行对远程网段的监视或跟踪。这是一个非常有用的疑难解答工具。

网络监视器工作原理是:将捕获主机上的 NIC 设置为混合模式,这样就可以将线路上的每个帧传到跟踪工具。(随 Windows 2000 Server 一起发行的网络监视器的有限版本仅允许跟踪该计算机的收发通信。) 可以定义捕获筛选器,只保存特定的帧用于分析。可以基于源与目标 NIC 地址、源与目标协议地址以及匹配模式定义筛选器。一旦捕获到帧,可以使用显示筛选程序进一步缩小问题的范围。显示筛选程序也可以选择特定的协议。

基于 Windows NT 的计算机将服务器消息块 (SMB) 协议用于多种功能,其中包括文件与打印共享。Netmon 分析程序目录中的 smb.hlp 文件是了解该协议的一个很好参考资料。

摘要
其它信息
有关 Windows 2000 Server 的最新信息,请查阅我们的 Web 站点,地址是: http://www.microsoft.com/windows2000 与 Windows 2000 和 Windows NT 论坛,地址是: http://computingcentral.msn.com/topics/windowsnt。

附录 A:TCP/IP 配置参数
Windows 2000 TCP/IP 协议组件实现从注册表中获取全部配置数据。配置信息是由安装程序写到注册表中的。一些信息也可以由动态主机配置协议 (DHCP) 客户服务提供(如启用)。本附录定义了用于配置协议驱动程序 (Tcpip.sys) 的所有注册表参数,它实施标准的 TCP/IP 网络协议。

仅使用安装程序和 DHCP 所收集的配置信息,协议组件实现就可以在大多数环境中正常而有效地工作。大多数使用环境下,协议的所有其它配置项的最优默认值已编入该驱动程序中。一些用户安装设置可能需要更改某些默认值。要这样做,可以创建一些可选的注册表参数,修改协议驱动程序某些默认设置。

{0>Note The Windows TCP/IP implementation is largely self-tuning.<}0{>备注 Windows TCP/IP 实现基本上是自调整的。<0} {0>Adjusting registry parameters may adversely affect system performance.<}0{>?调整注册表参数可能对系统性能造成不利的影响。0}

所有 TCP/IP 参数就是放在注册表项下面的注册表值。

HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services:
\Tcpip
\Parameters

适配器特有的数值列在每个适配器的子项中。根据系统或适配器是由 DHCP 配置的,还是指定了静态覆盖值,参数可能会拥有 DHCP 配置和静态配置值。如果使用注册表编辑器更改其中的任何参数,通常系统需要重新启动,更改才能生效。如果使用网络连接接口更改注册表值,通常不需要重新启动。

可用注册表编辑器配置的参数
在 TCP/IP 组件安装过程中,设定下列参数的默认值。要修改其中的任何值,请使用注册表编辑器 (Regedt32.exe)。默认情况下,在注册表中可以看见一些参数,但是大多数参数必须重新创建,以便修改 TCP/IP 协议驱动程序的默认设置。以下分别列出了用户接口的可配置参数。

AllowUserRawAccess

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围: 0、1(false、true)

默认值: 0 (false)

说明:该参数控制对原始套接字的访问。如果为 true,则非管理用户可以访问原始套接字。默认情况下,只有管理员可以访问原始套接字。有关原始套接字的详细信息,请参见 Windows Sockets 规范,网址是: ftp://ftp.microsoft.com/bussys/winsock/winsock2。

ArpAlwaysSourceRoute

项:Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1 或不存在(false、true 或不存在)

默认值:不存在

说明:默认情况下,栈首先启动没有源路由查询,如果没有收到应答,则用源路由重试。将该参数设为 0,则不使用源路由发送所有 IP 广播。将该参数设置为 1,就会强制 TCP/IP 使用在令牌环网络上启用的源路由发送 ARP 查询。(在 Windows NT 4.0 SP2 中引入了对该参数定义的修改。)

ArpCacheLife

项: Tcpip\Parameters

数值类型: REG_DWORD - 秒数

有效范围: 0-0xFFFFFFFF

默认值: 在没有 ArpCacheLife 参数的情况下,ARP 缓存超时的默认值为:未使用项为 2 分钟;已使用项为 10 分钟。

说明:请参见 ArpCacheMinReferencedLife

ArpCacheMinReferencedLife

项: Tcpip\Parameters

数值类型: REG_DWORD - 秒数

有效范围: 0-0xFFFFFFFF

默认值: 600 秒(10 分钟)

说明: ArpCacheMinReferencedLife 控制引用 ARP 缓存项到期的最小时间。该参数可与 ArpCacheLife 参数一起使用,如下所示:

如果 ArpCacheLife 大于或等于 ArpCacheMinReferencedLife,则引用或未引用的 ARP 缓存项在 ArpCacheLife 秒后到期。
如果 ArpCacheLife 小于 ArpCacheMinReferencedLife,未引用项在 ArpCacheLife 秒后到期,而引用项在 ArpCacheMinReferencedLife 秒后到期。
每次将出站数据包发送到项的 IP 地址时,就会引用 ARP 缓存中的项。

ArpRetryCount

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 1-3

默认值: 3

说明:该参数控制在初始化过程中计算机为其 IP 地址发送免费 ARP 的次数。发送免费 ARP 是为了保证该 IP 地址在网络其它位置未被使用。该数值控制实际发送的 ARP 次数,而不是重试的次数。

ArpTRSingleRoute

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:将该参数设置为 1,就会将启用源路由(令牌环)的 ARP 广播作为单路由广播发送,而不是所有路由广播。

ArpUseEtherSNAP

项:Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:将该参数设置为 1,就会强制 TCP/IP 使用 802.3 SNAP 编码传输以太网数据包。默认情况下,栈以 DIX 以太网格式传输数据包。它始终接收两种格式的数据包。

DatabasePath

项:Tcpip\Parameters

数值类型:REG_EXPAND_SZ - 字符串

有效范围:有效的 Windows NT 文件路径

默认值:%SystemRoot%\system32\drivers\etc

说明:该参数指定标准 Internet 数据库文件(Hosts、Lmhosts、网络、协议、服务)的路径。Windows Sockets 接口使用该参数。

DefaultTTL

项: Tcpip\Parameters

数值类型: REG_DWORD - 秒数/跃点数

有效范围: 0-0xff(0-255 十进制)

默认值: 128

说明: 指定传出 IP 数据包中设置的默认生存时间 (TTL) 值。TTL 决定了 IP 数据包在到达目标前在网络中生存的最大时间。它实际上限定了 IP 数据包在丢弃前允许通过的路由器数量。

DisableDHCPMediaSense

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围 0、1(false、true)

默认值: 0 (false)

说明: 该参数可用来控制 DHCP 媒体侦听性能。如果将其设置为 1,DHCP 客户机就会忽略接口的媒体侦听事件。默认情况下,媒体侦听事件将触发 DHCP 采取措施,如获取一个租约(发生连接事件时);或者使接口和路由无效(发生断开连接时)。

DisableIPSourceRouting

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1、2

0 - 转发所有数据包
1 - 不转发源路由数据包
2 - 丢弃所有传入的源路由数据包

默认值: 1 (true)

说明: IP 源路由是允许发送者确定数据报通过网络所采用 IP 路由的一种机制,主要由 tracert.exe 和 ping.exe 工具所使用。

Windows NT 4.0 Service Pack 5 中添加了这一参数(请参见 Microsoft Knowledge Base 文章 Q217336<http://search.support.microsoft.com/kb/c.asp>)。在默认情况下,Windows 2000 禁用 IP 源路由。

DisableMediaSenseEventLog

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明: 该参数用于禁止使用 DHCP 媒体侦听事件的日志记录。默认情况下,媒体侦听事件(连接/断开网络)被记录在事件日志中,以便于疑难解答。

DisableTaskOffload

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:该参数通知 TCP/IP 栈禁止将任务卸载到网关,以便于疑难解答与测试。

DisableUserTOSSetting

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明:该参数允许程序设置传出 IP 数据包报头的服务种类 (TOS) 位。在 Windows 2000 中,该参数默认值为 true。一般情况下,不允许各应用程序设置 TOS 位,因为这可能会欺骗系统策略机制,如本文“服务质量 (QoS) 与资源保留协议”一节中所述的那些机制。

DontAddDefaultGateway

项: Tcpip\Parameters \Interfaces\interface

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0

说明: 安装 PPTP 时,给每个 LAN 适配器安装一个默认路由。通过添加该数值并将其值设为 1,可以禁用某个适配器的默认路由。之后,您可能需要为使用路由器(而不是默认网关)路由的主机配置静态路由。

EnableAddrMaskReply

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值:0 (false)

说明:该参数控制计算机是否响应 ICMP 地址掩码请求。

EnableBcastArpReply

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值:1 (true)

说明: 当 ARP 中的源以太网地址不是单播时,该参数控制计算机是否响应 ARP 请求。如果将该数值设置为 0,网络负载平衡服务 (NLBS) 将不能正常工作。

EnableDeadGWDetect

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明: 将该参数设置为 1 时,允许 TCP 执行间隔网关检测。启用该功能时,如果处理多个连接有困难时,TCP 可以请求 IP 改用备份网关。备份网关可以在“网络控制面板”中“TCP/IP 配置”对话框的“高级”部分进行定义。有关详细信息,请参见本文“间隔网关检测”一节。

EnableICMPRedirects

项: Tcpip\Parameters

数值类型:REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (True),用于 Beta 3。在 RC1 中预定改为 1 (True)

推荐值: 0 (False)

说明:该参数控制 Windows 2000 是否会改变其路由表以响应网络设备(如路由器)发送给它的 ICMP 重定向消息。

EnableFastRouteLookup

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:如果设置该标志,则启用路由查找。这可加快路由查找,但会占用非分页池内存。仅当计算机运行 Windows 2000 Server 且属于中型或大型机(换句话说,至少包含 64 MB 内存)时,才使用此标志。可以通过路由与远程访问服务创建该参数。

EnableMulticastForwarding

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:路由服务使用该参数确定是否转发 IP 多播。可以通过路由与远程访问服务创建该参数。

EnablePMTUBHDetect

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:将该参数设置为 1 (true),当 TCP 执行路径 MTU 发现时,就会检测“黑洞”路由器。当需要用 Don't Fragment 位设置分片 IP 数据报时,黑洞路由器不返回 ICMP Destination Unreachable 消息。TCP 依靠接收这些消息执行路径 MTU 发现。当启动此功能时,如果几次重新发送字段没有确认,TCP 将尝试不设置 Don't Fragment 位的情况下发送字段11。如果收到字段确认,MSS 将降低,并将连接上以后发送的数据包中设置 Don't Fragment 位。启用黑洞路由器,将增加某个字段重新发送的最多次数。

EnablePMTUDiscovery

项: Tcpip\Parameters

数值类型:REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明:将该参数设置为 1 (true) 时,TCP 将查找到达远程主机路径上的最大传输单位(MTU 或最大的数据包大小)。通过发现路径 MTU 并将 TCP 字段限制到这个大小,对于路径上连接不同 MTU 网络的路由器而言,TCP 不再需要进行分片。碎片会影响 TCP 吞吐量和网络堵塞。将这个参数设置成 0,所有不在本地子网上的主机连接就会使用 576 字节的 MTU。

FFPControlFlags

项: Tcpip\Parameters

数值类型:REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明:如果将该参数设置为 1,就会启用快速转发路径 (FFP)。如果将它设置为 0,TCP/IP 通知所有可使用 FFP 的适配器不要在该计算机上快速转发。可使用快速转发路径的网络适配器从栈中接收路由信息,并在硬件中转发随后的数据包,而不用将它们上传到栈中。FFP 参数放在 TCP/IP 注册表项中,但实际上由路由与远程访问服务 (RRAS) 服务设置。有关详细信息,请参见 RRAS 文档。

FFPFastForwardingCacheSize

项: Tcpip\Parameters

数值类型:REG_DWORD - 字节数

有效范围: 0-0xFFFFFFFF

默认值: 100,000 字节

说明:对于支持快速转发 (FFP) 的驱动程序,如果它使用系统内存分配快速转发缓存,则该参数表示它可以分配的最大内存数。如果设备有自己的快速转发内存,则忽略该数值。

ForwardBufferMemory

项: Tcpip\Parameters

数值类型:REG_DWORD - 字节数

有效范围: 网络 MTU-小于 0xFFFFFFFF 的合理数值。

默认值: 74240(足可用于 50 个 1480 字节数据包,可以舍入 256 的倍数)

说明: 该参数表示 IP 最初分配多少内存来存储路由器数据队列中数据包数据。当该缓冲空间满了时,系统就会分配更多的内存。数据包队列数据缓冲区为 256 字节,因此这个参数的值应为 256 的倍数。几个缓冲器连在一起可形成大数据包。数据包的 IP 报头分别存储。如果 IP 路由功能没有启用,则忽略该参数,并且不分配缓冲区。此功能分配的最大内存数是由 MaxForwardBufferMemory 控制的。

GlobalMaxTcpWindowSize

项: Tcpip\Parameters

数值类型: REG_DWORD - 字节数

有效范围: 0-0x3FFFFFFF(十进制为 1073741823;但是当连接到其它支持 RFC 1323 窗口缩放的系统时,可以获得大于 64 KB 的数值,它在本文的 TCP 部分进行了讨论。另外,必须使用 Tcp1323Opts 注册表参数启用窗口缩放。)

默认值: 默认情况下,该参数不存在。

说明:TcpWindowSize 参数可用于在每个接口上设置接收窗口。该参数可用于在整个系统上设置 TCP 窗口大小的全局限制。该参数是 Windows 2000 中的新增功能。

IPAutoconfigurationAddress

项: Tcpip\Parameters\Interfaces\<interface>

数值类型:REG_SZ - 字符串

有效范围:有效 IP 地址

默认值:无

说明:DHCP 客户机在此存放自动配置所选择的 IP 地址。不可更改修改该数值。

IPAutoconfigurationEnabled

项: Tcpip\Parameters, Tcpip\Parameters\Interfaces\interface

数值类型:REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明:该参数可以启用或禁用 IP 自动配置。有关详细信息,请参见本文的“自动客户配置与媒体侦听”一节。该参数可以设置为全局或每个接口。如果每个接口的参数值存在,它将覆盖该接口的全局参数值。

IPAutoconfigurationMask

项: Tcpip\Parameters, Tcpip\Parameters\Interfaces\interface

数值类型:REG_SZ - 字符串

有效范围:有效的 IP 子网掩码

默认值: 255.255.0.0

说明: 该参数控制由自动配置分配给客户机的子网掩码。有关详细信息,请参见本文的“自动客户配置与媒体侦听”一节。可以将该参数设置为全局或每个接口。如果每个接口参数值存在,则它覆盖该接口的全局参数值。

IPAutoconfigurationSeed

项: Tcpip\Parameters, Tcpip\Parameters\Interfaces\interface

数值类型:REG_DWORD - 数字

有效范围: 0-0xFFFF

默认值: 0

说明:该参数由 DHCP 客户内部使用,不应修改该参数。

IPAutoconfigurationSubnet

项: Tcpip\Parameters, Tcpip\Parameters\Interfaces\interface

数值类型:REG_SZ - 字符串

有效范围:有效 IP 子网

默认值: 169.254.0.0

说明: 该参数控制自动配置查找客户机 IP 地址时所使用的子网地址。有关详细信息,请参见本文的“自动客户配置与媒体侦听”一节。可以将该参数设置为全局参数或基于每个接口的参数。如果每个接口参数值存在,则它覆盖该接口的全局参数值。

IGMPLevel

项: Tcpip\Parameters

数值类型:REG_DWORD - 数字

有效范围: 0、1、2

默认值: 2

说明: 该参数确定系统在多大程度上支持 IP 多播和参加网际分组管理协议。在 0 级,系统不提供多播支持。在 1 级,系统可以发送 IP 多播数据包但不能接收。在 2 级,系统可以发送 IP 多播数据包并完全参加 IGMP 以接收多播数据包。

IPEnableRouter

项:Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:将该参数设置为 1 (true),系统将在它所连接的网络之间路由 IP 数据包。

IPEnableRouterBackup

项:Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:安装程序将以前的 IPEnableRouter 值写入到此项中。该参数不应手动来调整。

KeepAliveInterval

项: Tcpip\Parameters

数值类型:REG_DWORD - 时间(毫秒)

有效范围: 1-0xFFFFFFFF

默认值: 1000(1 秒)

说明:该参数确定接收到响应前,保留重新传输的间隔。一旦接收到响应,直至下一个保留传输的延迟仍由 KeepAliveTime 数值控制。当重新传输次数达到 TcpMaxDataRetransmissions 指定值后仍未收到应答,就会放弃连接。

KeepAliveTime

项: Tcpip\Parameters

数值类型:REG_DWORD - 时间(毫秒)

有效范围: 1-0xFFFFFFFF

默认值: 7,200,000(2 小时)

说明: 该参数可确定 TCP 每隔多长时间发送保留的数据包,来验证一次闲置连接仍未断开。如果远程系统仍然可以连接并正在运行,它就会确认保留传输。默认情况下,不发送保留数据包。应用程序可以在连接上启用这一功能。

MaxForwardBufferMemory

项: Tcpip\Parameters

数值类型:REG_DWORD - 字节数

有效范围: 网络 MTU-0xFFFFFFFF

默认值: 十进制 2097152 (2 MB)

说明:该参数表示 IP 分配多少内存,来存储路由器数据队列中数据包的数据。该数值必须大于或等于 ForwardBufferMemory 参数值。有关详细信息,请参见 ForwardBufferMemory。

MaxForwardPending

项: Tcpip\Parameters\Interfaces\interface

数值类型:REG_DWORD - 数据包数

有效范围: 1-0xFFFFFFFF

默认值: 0x1388(十进制为 5000)

说明: 该参数限制在某一时刻 IP 转发引擎可以向指定网络接口发送的数据包数。额外的数据包则在 IP 排队,直到接口上的传输完成为止。大多数网络适配器传输数据包的速度非常快,因此默认值是充分的。但是,单个 RAS 接口可以多路复用多个慢速串行线路。对这种类型的接口配置更大的数值,可以提高性能。合适的数值取决于传出线路的数量以及它们的负载特性。

MaxFreeTcbs

项: Tcpip\Parameters

数值类型:REG_DWORD - 数字

有效范围: 0-0xFFFFFFFF

默认值: 使用下列默认数值(注意“小型”定义为 RAM 小于 19 MB 的计算机,“中型”定义为 RAM 在 19-63 MB 之间的计算机,“大型”定义为 RAM 大于或等于 64 MB 的计算机。虽然该代码仍旧存在,现在几乎所有计算机均为“大型”)。

对于 Windows 2000 Server:

小型系统 - 500
中型系统 - 1000
大型系统 - 2000
对于 Windows 2000 Professional:

小型系统 - 250
中型系统 - 500
大型系统 - 1000
说明: 该参数控制可用的缓存(预分配的)传输控制块 (TCB) 数量。传输控制块是每个 TCP 连接保留的数据结构。

MaxFreeTWTcbs

项: Tcpip\Parameters

数值类型:REG_DWORD - 数字

有效范围: 1-0xFFFFFFFF

默认值: 1000

说明: 该参数控制在 TIME-WAIT 状态列表中允许处于 TIME-WAIT 状态的传输控制块 (TCB) 数量。一旦超过该数值,最早的 TCB 将从列表中清除。要使连接保持 TIME-WAIT 状态至少 60 秒,对于计算机,该数值应为 >= 60 *(每秒正常连接关闭比率)。在大多数情况下,默认数值是合适的。

MaxHashTableSize

项: Tcpip\Parameters

数值类型:REG_DWORD - 数字(必须为 2 的幂数)

有效范围: 0x40-0x10000(十进制为 64-65536)

默认值: 512

说明: 该数值应设为 2 的幂数(例如,512、1024、2048 等等)。如果该数值不是 2 的幂数,则系统将散列表配置为下一个 2 的幂数值(例如,当设置为 513,则取 1024)。该数值控制系统查找 TCP 控制块的速度,当 MaxFreeTcbs 从默认值增大时,该数值应增大。

MaxNormLookupMemory

项: Tcpip\Parameters

数值类型:REG_DWORD - 数字

有效范围: 任何 DWORD(0xFFFFFFFF 说明对内存没有限制。)

默认值: 使用下列默认数值(“小型”定义为 RAM 小于 19 MB 的计算机,“中型”定义为 RAM 在 19-63 MB 之间的计算机,“大型”定义为 RAM 等于或大于 64 MB 的计算机。虽然该代码仍然存在,但现在几乎所有计算机均为“大型”)。

对于 Windows 2000 Server:

小型系统 -150,000 字节,提供 1000 个路由
中型系统 - 1,500,000 字节,提供 10,000 个路由
大型系统 - 5,000,000 字节,提供 40,000 个路由
对于 Windows 2000 Professional:

150,000 字节,提供 1000 个路由
说明: 该参数控制系统允许路由表数据与路由自身的最大内存数。它用于防止因添加大量路由而将计算机内存用尽。

MaxNumForwardPackets

项: Tcpip\Parameters

数值类型:REG_DWORD - 数字

有效范围: 1-0xFFFFFFFF

默认值: 0xFFFFFFFF

说明: 该参数限制可以为路由器数据包队列分配的 IP 数据包报头总数。该数值必须大于或等于 NumForwardPackets 参数值。有关详细信息,请参见 NumForwardPackets 的说明。

MaxUserPort

项:Tcpip\Parameters

数值类型: REG_DWORD - 最大端口数

有效范围: 5000-65534(十进制)

默认值: 0x1388(十进制为 5000)

说明: 当应用程序从系统请求可用的用户端口数时,该参数控制所使用的最大端口数。正常情况下,短期端口的分配数量为 1024-5000。将该参数设置到有效范围以外时,就会使用最接近的有效数值(5000 或 65534)。

MTU

项: Tcpip\Parameters\Interfaces\interface

数值类型:REG_DWORD - 数字

有效范围: 88-基础网络的 MTU

默认值: 0xFFFFFFFF

说明:该参数覆盖网络接口的默认最大传输单位 (MTU)。MTU 是基础网络上传输的最大数据包大小(字节)。它包括传输报头。IP 数据报可以跨多个数据包。当数值大于基础网络的默认值时,传输就会使用网络默认 MTU。数值小于 88 时,传输就会将 MTU 设为 88。

备注 Windows 2000 TCP/IP 默认情况下使用 PMTU 检测,并查询 NIC 驱动程序以查找本地 MTU 大小。通常并不需要更改 MTU 参数,并可能导致性能下降。有关详细信息,请参见本文 TCP 部分有关 PMTU 检测的讨论。

NumForwardPackets

项: Tcpip\Parameters

数值类型:REG_DWORD - 数字

有效范围: 1-小于 0xFFFFFFFF 的合理数值

默认值: 0x32(十进制为 50 )

说明:该参数确定路由器数据包队列分配的 IP 数据包报头数。当所有报头都在使用时,系统试图分配更多的报头,直到达到 MaxNumForwardPackets 所配置的数量。该数值至少与 ForwardBufferMemory 除以与路由器相连网络的最大 IP 数据大小的数值一样大。该参数不应大于 ForwardBufferMemory 除以 256 的结果值,因为每个数据包至少占用 256 个字节的转发缓冲内存。对于给定的 ForwardBufferMemory 大小,理想的转发数据包数取决于网络上的通信类型,且在这两个值之间。如果路由没有启用,则忽略该参数且不分配报头。

NumTcbTablePartitions

项: Tcpip\Parameters\

数值类型:REG_DWORD - TCB 表分区数

有效范围:1-0xFFFF

默认值: 4

说明:该参数控制 TCB 表分区数。对 TCB 表分区,由于减少了 TCB 表上的竞争,可提高在多处理器系统上的可缩放性。在对性能进行仔细研究之前,不可修改该数值。建议的最大数值为(CPU 数)( 2。

PerformRouterDiscovery

项: Tcpip\Parameters\Interfaces\interface

数值类型:REG_DWORD

有效范围:0、1、2

0(禁用)
1(启用)
2(仅当 DHCP 发送路由器发现选项时启用)

默认值: 2,由 DHCP 控制,默认情况下关闭。

说明:该参数控制 Windows 2000 是否根据每个接口上的 RFC 1256 执行路由器发现。也请参见 SolicitationAddressBcast。

PerformRouterDiscoveryBackup

项: Tcpip\Parameters\Interfaces\interface

数值类型:REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 无

说明:该参数用于内部保留 PerformRouterDiscovery 数值的备份副本。不应对它进行修改。

PPTPTcpMaxDataRetransmissions

项:Tcpip\Parameters

数值类型: REG_DWORD - 重新传输 PPTP 数据包的次数

有效范围:0-0xFF

默认值: 5

说明:该参数控制在没有确认情况下重新传输 PPTP 数据包的次数。添加该参数,可以配置 PPTP 通信的重新传输,使之与常规 TCP 通信的重新传输分开。

SackOpts

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明: 该参数控制选择性确认(SACK,在 RFC 2018 中定义)支持是否启用。在本文的“传输控制协议 (TCP)”一节对 SACK 进行了详细的阐述。

SolicitationAddressBcast

项: Tcpip\Parameters\Interfaces\interface

数值类型:REG_DWORDBoolean

有效范围:0、1(false、true)

默认值: 0 (false)

说明:该参数用于配置 Windows 以广播而不是多播方式发送路由器发现的消息,如 RFC 1256 中所述。默认情况下,如果启用路由器发现,则路由器发现请求发送到所有路由器多播组 (224.0.0.2)。也可参见 PerformRouterDiscovery。

SynAttackProtect

项: Tcpip\Parameters

数值类型:REG_DWORD

有效范围:0、1、2

0(没有 SYN 攻击保护)
1(如果 TcpMaxHalfOpen 和 TcpMaxHalfOpenRetried 设置满足要求,
可减少重新传输重试和
延迟 RCE(路由缓存项)的创建。)
2(除 1 外的另一个 Winsock 延迟指示。)

备注 当系统发现自身被攻击,则在任何套接字上的下列选项不再启用:可缩放窗口 (RFC 1323) 与每个适配器上已配置的 TCP 参数(初始 RTT、窗口大小)。这是因为当保护生效时,在发送 SYN-ACK 之前不再查询路由缓存项,并且连接过程中 Winsock 选项不可用。

默认值: 0 (false)

推荐值: 2

说明:SYN 攻击保护包括减少 SYN-ACK 重新传输次数,以减少分配资源所保留的时间。路由缓存项资源分配延迟,直到建立连接为止。如果 synattackprotect = 2,则 AFD 的连接指示一直延迟到三路握手完成为止。注意,仅在 TcpMaxHalfOpen 和 TcpMaxHalfOpenRetried 设置超出范围时,保护机制才会采取措施。

Tcp1323Opts

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字(标志)

有效范围: 0、1、2、3

0(禁用 RFC 1323 选项)
1(仅启用窗口缩放)
2(仅启用时间戳)
3(两个选项均启用)

默认值: 没有数值;默认行为如下所示:除非要求提供,否则不要启用选项。

说明:该参数控制 RFC 1323 时间戳与窗口缩放选项。默认情况下,启用时间戳与窗口缩放,但是可以使用标志位进行控制。0 位控制窗口缩放,1 位控制时间戳。

TcpDelAckTicks

项: Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 数字

有效范围: 0-6

默认值: 2(200 毫秒)

说明:指定每个接口上延迟 ACK 计时器所使用 100 毫秒间隔的个数。默认情况下,延迟 ACK 计时器为 200 毫秒。将该数值设置为 0,将禁用延迟确认,计算机就会立即确认所收到的每个数据包。Microsoft 不建议在未对环境进行仔细研究的情况下更改该默认值。

TcpInitialRTT

项: Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 数字

有效范围: 0-0xFFFF

默认值: 3 秒

说明:该参数控制在每个接口上 TCP 连接请求以及初始数据重新传输所使用的初始超时大小。调整该参数时要小心,因为使用了指数补偿。将该数值设置为大于 3,对于不存在的地址会产生更长的时间延迟。

TcpMaxConnectResponseRetransmissions

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 0-255

默认值: 2

说明:该参数控制未收到 SYN 确认时,连接请求重新传输 SYN-ACK 的次数。如果该数值大于或等于 2,栈内部使用 SYN 攻击保护。如果该数值小于 2,栈根本不读取注册表值来获得 SYN 攻击保护。也可参见 SynAttackProtect、TCPMaxPortsExhausted、TCPMaxHalfOpen 和 TCPMaxHalfOpenRetried。

TcpMaxConnectRetransmissions

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 0-255(十进制)

默认值: 2

说明: 该参数确定放弃前,TCP 重传连接请求 (SYN) 的次数。在给定的连接上,对于每个连续重新传输,重传超时数加倍。初始超时数是由 TcpInitialRtt 注册表值控制的。<0}

TcpMaxDataRetransmissions

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 0-0xFFFFFFFF

默认值: 5

说明: 该参数控制在放弃连接前,TCP 重新传输单个数据段(非连接请求段)的次数。在连接上对于每个连续重新传输,重传超时数加倍。响应恢复后,将重置该数值。在每个连接上使用以前测量的往返时间(平滑往返时间 或 SRTT),动态地调整重传超时 (RTO) 数值。在新连接上初始 RTO 是由 TcpInitialRtt 注册表值控制的。

TcpMaxDupAcks

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 1-3

默认值: 2

说明:该参数确定在启动快速重传那些在传输途中丢失的数据段之前,必须收到相同序号发送数据段的重复应答次数。在本文“传输控制协议 (TCP)”一节对此进行了详细讨论。

TcpMaxHalfOpen

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 100-0xFFFF

默认值: 100(Professional、Server)、500 (Advanced Server)

说明:该参数控制 SYN 攻击保护启动前,允许处于 SYN-RCVD 状态的连接数量。如果将 SynAttackProtect 设为 1,确保该数值低于要保护的端口上 AFD 侦听预备的值(有关详细信息,参见附录 C 中的预备参数)。有关详细信息,参见 SynAttackProtect 参数。

TcpMaxHalfOpenRetried

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 80-0xFFFF

默认值: 80 (Professional、Server),400 (Advanced Server)

说明:该参数控制在 SYN 攻击保护启动前处于 SYN-RCVD 状态的连接数量,对于该连接至少有一个 SYN 重传已经发送。有关详细信息,请参见 SynAttackProtect 参数。

TcpMaxPortsExhausted

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 0-0xFFFF

默认值: 5

说明:该参数控制 SYN 攻击保护启动的临界点。当 TcpMaxPortsExhausted 连接请求因连接的可用预备设为 0 被系统拒绝时,SYN 攻击保护就会启动。

TcpMaxSendFree

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 0-0xFFFF

默认值: 5000

说明:该参数控制 TCP 报头表的大小限制。在有大量 RAM 的机器上,增加该设置可以提高 SYN 攻击期间的响应性能。

TcpNumConnections

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 0-0xFFFFFE

默认值: 0xFFFFFE

说明:该参数限制 TCP 同时打开连接的最大数量。

TcpTimedWaitDelay

项: Tcpip\Parameters

数值类型: REG_DWORD - 时间(秒)

有效范围: 30-300(十进制)

默认值: 0xF0(十进制为 240)

说明:该参数确定在关闭前连接处在 TIME_WAIT 状态的时间。当连接处于 TIME_WAIT 状态时,不能重新使用该套接字对。这也称为 2MSL 状态,因为该数值是网络上最大段生存时间的两倍。有关更详细的信息,请参见 RFC 793。

TcpUseRFC1122UrgentPointer

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:该参数指定对于紧急数据,TCP 使用 RFC 1122 规范,还是使用由 BSD 派生的系统的模式。这两种机制对 TCP 报头中的紧急指针以及紧急数据长度的解释是不同的。它们不是可互操作的。Windows 2000 默认为 BSD 模式。

TcpWindowSize

项: Tcpip\Parameters, Tcpip\Parameters\Interface\interface

数值类型: REG_DWORD - 字节数

有效范围: 0-0x3FFFFFFF(十进制为 1073741823)。 实际上,TCP/IP 栈将设置值舍入到最接近的最大段大小 (MSS) 的倍数。仅当连接到支持 RFC 1323 窗口缩放的其它系统时,方可获得大于 64 KB 的数值,本文“传输控制协议 (TCP)”一节对窗口缩放进行了讨论。

默认值:取以下数值的最小值:

0xFFFF
GlobalMaxTcpWindowSize(另一个注册表参数)
四倍网络上最大 TCP 数据大小的上舍入值
16384 舍入到网络 TCP 数据大小的偶数倍
对于以太网,开始时默认值为 17520,但是当连接到支持扩展 TCP 报头选项(如 SACK 和 TIMESTAMPS)的另一个计算机时,可能会稍微减小,因为使用这些选项,TCP 报头长度就会超出通常的 20 个字节,这样数据可用的字节数就会比原来稍微减少

说明: 该参数确定所提供的最大 TCP 接收窗口大小。接收窗口是指一个发送者在未收到确认的情况下可以发送的字节数。总的来说,大的窗口可以改进高延缓和高带宽网络上的性能。要获得最大效率,接收窗口应是 TCP 最大段大小 (MSS) 的偶数倍。根据注册表项的位置,该参数可以是基于接口的参数,也可以是全局参数。如果给定接口已有一个数值,该数值就会覆盖系统范围的数值。也可参见 GobalMaxTcpWindowSize。

TrFunctionalMcastAddress

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明:该参数确定是使用 RFC 1469 中定义的令牌环多播地址,还是使用子网广播地址发送 IP 多播。默认值设为 1,计算机就会使用 RFC 1469 令牌环多播地址发送 IP 多播。将该数值设置为 0,计算机使用子网广播地址发送 IP 多播。

TypeOfInterface

项: Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD

有效范围:0、1、2、3

默认值: 0(允许多播与单播)

说明:该参数确定接口获得单播、多播,还是两种通信类型的路由,以及是否可以转发这些通信类型。如果将它设置为 0,允许单播与多播通信。如果将它设置为 1,禁用单播通信。如果将它设置为 2,禁用多播通信。如果将它设置为 3,单播与多播通信均被禁用。由于该参数影响转发与路由,如果在计算机中没有其它接口用于多播且存在默认路由,本地应用程序通过接口向外发送多播仍是可能的。

UseZeroBroadcast

项: Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:如果该参数设置为 1 (true),IP 将使用全“0”的广播 (0.0.0.0) 而不是全“1”的广播 (255.255.255.255)。大多数系统使用全“1”的广播,但是一些从 BSD 实现派生的系统使用全“0”的广播。使用不同广播的系统在同一网络上无法很好地进行互操作。

用户接口的可配置参数
根据用户所提供的信息,可以由 NCAP 自动创建并修改下列参数。不必在注册表中直接配置这些参数。

DefaultGateway

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - 以点隔开的十进制 IP 地址列表

有效范围:有效 IP 地址的任一设置

默认值: 无

说明: 对于要发往其它子网的数据包且没有更具体的路由可用时,该参数指定了一组网关来路由这些数据包。如果它有一个有效值,该参数将覆盖 DhcpDefaultGateway 参数。任何时刻计算机只有一个活动默认网关,因此添加多个地址只是用作冗余。有关详细信息,请参见本文“间隔网关检测”一节。

Domain

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_SZ - 字符串

有效范围:任何有效的 DNS 域名

默认值: 无

说明:该参数指定接口的 DNS 域名。在 Windows 2000 中,该参数与 NameServer 均是每个接口上的参数,而不是整个系统范围的参数。如果该参数存在,它就会覆盖 DhcpDomain 参数(由 DHCP 客户填写)。

EnableDhcp

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值:0 (false)

说明:该参数设置为 1 (true),DHCP 客户服务就会使用 DHCP 在该适配器上配置第一个 IP 接口。

EnableSecurityFilters

项:Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值:0 (false)

说明:该参数设置为 1 (true),就会启用网际协议安全筛选器。请参见 TcpAllowedPorts、UdpAllowedPorts 和 RawIPAllowedPorts。要配置这些数值,在开始菜单上,指向设置,然后单击网络和拨号连接,右键单击本地连接,然后单击属性。选择 Internet 协议 (TCP/IP),单击属性,然后单击高级。单击选项选项卡,选择TCP/IP 筛选,然后单击属性。

Hostname

项:Tcpip\Parameters

数值类型: REG_SZ - 字符串

有效范围:任何有效 DNS 主机名

默认值: 系统的计算机名

说明:该参数指定系统的 DNS 主机名称,它是由 hostname 命令返回的。

IPAddress

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - 以点隔开的 IP 地址列表

有效范围:任何一组有效的 IP 地址

默认值:无

说明:该参数指定绑定到适配器的 IP 接口的 IP 地址。如果列表中的第一个地址是 0.0.0.0,则使用 DHCP 配置适配器上的主接口。适配器配有多于一个 IP 接口的系统称为“逻辑多宿主”系统。对于此参数中指定的每个 IP 地址,在 SubnetMask 参数中必须有一个有效的子网掩码数值。要使用 Regedt32.exe 添加参数,选择该项并键入 IP 地址列表,每次完成后按 Enter。然后转到 SubnetMask 参数,键入一组相应的子网掩码。

NameServer

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_SZ - 一个以空格分隔的点分十进制 IP 地址列表

有效范围:任何一组有效的 IP 地址

默认值: 无(空)

说明:该参数指定 Windows 套接字查询解析名称的 DNS 名称服务器。在 Windows 2000 中,该参数与 DomainName 是每个接口上的设置。

PPTPFiltering

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明: 该参数控制是否在每个适配器上启用 PPTP 筛选。如果将该数值设置为 1,适配器仅接受 PPTP 连接。如果适配器连接到 Internet 等公共网络上,它可减少遭受黑客攻击的可能性。

RawIpAllowedProtocols

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - IP 协议编号列表

有效范围:任何一组有效的 IP 协议编号

默认值:无

说明: 该参数指定启用安全筛选时在 IP 接口上接收传入数据报的 IP 协议编号列表 (EnableSecurityFilters = 1)。该参数通过原始 IP 传输控制接收 IP 数据报,原始 IP 传输用于提供原始套接字。它不控制传递到其它传输(例如,TCP)的 IP 数据报。空的列表说明没有可接受的数值。只有一个为 0 的数值说明所有数值均是可以接受的。对于包含 0 与其它非零数值的列表,其行为未定义。如果接口没有配置该参数,则所有数值都是可接受的。该参数适用于指定适配器上配置的所有 IP 接口。

SearchList

项:Tcpip\Parameters

数值类型: REG_SZ - 以空格隔开的 DNS 域名后缀列表

有效范围:1-50

默认值:无

说明: 该参数提供了一个域名后缀列表,如果通过 DNS 解析原有名称失败,就会将该后缀附到原有名称后面进行解析。默认情况下,只有“域”参数的数值是可以附加的。该参数用于 Windows Sockets 接口。也可参见 AllowUnqualifiedQuery 参数。

SubnetMask

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - 以点隔开的十进制 IP 地址列表

有效范围:任何一组有效的 IP 地址。

默认值:无

说明:该参数指定适配器绑定的 IP 接口的子网掩码。如果在列表中的第一个掩码是 0.0.0.0,则在适配器上使用 DHCP 配置主接口。对于 IPAddress 参数中指定的每个 IP 地址,在该参数中必须有一个有效的子网掩码数值。

TcpAllowedPorts

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - TCP 端口编号列表

有效范围:任何一组有效的 TCP 端口编号

默认值: 无

说明: 该参数指定启用安全筛选时在 IP 接口上接收传入数据报的 IP 协议编号列表 (EnableSecurityFilters = 1)。空的列表说明没有可以接受的数值。只有一个为 0 的数值说明所有数值都是可以接受的。对于包含 0 与其它非零数值的列表,其性能未定义。如果接口没有配置该参数,则所有数值均可以接受。该参数适用于指定适配器上配置的所有 IP 接口。

UdpAllowedPorts

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - UDP 端口编号列表

有效范围:任何有效 UDP 端口编号设置

默认值: 无

说明: 该参数指定在启用安全配置筛选的情况下对于在 IP 接口上接收传入数据包的 UDP 端口编号列表。空的列表说明没有可以接受的数值。只有一个为 0 的数值说明所有数值都是可以接受的。对于包含 0 与其它非零数值的列表,其性能未定义。如果接口没有配置该参数,则所有数值均可以接受。该参数适用于指定适配器上配置的所有 IP 接口。

可使用 route 命令配置的参数
Route 命令可以在 Tcpip\Parameters\PersistentRoutes 注册表项下保存永久性 IP 路由。每个路由以逗号隔开的列表形式保存在数值名称字符串中:

destination,subnet mask,gateway,metric

例如,命令:

route add 10.99.100.0 MASK 255.255.255.0 10.99.99.1 METRIC 1 /p

产生注册表值:

10.99.100.0,255.255.255.0,10.99.99.1,1

该数值类型是 REG_SZ。没有数值数据(空字符串)。可以使用 route 命令添加和删除这些数值。没有必要直接对它们进行配置。

不可配置的参数
下列参数是由 TCP/IP 组件内部创建并使用的。不应使用注册表编辑器修改这些参数。在此列出这些参数仅供参考。

DhcpDefaultGateway

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - 以点隔开的十进制 IP 地址列表

有效范围:任何一组有效的 IP 地址

默认值: 无

说明: 对于要发往其它子网的数据包且没有更具体的路由可用时,该参数指定了一组网关来路由这些数据包。该参数是由 DHCP 客户服务(如启用)写入的。该参数被一个有效 DefaultGateway 参数所覆盖。虽然每个接口上均设置该参数,通常对于计算机只有一个活动的默认网关。如果第一个网关失败,可改用其它项。

DhcpIPAddress

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_SZ - 以点隔开的十进制 IP 地址

有效范围:任何有效的 IP 地址

默认值:无

说明:该参数指定接口由 DHCP 配置的 IP 地址。如果 IPAddress 参数包含的第一个数值不是 0.0.0.0,则该数值就会覆盖此参数。

DhcpDomain

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_SZ - 字符串

有效范围:任何有效的 DNS 域名

默认值: 无(由 DHCP 服务器提供)

说明:该参数指定接口的 DNS 域名。在 Windows 2000 中,该参数与 NameServer 目前是每个接口的参数,而不是系统范围的参数。如果 Domain 项存在,它将覆盖 DhcpDomain 数值。

DhcpNameServer

项:Tcpip\Parameters

数值类型: REG_SZ - 一个以空格分隔的点分十进制 IP 地址列表

有效范围:一组有效的 IP 地址

默认值: 无

说明:该参数指定 Windows Sockets 解析名称时查询的 DNS 名称服务器。该参数是由 DHCP 客户服务(如启用)写入的。如果 NameServer 参数有一个有效的数值,则它将覆盖此参数。

DhcpServer

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_SZ - 以点隔开的十进制 IP 地址

有效范围:任何有效 IP 地址

默认值:无

说明:该参数指定了给 DhcpIPAddress 参数中 IP 地址授予租约的 DHCP 服务器的 IP 地址。

DhcpSubnetMask

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_SZ - 以点隔开的十进制 IP 子网掩码

有效范围:对于已配置 IP 地址有效的任何子网掩码

默认值:无

说明:该参数为 DhcpIPAddress 参数中的地址指定由 DHCP 配置的子网掩码。

DhcpSubnetMaskOpt

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_SZ - 以点隔开的十进制 IP 子网掩码

有效范围:对于已配置 IP 地址有效的任何子网掩码

默认值:无

说明:该参数是由 DHCP 客户服务填写的,用于建立 DhcpSubnetMask 参数,它栈实际使用的参数。在将该值插入到 DhcpSubnetMask 参数之前,执行有效性检查。

Lease

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 时间(秒)

有效范围:1-0xFFFFFFFF

默认值:无

说明:DHCP 客户服务使用该参数存储时间(秒数),在此期间该适配器 IP 地址的租约有效。

LeaseObtainedTime

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 绝对时间(秒数),从 1/1/70 晚上 12 点开始计算

有效范围:1-0xFFFFFFFF

默认值:无

说明:DHCP 客户服务使用该参数存储时间,届时该适配器 IP 地址的租约生效。

LeaseTerminatesTime

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 绝对时间(秒数),从 1/1/70 晚上 12 点开始计算

有效范围:1-0xFFFFFFFF

默认值:无

说明:DHCP 客户服务使用该参数存储时间,届时该适配器 IP 地址的租约期满。

LLInterface

项:Tcpip\Parameters\Adapters\interface

数值类型: REG_SZ - Windows 2000 设备名称

有效范围:合法的 Windows 2000 设备名称

默认值:空字符串(空)

说明:该参数用于将 IP 绑定到其它链接层协议而不是内置 ARP 模块。该参数的数值是 IP 绑定的 Windows 2000 设备名。例如,该参数用于与 RAS 组件联用。仅当 ARP 模块而不是 LAN 绑定到 IP 时,它才存在。

NTEContextList

项: Tcpip\Parameters\Interfaces\interface

数值类型:REG_MULTI_SZ - 数字

有效范围:0-0xFFFF

默认值: 无

说明:该参数标识与接口关联的 IP 地址的上下文。与一个接口关联的每个 IP 地址有它自己的上下文编号。这些数值用于内部标识一个 IP 地址,不应对其进行修改。

T1

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 绝对时间(秒数),从 1/1/70 晚上 12 点开始计算

有效范围:1-0xFFFFFFFF

默认值:无

说明:DHCP 客户服务使用该参数存储时间,届时该客户服务先与授予租约的服务器连接,续订该适配器 IP 地址的租约。

T2

项:Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 绝对时间(秒数),从 1/1/70 晚上 12 点开始计算

有效范围:1-0xFFFFFFFF

默认值:无

说明:DHCP 客户服务使用该参数存储时间,届时该客户服务通过广播续订请求来续订该适配器 IP 地址的租约。仅当因为某些原因 DHCP 客户服务不能与原始服务器续订租约时,才会启用时间 T2。

ATM ARP 客户参数
ATM ARP 与每个接口的 TCP/IP 参数一起放在 AtmArpC 子项下。ATM 适配器的某个 TCP/IP 接口的注册表转储示例如下所示。

HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parame
ters\Interfaces\{A24B73BE-D2CD-11D1-BE08-8FF4D413E1BE}\AtmArpC

SapSelector = REG_DWORD 0x00000001
AddressResolutionTimeout = REG_DWORD 0x00000003
ARPEntryAgingTimeout = REG_DWORD 0x00000384
InARPWaitTimeout = REG_DWORD 0x00000005
MaxResolutionAttempts = REG_DWORD 0x00000004
MinWaitAfterNak = REG_DWORD 0x0000000a
ServerConnectInterval = REG_DWORD 0x00000005
ServerRefreshTimeout = REG_DWORD 0x00000384
ServerRegistrationTimeout = REG_DWORD 0x00000003
DefaultVcAgingTimeout = REG_DWORD 0x0000003c
MARSConnectInterval = REG_DWORD 0x00000005
MARSRegistrationTimeout = REG_DWORD 0x00000003
JoinTimeout = REG_DWORD 0x0000000a
LeaveTimeout = REG_DWORD 0x0000000a
MaxJoinLeaveAttempts = REG_DWORD 0x00000005
MaxDelayBetweenMULTIs = REG_DWORD 0x0000000a
ARPServerList = REG_MULTI_SZ "4700790001020000000000000000A03E00000200"
MARServerList = REG_MULTI_SZ "4700790001020000000000000000A03E00000200"
MTU = REG_DWORD 0x000023dc
PVCOnly = REG_DWORD 0x00000000

下面说明上述的每个参数。

SapSelector

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 数字

有效范围: 1-255

默认值: 1

说明:指定选择器字节数值,ATMARP 客户将它用作其 ATM 地址的第二十个字节。设置的此地址用于注册 ATMARP 服务器与多播地址解析服务器 (MARS)。

AddressResolutionTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 1-60

默认值: 3

说明:指定 ATMARP 客户在为单播 IP 地址发送 ARP 请求(或为多播/广播 IP 地址发送 MARS 请求)之后等待响应的时间。如果该计时器超时,则 ATMARP 客户重新传输该请求,最多为 (MaxResolutionAttempts - 1) 次。

ARPEntryAgingTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 90-1800

默认值: 900 秒(15 分钟)

说明:指定在使该参数失效前,ATMARP 客户为单播 IP 地址保留地址解析的时间。如果该计时器到期,则 ATMARP 客户采取下列措施之一:

如果没有与 IP 地址相关的虚拟电路 (VC) ,它删除该 IP 地址的 ARP 项。
如果至少有一个与该 IP 地址相关的永久虚拟电路 (PVC),则它在 PVC 上使用“反向 ARP”,使 ARP 项重新生效。
如果至少有一个与该 IP 地址关联的 SVC,它向 ARP 服务器发送一个 ARP 请求,使 ARP 项重新生效。
InARPWaitTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 1-60

默认值: 5

说明:指定 ATMARP 客户发送反向地址解析协议 (InARP) 请求,使单播 IP 地址到 ATM 地址映射(即 ARP 项)重新生效时等待响应的时间。如果该计时器到期,ATMARP 客户删除包含此 IP 地址的 ARP 表项。

MaxResolutionAttempts

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 数字

有效范围: 1-255

默认值: 4

说明:指定 ATMARP 客户将一个单播或多播或广播 IP 地址解析到 ATM 地址所做的最大尝试次数。

MinWaitAfterNak

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 1-60

默认值: 10

说明:指定 ATMARP 客户在从 ARP 服务器或 MARS 接收到失败响应 (ARP NAK) 之后的等待时间。这可以防止 ATMARP 客户过于频繁地向服务器查询不存在或不知道的 IP 地址。

ServerConnectInterval

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 1-30

默认值: 5

说明:指定 ATMARP 客户在连接到 ARP 服务器失败之后和重新连接之前等待的时间。

ServerRefreshTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 90-1800

默认值: 900 秒(15 分钟)

说明:指定 ATMARP 客户发送 ARP 请求用其自己的 IP/ATM 地址信息刷新 ATMARP 服务器缓存的时间间隔。

ServerRegistrationTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 1-60

默认值: 3

说明:该参数指定 ATMARP 客户发送用来将自己 IP/ATM 信息注册到 ATMARP 服务器的“ARP 请求”数据包后,等待“ARP 应答”数据包的时间。如果计时器到期,ATMARP 客户重新发送“ARP 请求”数据包。

DefaultVcAgingTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 10-1800

默认值: 60

说明:指定 ATMARP 客户启动的所有 VC 的静止超时。该参数对 PVC 不适用。静止是指在任一方向上都没有数据活动的情况。如果该计时器到期,ATMARP 客户就会断开 VC 连接。

MARSConnectInterval

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 1-30

默认值: 5

说明:指定连接 MARS 失败后与重新连接前的等待时间。

MARSRegistrationTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 1-60

默认值: 3

说明:该参数指定 ATMARP 客户发送用来将自己 ATM 地址注册到 MARS 的“MARS 加入”数据包后等待应答数据包的时间。如果该计时器到期,则 ATMARP 客户重新传输“MARS 加入”数据包。

JoinTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 5-60

默认值: 10

说明:该参数指定 ATMARP 客户发送用来在 IP 多播组(或 IP 广播地址)建立成员关系的“MARS 加入”数据包后,等待应答数据包的时间。如果该计时器到期,则 ATMARP 客户重新传输“MARS 加入”数据包,最多 MaxJoinLeaveAttempts 次。

LeaveTimeout

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 5-60

默认值: 10

说明:该参数指定 ATMARP 客户发送用来终止与 IP 多播组(或 IP 广播地址)成员关系的“MARS 离开”数据包后,等待应答数据包的时间。如果计时器到期,则 ATMARP 客户重新传输“MARS 离开”数据包,最多 MaxJoinLeaveAttempts 次。

MaxJoinLeaveAttempts

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 数字

有效范围: 1-10

默认值: 5

说明:指定 ATMARP 客户加入或离开 IP 多播(或广播)组的最大次数。

MaxDelayBetweenMULTIs

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 秒数

有效范围: 2-60

默认值: 5

说明:对于一个 MARS 请求,该参数指定 ATMARP 客户预计的两个连续 MARS MULTI 数据包之间的最大延迟。

ARPServerList

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_MULTI_SZ

有效范围:包含 ATM 地址的字符串列表

默认值: 4700790001020000000000000000A03E00000200

说明:这是 ARP 客户允许注册的 ARP 服务器列表。该列表以故障转移方式使用;也就是说,ARP 客户依次使用每个地址注册,直到成功为止。

MARServerList

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_MULTI_SZ - 字符串列表

有效范围: 包含 ATM 地址的字符串列表

默认值: 4700790001020000000000000000A03E00000200

说明:这是 ARP 客户允许注册的 MARS 服务器列表。该列表以故障转移方式使用;也就是说,ARP 客户依次使用每个地址注册,直到成功为止。

MTU

项: Tcpip\Parameters\Interfaces\interface\AtmArpC

数值类型: REG_DWORD - 字节数

有效范围: 9180-65527

默认值: 9180

说明:指定该接口向 IP 层报告的最大传输单位。

附录 B:TCP 上的 NetBIOS 配置参数
所有 NetBT 参数均是位于 HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services 的两个不同子项之一的注册表值:

NetBT\Parameters
NetBT\Adapters\Interfaces\interface,其中 interface 指 NetBT 绑定的网络接口的子项。
后面的项是每个接口特有的。如果系统是使用 DHCP 配置的,那么在命令提示符下使用 ipconfig /renew 命令,就会使参数的更改生效。否则,您必须重新启动系统,使这些参数的更改生效。

可使用注册表编辑器配置的参数
在 TCP/IP 组件安装过程中,NCPA 安装下列参数的默认数值。可以使用注册表编辑器 (Regedt32.exe) 对它们进行修改。默认情况下,注册表中的一些参数是可见的,但大多数参数必须创建,以便修改 NetBT 驱动程序设置的默认值。

BacklogIncrement

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 3-0x14(十进制为 1-20)

默认值: 3

说明: 添加该参数是为了解决 Internet SYN 攻击问题。当连接 NetBIOS TCP 端口 (139) 时,如果空闲连接块的数量小于 2,系统就会创建 BackLogIncrement 个新连接块。每个连接块占用 78 字节内存。可以使用 MaxConnBackLog 参数,设定允许的连接总数限制。每个 NetBT 连接需要一个连接块。

BcastNameQueryCount

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 1-0xFFFF

默认值: 3

说明:该数值确定在没有收到响应的情况下 NetBT 广播特定名称查询的次数。

BcastQueryTimeout

项: Netbt\Parameters

数值类型: REG_DWORD - 时间(毫秒)

有效范围: 100-0xFFFFFFFF

默认值: 0x2ee(十进制为 750)

说明:该数值确定同一名称的两个连续广播名称查询之间的时间间隔。

BroadcastAddress

项: Netbt\Parameters

数值类型: REG_DWORD - 4 字节、小端编码 IP 地址

有效范围: 0-0xFFFFFFFF

默认值:每个网络全“1”的广播地址

说明: 对于所有与广播名称相关的数据包,该参数可强制 NetBT 使用指定的地址。默认情况下,NetBT 使用每个网络相应的全“1”广播地址(即,对于地址为 10.101.0.0、子网掩码为 255.255.0.0 的网络,子网广播地址为 10.101.255.255)。例如,如果网络使用全“0”的广播地址(使用 UseZeroBroadcast TCP/IP 参数设置)时,就要设置该参数。在上面的示例中,合适的子网广播地址是 10.101.0.0。该参数然后被设置为 0x0b650000。该参数是全局的,而且用于 NetBT 绑定的所有子网上。

CachePerAdapterEnabled

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围: 0、1(false、true)

默认值: 1 (true)

说明: 该数值确定是否在每个适配器上缓存 NetBIOS 远程名称。Nbtstat -c 已得到增强,以显示每个适配器的名称缓存。

CacheTimeout

项: Netbt\Parameters

数值类型: REG_DWORD - 时间(毫秒)

有效范围: 0xEA60-0xFFFFFFFF

默认值: 0x927c0(600000 毫秒 = 10 分钟)

说明:该数值确定在远程名称表中缓存名称的时间间隔。nbtstat -c 命令可用于查看在缓存中每个名称的剩余时间。

ConnectOnRequestedInterfaceOnly

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围: 0、1(false、true)

默认值: 0 (false)

说明:该数值可用于设定仅在所请求的适配器上允许 NetBT 连接。当在多宿主计算机上的重定向器调用另一个“计算机名称”时,它就会调用所绑定的所有 NetBT 传输(协议/适配器绑定)。每个传输独立地传到目标名称。设置该参数可将每个传输限定为:通过自己的适配器连接其它计算机,以避免交叉通信。有关详细信息,请参见本文“多宿主计算机的 NetBIOS 名称注册与解析”一节

该参数已不再使用,所以它不起作用就不足不奇了。

EnableDns

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明:如果将该值设为 1 (true),NetBT 就会向 DNS 服务器查询不能由 WINS、广播或 Lmhosts 文件解析的名称。

EnableProxyRegCheck

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:如果该参数设置为 1 (true),如果该名称已使用 WINS 注册,或者该名称以其它 IP 地址放在代理的本地名称缓存中,代理名称服务器就会给广播名称注册发送一个否定响应。只要 WINS 有名称映射,该功能可防止系统更改其 IP 地址。基于这个原因,默认情况下它被禁用。

InitialRefreshT.O.

项: Netbt\Parameters

数值类型: REG_DWORD - 时间(毫秒)

有效范围: 960000-0xFFFFFFF

默认值: 960000(16 分钟)

说明:该参数指定在名称注册期间 NetBT 所使用的初始刷新超时。当它首次注册名称时,NetBT 试图按该时间间隔的八分之一连接 WINS 服务器。当它收到注册成功响应,该响应包含要使用的新刷新间隔。

LmhostsTimeout

项: Netbt\Parameters

数值类型: REG_DWORD - 时间(毫秒)

有效范围: 1000-0xFFFFFFFF

默认值: 6000(6 秒)

说明: 该参数指定 NetBT 提交的 Lmhosts 和 DNS 名称查询的超时值。计时器有一个超时数值精度,因此实际超时可以是该数值的两倍。

MaxConnBackLog

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 2-0x9c40(十进制为 1-40,000)

默认值: 1000

说明: 该数值确定 NetBT 分配的连接块的最大个数。有关详细信息请参见 BackLogIncrement 参数。

MaxPreloadEntries

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 0x3E8-0x7D0(十进制为 1000-2000)

默认值: 十进制为 1000

说明:该数值确定从 Lmhosts 文件中预装的最多项数。在 Lmhosts 文件中,要预装进缓存中的项标有 #PRE 标记。

MaxDgramBuffering

项: Netbt\Parameters

数值类型: REG_DWORD - 字节数

有效范围: 0x20000-0xFFFFFFFF

默认值: 0x20000 (128K)

说明: 该参数指定 NetBT 给所有正在进行的数据报发送动态分配的最大内存数 。一旦达到该限制,就会由于资源不足而使进一步发送失败。

MinimumRefreshSleepTime

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 21600000-4294967295

默认值: 21600000 ms(6 小时)

说明: 当机器置于睡眠或休眠模式时,如果 TTL 的一半小于 6 小时,则可使用该参数重新设置 WakeupTimer 上的 TTL。

MinimumFreeLowerConnections

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 20-500

默认值: 50

说明: 在系统启动时,该参数用于给系统分配空闲句柄数来接收传入连接。它们是正在使用的活动连接之外分配的句柄。一旦机器处于稳定状态,空闲句柄数增加到正在使用句柄的个数的一半。除非在注册表中已指定,否则空闲句柄数不会少于 50。

NameServerPort

项: Netbt\Parameters

数值类型: REG_DWORD - UDP 端口编号

有效范围: 0-0xFFFF

默认值: 0x89

说明:该参数确定 NetBT 向 WINS 发送与名称服务有关的数据包(如名称查询与名称注册)的目标端口编号。Microsoft WINS Server 在端口 0x89(十进制为 138)进行侦听。其它厂商的 NetBIOS 名称服务器可以在其它端口上进行侦听。

NameSrvQueryCount

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 0-0xFFFF

默认值: 3

说明:该数值确定 NetBT 在没有收到响应的情况下向 WINS 服务器发送查找指定名称查询的次数。

NameSrvQueryTimeout

项: Netbt\Parameters

数值类型: REG_DWORD - 时间(毫秒)

有效范围: 100-0xFFFFFFFF

默认值: 1500(1.5 秒)

说明: 该数值确定连接两次向 WINS 查询指定名称的时间间隔。

NodeType

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 1、2、4、8(B 节点、P 节点、M 节点、H 节点)

默认值:根据 WINS 服务器配置,设为 1 或 8

说明:该参数确定 NetBT 注册与解析名称所使用的方法。B 节点系统使用广播。P 节点系统仅使用到名称服务器 (WINS) 的点对点名称查询。M 节点系统先广播,然后查询名称服务器。H 节点系统先查询名称服务器,然后广播。通过 Lmhosts 和 DNS(如启用)解析名称,请遵循这些方法。如果此项存在,它就会覆盖 DhcpNodeType 项。如果两项均不存在,且客户没有配置 WINS 服务器,则系统默认为 B 节点。如果至少配置了一个 WINS 服务器,该系统默认为 H 节点。

NoNameReleaseOnDemand

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:该参数确定当收到网络的名称释放请求时,计算机是否释放其 NetBIOS 名称。添加该参数,管理员就可以保护机器免遭恶意名称释放攻击。

RandomAdapter

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明: 该参数仅适用于多宿主主机。如果将该参数设置为 1 (true),NetBT 从所有绑定的接口中随机选择 IP 地址以响应名称查询。通常情况下,响应包含要查询的接口地址。对于在同一网络上带有两个接口的服务器,该功能可用于其负载平衡。

RefreshOpCode

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 8、9

默认值: 8

说明: 该参数强制 NetBT 在名称刷新数据包中使用特定的“操作码”字段。在此区域,NetBT 协议的规范不太明确。虽然 Microsoft 实现倾向于使用默认数值 8,但其它一些实现如 Ungermann-Bass 则使用数值 9。两种实现必须使用同一操作码字段进行互操作。

ScopeId

项: Netbt\Parameters

数值类型: REG_SZ - 字符串

有效范围:任何由句点隔开的两部分或星号 (*) 组成的有效 DNS 域名。

默认值: 无

说明: 该参数指定该节点的 NetBIOS 名字范围。该数值不允许以句点开始。如果该参数包含一个有效数值,它就会覆盖同一名称的 DHCP 参数。忽略空的数值(空字符串)。将该参数设置为值 *,则说明没有范围限制,并覆盖 DHCP 参数。

SessionKeepAlive

项: Netbt\Parameters

数值类型: REG_DWORD - 时间(毫秒)

有效范围: 60,000-0xFFFFFFFF

默认值: 3,600,000(1 小时)

说明:该数值确定会话中保留传输的时间间隔。该值设置为 0xFFFFFFF,就用禁用保留

SingleResponse

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明: 该参数仅适用于多宿主主机。如果该参数设置为 1 (true),在名称查询响应中,NetBT 仅提供其绑定的一个接口的 IP 地址。默认情况下,所有绑定接口的地址均包含在内。

Size/Small/Medium/Large

项: Netbt\Parameters

数值类型: REG_DWORD

有效范围: 1、2、3(小型、中型、大型)

默认值: 1(小型)

说明:该数值确定用于保存本地与远程名称的名称表的大小。一般情况下,设置为 1(小型)就足够了。如果系统用做代理名称服务器,则该数值自动设置为 3(大型),以增大名称缓存散列表的大小。散列表的表元大小设置如下所示:

小型:16
中型:128
大型:256
SMBDeviceEnabled

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明: Windows 2000 支持一个新的网络传输,称为 SMB 设备,默认情况下它可以使用。在疑难解答时,可使用该参数禁用 SMB 设备。有关详细信息,请参见本文的“NetBT Internet/DNS 增强与 SMB 设备”一节。

TryAllNameServers

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明: 该参数控制到一个 IP 地址的 NetBIOS 会话建立请求失败后,客户是否继续从已配置的服务器列表中查询其它名称服务器。如果启用该参数,将查询列表中的所有 WINS 服务器并连接到提供的所有 IP 地址,如果仍找不到,才会通知用户请求失败。

TryAllIPAddrs

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明:当 WINS 服务器对名称查询返回一个 IP 地址列表时,它是按照地址是否和客户接口在同一子网上来排定优先顺序的。该参数控制客户是否 ping 列表中的 IP 地址并连接到第一个响应的地址;或者是否连接到(有序)列表中的第一个 IP 地址并因为连接失败而告失败。默认情况下,客户 ping 列表中的每个地址并试图连接到应答 ping 的第一个地址。

UseDnsOnlyForNameResolutions

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明: 该参数用于禁用所有 NetBIOS 名称查询。NetBIOS 名称注册与刷新仍然可以使用,且仍然允许 NetBIOS 会话。要在接口上完全禁用 NetBIOS,请参见 NetbiosOptions 参数。

WinsDownTimeout

项: Netbt\Parameters

数值类型: REG_DWORD - 时间(毫秒)

有效范围: 1000-0xFFFFFFFF

默认值: 15,000(15 秒)

说明: 该参数确定 NetBT 在连接任何 WINS 服务器失败之后再次使用 WINS 之前等待的时间。该功能主要用于允许暂时与网络断开的计算机(如膝上型电脑)启动,而不用等到每个 WINS 名称注册或查询超时。

连接 UI 的可配置参数
可以使用网络控制面板工具 (NCPA) 设置下列参数。不必直接配置这些参数。

EnableLmhosts

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

说明:如果将该数值设置为 1 (true),NetBT 就会搜索 Lmhosts 文件(如存在)以查找不能由 WINS 或广播解析的名称。默认情况下,没有 Lmhosts 文件数据库目录(由 Tcpip\Parameters\DatabasePath 指定),因此不会进行任何操作。该数值由 NCPA 的高级 TCP/IP 配置对话框写入。

EnableProxy

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明:如果将该数值设置为 1 (true),系统就会用作 NetBT 所绑定的网络代理名称服务器。代理名称服务器应答 WINS 已解析的名称的广播查询。使用代理名称服务器,B 节点实现的网络就可以连接到用 WINS 注册的其它子网上的服务器。

NameServerList

项: Netbt\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - 以空格分隔的点分十进制 IP 地址(即 10.101.1.200)

有效范围:任何有效 WINS 服务器 IP 地址列表。

默认值: 空(无地址)

说明: 该参数指定计算机配置的一组 WINS 服务器的 IP 地址。如果该参数包含有效数值,则它覆盖同一名称的 DHCP 参数。该参数替代 Windows NT 4.0 参数 NameServer 和 NameServerBackup,它们将不再使用。

NetbiosOptions

项: Netbt\Parameters\Interfaces\interface

数值类型: REG_DWORD - 数字

有效范围: 1、2

默认值: 1

说明: 该参数控制是否在每个接口上启用 NetBIOS。在开始菜单上,指向设置,然后单击网络和拨号连接。右键单击本地连接,然后单击属性。选择 Internet 协议 (TCP\IP),单击属性,然后单击高级。单击 WINS 选项卡。NetBIOS 选项是启用 TCP\IP 上的 NetBIOS、禁用 TCP\IP 上的 NetBIOS 或使用来自 DHCP 服务器的 NetBIOS 设置(默认设置)。启用时,该数值设置为 1。禁用时,该数值设置为 2。如果该项不存在,则使用 DHCPNetbiosOptions 项。如果该项确实存在,则忽略 DHCPNetbiosOptions。

不可配置的参数
下列参数由 NetBT 组件创建并使用。绝不能使用注册表编辑器修改这些参数,否则可能导致组件不稳定。以下列出的这些参数仅供参考。

DHCPNameServerList

项: Netbt\Parameters\Interfaces\interface

数值类型: REG_MULTI_SZ - 以点分隔的十进制 IP 地址再以空格隔开(即 10.101.1.200)

有效范围:任何有效 WINS 服务器 IP 地址列表。

默认值: 空(无地址)

说明: 该参数指定 WINS 服务器列表的 IP 地址,由 DHCP 服务所提供。该参数替代 Windows NT 4.0 参数 DHCPNameServer 和 DHCPNameServerBackup,它们将不再使用。也可参见 NameServerList,如果它存在,就会覆盖此参数。

DHCPNetbiosOptions

项: Netbt\Parameters\Interfaces\interface

数值类型: REG_DWORD - 数字

有效范围: 1、2

默认值: 1

说明: 该参数是由 DHCP 客户服务写入的。有关说明,请参见 NetbiosOptions 参数。

DhcpNodeType

项: Netbt\Parameters

数值类型: REG_DWORD - 数字

有效范围: 1-8

默认值: 1

说明: 该参数指定 NetBT 节点类型。它是由 DHCP 客户服务写入的(如启用)。有效的 NodeType 数值覆盖该参数。有关完整说明,请参见 NodeType。

DhcpScopeId

项: Netbt\Parameters

数值类型: REG_SZ - 字符串

有效范围:以句点隔开的名称字符串,如 microsoft.com

默认值:无

说明:该参数指定节点的 NetBIOS 名称领域。它是由 DHCP 客户服务写入的(如启用)。该数值不能以句点开始。有关详细信息,请参见 ScopeId 的项。

NbProvider

项: Netbt\Parameters

数值类型: REG_SZ - 字符串

有效范围: _tcp

默认值: _tcp

说明: 该参数在 RPC 组件内部使用。不可更改默认值。

TransportBindName

项: Netbt\Parameters

数值类型: REG_SZ - 字符串

有效范围: N/A

默认值: \Device\

说明:该参数在产品开发过程中内部使用。不可更改默认值。

附录 C:Windows Sockets 和 DNS 注册表参数
AFD 注册表参数
Afd.sys 是一个内核模型驱动程序,用于支持 Windows Sockets 应用程序。当有三个默认值时,则根据系统中检测到的内存数计算默认值:

第一个数值用于小型计算机的默认值(小于 19 MB)。
第二个数值是用于中型计算机的默认值(在 Windows 2000 Professional上:<32 MB,在 Windows 2000 Server上:<64 MB)。
第三个数值是用于大型计算机的默认值(在 Windows 2000 Professional 上:>32 MB,在 Windows 2000 Server:>64 MB)。
例如,如果默认值给定为 0/2/10,则包含 12.5 到 20 MB RAM 的系统的默认值为 2。

在下面目录中可以设置下列数值:

HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Services
\Afd
\Parameters:

DefaultReceiveWindow

数值类型:REG_DWORD

默认值:4096/8192/8192

说明:实施流控制前,AFD 在连接上缓冲的接收字节数。对于一些应用程序,在此设置较大的数值,性能会有所提高,但会增加资源的利用。应用程序可以使用 SO_RCVBUF 套接字选项,修改每个接口上的值。

DefaultSendWindow

数值类型:REG_DWORD

默认值:4096/8192/8192

说明:它类似于 DefaultReceiveWindow,但用于连接的发送端。

DisableAddressSharing

数值类型:REG_DWORD

默认值:0

范围:0、1

说明:该参数用于禁止进程间的地址共享(SO_REUSEADDR),这样,如果一个进程打开了一个套接字,其它进程则不能从中窃取数据。如果应用程序使用新的套接字选项 SO_EXCLUSIVEADDRUSE,也可以达到类似的效果。使用该设置,管理员可以保护不能识别该选项的旧式应用程序的安全。

DisableRawSecurity

数值类型:REG_DWORD

默认值:0

范围:0、1

说明:在试图打开原始套接字时,禁用管理特权检查。该参数不用于 Windows 2000 传输(像 TCP/IP,它管理自己的原始套接字安全性),Windows 2000 传输有 TDI_SERVICE_FORCE_ACCESS_CHECK 设置。请参见 TCP/IP AllowUserRawAccess 注册表参数。

DynamicBacklogGrowthDelta

数值类型:REG_DWORD

有效范围:0-0xFFFFFFFF

默认值:0

说明:当需要额外的连接时,该参数控制要创建的空闲连接数。要小心使用该数值;该值太大会分配大量的空闲连接。(虽然该参数还存在,Windows 2000 中的 TCP 栈自身功能已加强加来防范 SYN 攻击;因此没有必要使用 AFD 的这一功能。)

FastCopyReceiveThreshold

数值类型:REG_DWORD

默认值:1024

说明:当应用程序提供的接收缓冲区小于 Winsock 缓冲区的当前数据包,AFD 要么再制作该数据包的一个副本,然后直接将数据复制到应用程序缓冲区(因为应用程序缓冲区在锁定状态下不能直接访问,所以它是一个两步复制过程);要么锁定并映射应用程序缓冲区,然后再将数据复制一次。该数值代表了数据复制的额外代码执行与 I/O 子系统与内存管理器的额外代码执行之间的利弊权衡。通过测试可以找到一个默认值,使总体性能达到最佳。通常不建议更改该数值。

FastSendDatagramThreshold

数值类型:REG_DWORD

默认值:1024

说明:小于该参数值的数据报通过快速 I/O 路径传输,或者在发送时进行缓存。较大的数据报则保留,直到数据报实际发送时为止。通过测试可以找到一个默认值,使总体性能达到最佳。快速 I/O 指复制数据并绕过 I/O 子系统,而不是映射内存并通过 I/O 子系统。这对于少量数据非常有利。通常不建议更改该数值。

IgnorePushBitOnReceives

数值类型: REG_DWORD - 布尔值

有效范围: 0、1(false、true)

默认值: 0 (false)

说明:通常,当发生以下情况时,Windows 2000 完成 Windows Sockets 接收:

设置 push 位的数据到达。
用户 recv 缓冲区已满。
数据到达后已过去 0.5 秒。
将该参数设置为 1,Afd.sys 就会将所有传入数据包当作已设置了 push 位进行处理。仅当必要时,才进行此操作,用于解决不能正常“推”数据的用户 TCP/IP 实现。

IrpStackSize

数值类型:REG_DWORD

有效范围:1-255

默认值£o 4

说明:AFD 使用的默认 IRP 栈位置数。不建议更改该数值。

LargeBufferSize

数值类型: REG_DWORD

默认值: PAGE_SIZE(在 i386 上 4096 字节,在 Alpha 上 8192 字节)

说明: AFD 使用的大型缓冲区大小(字节)。使用较小的数值占用的内存较少;使用较大的数值可以提高性能。

LargeBufferListDepth

数值类型: REG_DWORD

默认值: 0/2/10

说明: 大型后援缓冲区列表长度。

MaxActiveTransmitFileCount

数值类型: REG_DWORD

有效范围: 0-0xffff(服务器)、2(工作站)

默认值: 0(服务器)、2(工作站)

说明:允许配置同时进行的 TransmitFile 请求的最大数量。数值设为 0,则该参数没有限制,但系统资源除外。在 Windows 2000 Professional 中,该参数不能配置。

MaxFastTransmit

数值类型: REG_DWORD

有效范围: 0-0xffffffff

默认值: 64 KB

说明:该参数决定了在快速路径上 TransmitFile 请求中传输数据的最大量。快速 I/O 实质上是复制数据并绕过 I/O 子系统,而不是映射内存并通过 I/O 子系统。这对于少量数据有利。通常不建议更改该参数。

MaxFastCopyTransmit

数值类型: REG_DWORD

有效范围: 0-0xFFFFFFFF

默认值: 128

说明:该参数控制在快速路径上使用副本而不是缓存内存的数据的最大量。快速 I/O 实质上是复制数据并绕过 I/O 子系统,而不是映射内存并通过 I/O 子系统。这对于少量数据非常有利。通常不建议更改此数值。

MediumBufferSize

数值类型: REG_DWORD

默认值: 1504

说明:AFD 使用的中型缓冲区大小(字节)。

MediumBufferListDepth

数值类型:REG_DWORD

默认值:4/8/24

说明:中型后援缓冲区列表长度。

OverheadChargeGranularity

数值类型:REG_DWORD

默认值:1 页

有效范围:2 的幂数

说明:该参数确定系统开销实际是如何递增的。默认值为一个页面,目的是正确管理开销,防止黑客应用程序用光系统内存。

PriorityBoost

数值类型:REG_DWORD

默认值:2

有效范围:0-16

说明:当 AFD 完成一个线程的 I/O 时,提供该线程的优先级。如果多线程应用程序的某些线程资源不足时,可减少该数值以便纠正这一问题。

SmallBufferListDepth

数值类型:REG_DWORD

默认值:8/16/32

说明:小型后援缓冲区列表长度。

SmallBufferSize

数值类型:REG_DWORD

默认值:128

说明:AFD 使用的小型缓冲区大小(字节)。

StandardAddressLength

数值类型:REG_DWORD

默认值:22

说明:计算机通常使用的 TDI 地址长度。使用其它传输协议如 TP4 时,它使用很长的地址,提高该数值可使性能有所提高。

TransmitIoLength

数值类型:REG_DWORD

默认值:PAGE_SIZE/PAGE_SIZE*2/65536

说明:TransmitFile() 执行的 I/O(读取与发送)默认大小。在 Windows 2000 Professional 中,默认 I/O 大小正好为一个页面。

TransmitWorker

数值类型:REG_DWORD

默认值:0x10

有效范围:0x10、0x20

说明:该参数控制 Afd.sys 使用系统线程的方式。将该参数设置为 0x10,AFD 就会使用系统线程执行长(大于 2 倍 SendPacketLength 的数据)TransmitFile 请求的 IO。将该参数设置为 0x20,AFD 就会使用 IO 的内核模型 APC,并在同一线程上下文中执行所有事项。它是 Windows 2000 中的一个新增功能,它可通过减少长 TransmitFile 请求中上下文开关数来提高性能。

动态 DNS 注册参数
这些参数控制动态 DNS 注册客户的行为。如果参数不存在,则使用列出的默认值。

DNSQueryTimeouts

项: Tcpip\Parameters

数值类型: REG_MULTI_SZ - 由零结束的超时列表

有效范围:有效编号列表

默认值: 1 2 2 4 8 0(格式备注:输入每个数字后,按 Enter 键并以 0 结束列表)

说明: 该参数用于更改 DNS 客户使用的 DNS 查询超时。在受控非 Internet 或低延迟环境中,可以使用该参数减少查询失败过程的时间。

DefaultRegistrationTTL

项: Tcpip\Parameters

数值类型: REG_DWORD - 秒

默认值: 0x4B0(十进制为 120,或 20 分钟)

有效范围: 0-0xFFFFFFFF

说明:该参数用于控制动态 DNS 注册发送的 TTL 值。

EnableAdapterDomainNameRegistration

项: Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 布尔值

有效范围: 0、1(false、true)

默认值: 0 (false)

说明:该参数可用于启用指定适配器域名信息的 DNS 动态更新注册。当需要在适配器域名下注册适配器地址时,该设置是非常有用的。当该项设置为 true 且 DisableDynamicUpdate 为 false 时,给定适配器地址就会在特定适配器域名以及系统主域名下进行注册。

DisableDynamicUpdate

项: Tcpip\Parameters, Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 布尔值

有效范围: 0、1(false、true)

默认值: 0(false;动态 DNS 启用)

说明:该参数用于完全禁用 DNS 动态更新注册。取决于注册表项所在的位置,该参数既可以是每个接口上的参数,也可以是全局参数。如果在 Tcpip\Parameters 级别该值设置为 1,则在整个系统内禁用动态更新。如果在 Tcpip\Parameters 级别该值设置为 0,则禁用每个适配器上的动态更新。

DisableReplaceAddressesInConflicts

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围: 0、1(false、true)

默认值: 0 (false)

说明:该参数用于关闭最后写入者的地址注册冲突规则。默认情况下,计算机并不替换 DNS 服务器上不属于它的任何当前记录。

DisableReverseAddressRegistrations

项: Tcpip\Parameters\Interfaces\interface

数值类型: REG_DWORD - 布尔值

有效范围: 0、1(false、true)

默认值: 0(false;启用 PTR 记录注册)

说明:该参数可以用于关闭 DNS 动态更新反向地址 (PTR) 记录注册。如果配置该计算机的 DHCP 服务器是 Windows 2000 Server,则它可以使用 DNS 动态更新协议注册 PTR 记录。但是,如果 DHCP 服务器不能执行 DNS 动态更新 PTR 注册,并且您不想使用 DNS 动态更新协议注册 PTR 记录,则将该参数设置为 1。

UpdateSecurityLevel

项: Tcpip\Parameters

数值类型: REG_DWORD - 标志

默认值: 0

有效范围: 0、0x00000010、0x00000020、0x00000100

说明:该参数可以用于控制 DNS 动态更新的安全性。它默认设置为 0,先使用非安全的??更新。如果非安全的更新被拒?,?发送 Windows 2000 安全动态更新。下面列出有效数值:

0x00000000 - 默认值、非安全更新
0x00000010 - 取消安全性
0x00000100 - 只使用安全更新
DNS 缓存解析服务注册表参数
Windows 2000 包含 DNS 缓存解析服务。该服务提供缓存 DNR 应答的功能,这样 DNS 服务器不必重新查询相同的信息。可以使用服务控制管理器 MMC 管理单元终止该服务。该服务的注册表参数放在 \System\CurrentControlSet\Services\Dnscache\Parameters 项下。

AdapterTimeoutCacheTime

数值类型: REG_DWORD - 秒数

有效范围:0-0xFFFFFFFF

默认值: 300(5 分钟)

说明:当多宿主机器上特定适配器执行对所有 DNS 服务器的 DNS 查询失败(超时)时,该参数指定适配器的禁用时间。例如,如果您有两个适配器,并且其中一个网络上的 DNS 服务器不可用,则在此期间将适配器标记为不可用。(必要时,即插即用事件或缓存超时就会强制解析服务器重试该接口,并将它标记为禁用。)

CacheHashTableSize

数值类型: REG_DWORD - 数字

默认值: 0xD3(十进制为 211)

有效范围: 任何大于 0 的素数

说明:该参数可用于控制 DNS 缓存解析服务使用的散列表的最大行数。没有必要调整该参数。

CacheHashTableBucketSize

数值类型: REG_DWORD - 数字

默认值: 0xa(十进制为 10 )

范围: 0-0x32(十进制为 50)

说明: 该参数可用于控制 DNS 缓存解析服务使用的散列表的最大列数。没有必要调整该参数。

DefaultRegistrationRefreshInterval

数值类型: REG_DWORD - 时间(秒)

默认值: 0x15180(十进制为 86400,或 24 小时)

范围: 0-0xFFFFFFFF

说明: 该参数用于控制动态 DNS 注册刷新间隔。

MaxCacheEntryTtlLimit

数值类型: REG_DWORD - 时间(秒)

默认值: 0x15180(十进制为 86400)

有效范围: 0-0xFFFFFFFF(建议值小于一天,以防止出现过时的记录)

说明: 该参数用于控制最大缓存项生存时间 (TTL) 数值。它将覆盖指定记录设定的较大数值。

MaxSOACacheEntryTtlLimit

数值类型: REG_DWORD - 时间(秒)

有效范围:0-0xFFFFFFFF

默认值: 120(2 分钟)

说明:解析缓存进行 SOA 记录缓存的最大秒数。对于 DNS 查询返回的特定 SOA 记录,该数值覆盖比它大的任何 TTL 数值。SOA 记录对于动态更新是至关重要的,因此它们不能长时间缓存,以确保 DNS 起始授权机构可使用最新的记录数据。

NegativeCacheTime

数值类型: REG_DWORD - 时间(秒)

默认值: 0x12c(十进制为 300,或 5 分钟)

有效范围: 0-0xFFFFFFFF(建议值小于一天,以免出现过时的记录)

说明: 该参数用于控制负记录的缓存时间。

NegativeSOACacheTime

数值类型: REG_DWORD - 时间(秒)

默认值: 0x78(十进制为 120 或 2 分钟)

有效范围: 0-0xFFFFFFFF(建议值小于五分钟)

说明: 该参数用于控制负起始授权机构 (SOA) 记录的缓存时间。DNS 注册失败后,每隔五或十分钟重试一次,因此如果该数值设置为五分钟或更多,缓存(而不是服务器)就会应答注册失败;要是数值不设置这么高,就会由服务器来应答。

NetFailureErrorPopupLimit

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

说明: 使用该参数,则可以使用 UI 弹出窗口指示 DNS 解析服务器查询(到达)已配置 DNS 服务器失败的次数。

NetFailureCacheTime

数值类型: REG_DWORD - 时间(秒)

默认值: 0x1e(十进制为 30)

有效范围: 0-0xFFFFFFFF(建议值小于五分钟)

说明: 该参数用于控制常用网络失败缓存时间。当检测到解析服务器对所有已知 DNS 服务器的查询超时错误时,在该参数设定的一段时间里禁止该服务器的查询。当网络不响应时,这可避免(超时引起的)长时间等待。

名称解析参数
下列一组参数用于域名解析服务。

AllowUnqualifiedQuery

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0

说明: 该参数控制域名解析服务器是否使用主机名,之后只跟句点 (.)(不合格查询)查询域名服务器。例如,如果计算机在 mydomain.com 中,且您 ping target,默认情况下仅向 DNS 查询 target.mydomain.com。当该参数设置为 1,也查询 target。

DisjointNameSpace

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)8

默认值: 1

说明: 该参数指示 DNR 将每个接口作为分离的名称空间处理。在多宿主计算机上,查询一个接口配置的 DNS 服务器可能会出现名称错误。该参数用于指示解析服务器在返回结果前,尝试查询其它接口可能配置的 DNS 服务器。

2PrioritizeRecordData

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1

说明: 对于多宿主主机查询,该参数控制域名解析服务器是否对返回的地址进行分类。默认情况下,DNR 将与查询计算机某接口在同一子网上的地址排在列表的顶部。这样,同一子网上(不用路由)的 IP 地址(如有)就会优先。

QueryIpMatching

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0

说明: 该参数控制被查询的 DNS 服务器 IP 地址与发送 DNS 响应的服务器 IP 地址是否匹配。这可以作为一个简单的安全功能,确保解析服务器不被某些计算机(非目标 DNS 服务器)的随机查询响应欺骗。

UseDomainNameDevolution

项: Tcpip\Parameters

数值类型: REG_DWORD - 二进制

有效范围:0、1(false、true)

默认值: 1 (true)

说明: 该参数可以用于禁用不合格 DNS 查询的域名“递归”。递归描述了在 DNS 中查找主机的过程:先将客户机的域名附加到主机名后,然后查询整个字符串。如果查询失败,每次删除一个标签,且重新提交查询。例如,如果 mycomputer.support.microsoft.com 计算机上的用户或应用程序要访问名为 target 的主机,默认情况下 DNR 查询 target.support.microsoft.com、 target.microsoft.com,并可能查询 target(取决于 AllowUnqualifiedQuery 参数值)。

附录 D:调整 TCP/IP 防范攻击
TCP/IP 安全设置
除了上述所列出的设置之外,可以修改下列项以辅助系统更有效地抵御攻击。请注意,这些推荐值决不是使系统不受攻击,而只在于调整 TCP/IP 栈防范攻击。这些项的设置并不涉及系统上的许多其它组件(可能被用于攻击系统)。对于注册表的任何更改,管理员必须充分了解这些更改对系统默认功能的影响以及在他们的环境中是否适当。

SynAttackProtect

项: Tcpip\Parameters

数值类型:REG_DWORD

有效范围:0、1、2

0(没有 SYN 攻击保护)
1(如果满足 TcpMaxHalfOpen 和 TcpMaxHalfOpenRetried 设置,减少重传重试次数与延迟的 RCE(路由缓存项)创建。)
2(除 1 之外的另一个 Winsock 延迟指示。)

备注 当系统发现自己受到攻击时,任何套接字上的下列选项不再启用:可缩放窗口 (RFC 1323) 与每个适配器上已配置 TCP 参数(初始 RTT、窗口大小)。这是因为当保护生效时,在发送 SYN-ACK 之前不再查询路由缓存项,并且连接过程中 Winsock 选项不可用。

默认值: 0 (false)

推荐值: 2

说明:SYN 攻击保护包括减少 SYN-ACK 重传次数,以减少分配资源所保留的时间。路由缓存项资源分配延迟,直到建立连接为止。如果 synattackprotect = 2,则 AFD 的连接指示一直延迟到三路握手完成为止。注意,仅在 TcpMaxHalfOpen 和 TcpMaxHalfOpenRetried 设置超出范围时,保护机制才会采取措施。

TcpMaxHalfOpen

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 100-0xFFFF

默认值: 100 (Professional、Server)、500 (Advanced Server)

说明:该参数控制 SYN 攻击保护启动前允许处于 SYN-RCVD 状态的连接数量。如果将 SynAttackProtect 设为 1,确保该数值低于要保护的端口上 AFD 侦听预备的值(有关详细信息,参见附录 C 中的预备参数)。有关详细信息,请参见 SynAttackProtect 参数。

TcpMaxHalfOpenRetried

项: Tcpip\Parameters

数值类型: REG_DWORD - 数字

有效范围: 80-0xFFFF

默认值: 80 (Professional、Server)、400 (Advanced Server)

说明:该参数控制在 SYN 攻击保护启动前处于 SYN-RCVD 状态的连接数量,对于该连接至少有一个 SYN 重传已经发送。有关详细信息,参见 SynAttackProtect 参数。

EnablePMTUDiscovery

项: Tcpip\Parameters

数值类型:REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

推荐值: 0

说明:将该参数设置为 1 (true) 时,TCP 将查找到达远程主机路径上的最大传输单位(MTU 或最大的数据包大小)。通过发现路径 MTU 并将 TCP 字段限制到这个大小,TCP 可以限制在连结到不同的 MTU 网络的路由器上的碎片。碎片会影响 TCP 吞吐量和网络堵塞。将这个参数设置成 0,会导致为所有不在本地子网上主机连接使用 576 字节的 MTU。

NoNameReleaseOnDemand

项: Netbt\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 0 (false)

推荐值: 1

说明:该参数确定当收到网络的名称释放请求时,计算机是否释放其 NetBIOS 名称。添加该参数,管理员就可以保护机器免遭恶意名称释放攻击。

EnableDeadGWDetect

项: Tcpip\Parameters

数值类型: REG_DWORD - 布尔值

有效范围:0、1(false、true)

默认值: 1 (true)

推荐值: 0

说明:当该参数设为 1 时,允许 TCP 执行间隔网关检测。启用该功能时,如果处理多个连接有困难时,TCP 可以请求 IP 改到备份网关。备份网关可以在“网络控制面板”中“TCP/IP 配置”对话框的“高级”部分进行定义。有关详细信息,请参见本文“间隔网关检测”一节。

KeepAliveTime

项: Tcpip\Parameters

数值类型:REG_DWORD - 时间(毫秒)

有效范围: 1-0xFFFFFFFF

默认值: 7,200,000(两个小时)

推荐值:300,000

说明:通过发送保留的数据包,该参数可确定 TCP 要隔多长时间验证一次闲置连接仍仍未断开。如果远程系统仍可以连接并正在运行,它就会确认保留传输。默认情况下,不发送保留数据包。应用程序可以在连接上启用这一功能。

PerformRouterDiscovery

项: Tcpip\Parameters\Interfaces\interface

数值类型:REG_DWORD

有效范围:0、1、2

0(禁用)
1(启用)
2(仅当 DHCP 发送路由器发现选项时启用)

默认值: 2,DHCP 控制,但默认情况下为关闭。

推荐值: 0

说明:该参数控制 Windows 2000 是否根据每个接口上的 RFC 1256 执行路由器发现。也可参见 SolicitationAddressBcast。

&copy; 2000 Microsoft Corporation. 版权所有。

本文档包含的信息代表了发行之日,Microsoft Corporation 对所讨论问题的当前看法。因为 Microsoft 必须顺应不断变化的市场条件,故本文档不应理解为 Microsoft 一方的承诺,Microsoft 不保证所给出的信息在发布之日以后的准确性。

本白皮书仅供参考。在本文档中,MICROSOFT 不作任何明示或默示的保证。

Microsoft、Windows 和 Windows NT 是 Microsoft Corporation 在美国和/或其它国家的注册商标或商标。

此处提到的其它产品和公司名称是其各自所有者的商标。

Microsoft Corporation &#8226; One Microsoft Way &#8226; Redmond, WA 98052-6399 &#8226; USA

02/00


1 规范和编程信息包含在 Windows NT 设备驱动程序工具包 (DDK) 中。一些信息也可以从 Microsoft Internet 站点获取 (

2 大多数 NIC 可以置于这样一种模式:NIC 对媒体上的帧上不执行地址筛选。相反,它将每一帧上传通过循环冗余检验 (CRC)。该功能用于一些协议分析软件,如 Microsoft 网络监视器。

3 由 DiffServ 所定义的 6 位也就是以前所熟知的 TOS 位。DiffServ 出现后,以前的 TOS 将不再使用。因而,Winsock 不支持对 TOS 位的设置。IP TOS 的所有请求必须通过 GQoS API 进行,除非 DisableUserTOSSetting 注册表参数(附录 A)已修改。

4 将 [1] 增加到注册表参数 TcpMaxDataRetransmissions 或 TcpMaxConnectRetransmissions 中,几乎将整个重传超时时间加倍。如果有必要配置较长的超时时间,那么应逐渐增加这些参数。

5 Windows NT/Windows 2000 TCP 在开始时不是发送一个 TCP 段,而是发送两个段。这样,第一次发送到目标计算机时,就不需要等到延迟 ACK 计时器到期,这可提高一些应用程序的性能。

6 有对于重定向器注册表参数,请参见 Microsoft Windows NT/Windows 2000 Resource Kit 或 Microsoft Knowledge Base。

7 Stevens, Richard. TCP/IP Illustrated, Volume 1: The Protocols. Reading, MA: Addison-Wesley Publishing Co., 1993.

8 两个规范均可以从 Microsoft Internet 站点:www.microsoft.com 和 ftp.microsoft.com 处获取。

9 可以使用 IPAutoconfigurationEnabled 注册表项禁用 IP 的自动配置。可以使用 IPAutoconfigurationSubnet 和 IPAutoconfigurationMask 注册表项控制所使用的子网和子网掩码。这些项在附录 A 中已进行说明。

10 请参见 draft-ietf-dhc-dhcp-dns-*.txt

11