今天接到VIP客户的报修,主要是说局域网内部分工作站出现打印延迟或打印不出的情况,经过排查发现出下该类故障的工作均为采用了WSD端口或NETBIOS方式连接打印机,采用该类方式的工作并不是说不能打印而是偶尔不行或部分不行,不由引发我的兴趣想更深入的了研究关于这二个方式和TCP/IP连接打印机上的区别和为什么会产生这类问题的原因。
首先我们先来看看这二个方式分别是怎么一会事:
一、NetBIOS名称解析
我们在使用打印机或者其他设备共享的时候,常会用到ip/tcp协议下的netbios名称表协议,在局域网内部使用NetBIOS协议可以让我们方便地实现消息通信及资源的共享,给我们带来的许多的便利,但在广域网的使用过程中,很多人都不清楚netbios名称与主机名有什么区别?
NetBIOS(Network BasicInput Output System,网络基本输入输出系统),是种应用程序接口(API),系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,实现信息通讯,NetBIOS名称是用于表示网络上的NetBIOS资源的16字节地址,其中前15个字节代表计算机名称,第16字节用于表示服务,如果用户的计算机名称不足15字节,系统会补上相应的空格,并且它在同网络上是唯的。
主机名就是计算机的名字(计算机名),网上邻居就是根据主机名来识别的,这个名字可以随时更改,从我的电脑属性的计算机名就可更改。因特网上的主机或Web站点由主机名识别。主机名有时称为域名。主机名映射到IP地址,但是主机名和IP地址之间没有对关系。
当Web客户机发出到主机的HTTP请求时,使用主机名。发出请求的用户可能会指定服务器的IP地址,而不是主机名,但现在这在因特网上不常见。对于用户来说,主机名比数字IP地址更方便。公司、组织和个人常常选择其Web站点的主机名,用户能很容易地记住这些主机名。
因为NetBIOS占用系统资源少、传输效率高,尤为适于由20到200台计算机组成的小型局域网。所以微软的客户机/服务器网络系统都是基于NetBIOS的。当安装TCP/IP协议时,NetBIOS也被Windows作为默认设置载入,我们的计算机也具有了NetBIOS本身的开放性,139端口被打开。某些别有用心的人就利用这个功能来攻击服务器,使管理员不能放心使用文件和打印机共享。
NetBIOS名称其实就是主机名和ip地址之间的解析。Netbios名称与主机名都是用来在网络中标记和标识计算机的,和域名作用样,具有唯性。
二、Web Services For Driver(WSD)设备网络服务
微软公司在2006年发布了许多技术,可以解决设备和Windows 操作系统之间的互联和服务问题,从而很好地实现设备的发现和连接。
在Windows Vista中,Web Services on Devices API (WSDAPI)是Devices Profile在Windows Vista中的应用。它支持为设备连接而设置的WS标准,像WS Discovery和WS Eventing等。
在Windows Vista中,Function Discovery API能轻松列举和使用具有某一特定类型的设备,而不管这些设备是怎样连接到电脑上的。Function Discovery是应用和设备的接口层,它能够使硬件通过功能发现设备,而不是通过连接的总线类型和连接方式。FD提供了一个列举系统资源的统一接口,按照功能和种类去发现和管理设备。FD支持可扩展的发现提供者模型,系统提供一个接口层,这些接口层是基于已经存在的标准,如Plug and Play、Simple Service Discovery Protocol (SSDP)、WS Discovery等。
PnP-X是Windows Vista中Plug and Play (PnP)的扩展,它使网络设备能像物理连接设备一样被安装,并且出现图标,就像Windows的内部设备一样。像Windows中的PnP工作在一套特定的总线上一样,Windows Vista中的PnP-X为实际连接的设备定义了一套特定的网络协议,包括两种设备都可以实现PnP-X: Universal Plug and Play (UPnP)设备和Device Profile for Web Services (DPWS)设备。PnP-X能够发现附上虚拟PnP-X网络总线的设备,这个IP总线的枚举器被用来发现PnP-X设备,主要包括连接到局域网的DPWS设备和UPnP设备。
在我们使用设备之前,必须要先发现设备。如果要实现设备的发现和安装,一些信息是必要的,PnP-X就规定了一些对于设备的描述,如Hardware ID等。PnP-X工作过程如下:
■ 用户启动Network Explorer,Network Explorer会向WSD Provider搜索设备,并显示设备的列表。用户选择安装设备,IPBusEnum服务就被通告有新设备需要安装后,会向WSD Provider索求设备的元数据信息。
■ WSD Provider向设备发出索求信息,设备发送元数据给WSD Provider。WSD Provider解析元数据并发送给IPBusEnum。IPBusEnum建立一个物理设备目标(PDO),并把PDO送给PnP组件,PnP搜寻与设备相对应的INF文件。
■ 依照INF的数据,PnP选择对应的设备驱动。如果驱动在系统中内置,设备就安装好了。如果驱动不存在,找到新硬件的向导将出现,用户将手动安装驱动。
打印机和Vista的交互实现
Windows Vista与打印机之间传送的消息是以SOAP格式出现的,SOAP消息是使用XML描述的。设备与设备之间的交互都遵循WS系列协议。设备端运行嵌入式Linux系统,开发工具可选用gSOAP平台来产生和接受SOAP消息,Windows Vista端由于内置了WSDAPI、Fuction Discovery和PnP-X组件,不需要另外的软件平台就可以产生和接受SOAP消息。
■ 打印机的发现过程
1.打印机与Windows Vista 在WS-Discovery阶段的交互操作
打印机上电后连接到局域网,先向网络广播一个Hello消息。在收到消息后,Windows Vista会主动发送Probe消息探测设备的类型和设备所在的范围。打印机收到Probe消息后,给Windows Vista发送Probe Match消息,告知其设备类型及其所在的范围。Windows Vista接收Probe Match消息后会主动发送Resolve消息,定位服务及服务所在的地址。打印机收到Windows Vista发送的Resolve消息后,发送Resolve Match给Windows Vista,确认服务和地址。这样Windows Vista就知道此服务的存在了。
2.打印机与Windows Vista 在WS-Transfer阶段的交互操作
WS-Discovery阶段完成了设备的发现,要得到打印机更详细的消息,还得进行进一步的传送。要在Windows Vista中显示打印机的图标,还得提供Windows Vista中PnP-X(Plug and Play Extensions)定义的数据。具体来说,当Windows Vista收到Resolve后,会发送Get消息,以求得到以上消息; 设备在收到Get消息后,发送Get Response,里面将包含详细描述内容。Windows Vista收到以上信息后会将其保存在注册表中相对应的PKey中。Windows Vista通过WSD Fuction、PnP-X将自动安装驱动(Windows Vista中已经内置的),这样打印机的图标就会显示到Vista的Network Explorer中。
■ Windows Vista设备搜索和配置
在Windows Vista下实现网络设备的搜索和连接的过程如下: 首先打开Network Explorer,可以看到一系列已经被发现的设备; 接着,点击Search,输入想要设备所在的搜索范围就可以看到设备的图标出现在Network Explorer中,可以选择它进行配置; 第三,当配置设备时,需要提供设备定义好的密码, 网络配置成功,客户端就可以开始订阅服务了。
基于以上描述我们是不是可以这样简单理解一下:(也许不尽全对,大致上应该就是这个意思吧)
一、基于TCP/IP设置的打印机
1、向目标打印机IP直接发送打印任务,打印机收到任务打印并返回完成信息。
2、当目标打印机IP变更,继续向该IP发送打印任务则无法完成任务,显示打印机离线。
3、对比NETBIOS和WSD无需执行名称解析流程:(工作流程更少相对应的就是更稳定)
二、基于NETBIOS服务设置的打印机
1、在局域网络中收集关于目标打印机名所对应的IP,然后通过对目标打印机解析后IP发送打印任务,打印机收到任务打印并返回完成信息。
2、通过NETBIOS解析后只要知道目标打印机名称,无论目标打印机IP如何变更,均可以快速打到目标打印机。
3、在复杂的网络环境下(如工作站系统关闭关于例如computer browsere服务或被网络防火墙拦截对应135、139等端口以及lmhosts文件被破坏更改还有超过200台以上工作的网络环境)会因为各种原因导致无法解析或错误解析无法连接到打印机。
三、基于WSD设置的打印机
1、在局域网络中收集关于目标打印机名所对应的IP,然后通过对目标打印机解析后IP发送打印任务,打印机收到任务打印并返回完成信息。
2、通过WSD解析并网络握手后只要知道目标打印机名称,无论目标打印机IP如何变更,均可以快速打到目标打印机。
3、WSD是2006年后微软 WINDOWS VISTA更新后的新产物,并不支持WINDOWS XP及以下操作系统,安全系数更高(避免了NETBIOS的各种漏洞),能更有效解析目标计算机名,但在操作设置上复杂(WSD端口需要启用例如DNS 客户端、功能发现资源发布、SSDP 发现和 UPnP 设备主机服务并在网络发现设置中开启等放行操作)。
最后,我又画了几个简单的图片来表述了一下(仅供参考)