欢迎来到天天文库
浏览记录
ID:50096974
大小:1.50 MB
页数:42页
时间:2020-03-04
《Wok服务提供者接口(SPI.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第七章Winsock服务提供者接口(SPI)*1内容提要SPI概述Winsock协议目录分层服务提供者(LSP)基于SPI的数据包过滤实例*2Winsock2是围绕着Windows开放系统架构(WindowsOpenSystemArchitecture,WOSA)来设计的,WOSA在Winsock和Winsock应用程序之间有一个标准API;在Winsock和Winsock服务提供者(比如TCP/IP)之间有一个标准的SPI。概述*3图7-1Winsock2的WOSA架构*4传输服务提供者传输服务提供者(Transpor
2、tServiceproviders,一般称作协议栈,比如TCP/IP)即能够提供建立通信、传输数据、日常数据流控制和错误控制等功能的服务。类型:分层的(Layered),基础的(Base)基础服务提供者负责实现传输协议的真正细节,导出Winsock接口,此接口直接实现协议。分层服务提供者将自己安装到Winsock目录中的基础提供者上面,截取来自应用程序的WinsockAPI调用。*5分层服务提供者仅实现更高层的定制通信函数,它依靠现存的底层基础提供者来与远程终端作实际的数据交换,分层服务提供者位于基础服务提供者之上,依靠
3、它来实现各种功能。Winsock2APIWS2_32.DLLSPILayeredProtocolSPILayeredProtocolSPIBaseProtocolTransportNamespace图8-2协议层次*6名字空间提供者把一个网络协议的地址属性和一个或多个用户友好名关联到一起,以便启用与协议无关的名字解析方案。命名空间提供者在命名空间目录安装自己,当应用程序执行名字解析时将会被调用。*7SPI命名规则:前缀标示WSP(Winsock提供者):用于传输服务提供者函数。NSP(名字空间提供者):用于名字空间提供者
4、函数。WPU(Winsock提供者上调):供服务提供者调用的Ws2_32.dll支持函数(分层服务提供者使用的支持函数。)WSC(Winsock配置):供在Winsock2中安装服务提供者的函数使用。*8Winsock协议目录SPI提供3种协议:分层协议、基础协议、协议链基础协议是能够独立、安全地和远程端点实现数据通信的协议。分层协议在基础协议的上层,依靠底层基础协议实现更高层的通信服务。协议链是将一系列的基础协议和分层协议按特定的顺序连接在一起的链状结构。*9协议信息系统安装了哪些协议以及这些协议的特性,通常为协议信息
5、。如果一个协议支持多种行为,每类行为在系统中都有各自的目录条目。例如,如果系统中安装了TCP/IP,系统中就会有两个IP条目:TCP和UDP。Winsock采用WSAPROTOCOL_INFO结构描述特定协议的完整信息。具体定义如下:*10WSAPROTOCOL_INFO结构定义如下:typedefstructWSAPROTOCOL_INFO{DWORDdwServiceFlags1;DWORDdwServiceFlags2;DWORDdwServiceFlags3;DWORDdwServiceFlags4;DWORDd
6、wProviderFlags;GUIDProviderId;//服务提供者厂商安排的GUIDDWORDdwCatalogEntryId;//为该结构体安排的唯一标示符(目录入口)WSAPROTOCOLCHAINProtocolChain;//协议链结构体intiVersion;intiAddressFamily;//地址家族intiMaxSockAddr;intiMinSockAddr;intiSocketType;//套接字类型intiProtocol;//协议intiNetworkByteOrder;intiSecu
7、rityScheme;DWORDdwMessageSize;DWORDdwProviderReserved;CHARszProtocol[WSAPROTOCOL_LEN+1];}WSAPROTOCOL_INFO,*LPWSAPROTOCOL_INFO;*11获取协议信息使用WinsockAPI函数WSAEnumProtocols();使用WinsockSPI函数WSCEnumProtocols();*12intWSAEnumProtocols(LPINTlpiProtocols,//整型数组,指定要枚举的协议,可选。指定
8、为NULL则返回所有的协议。LPWSAPROTOCOL_INFOlpProtocolBuffer,//存放协议信息的缓冲区LPDWORDlpdwBufferLength//缓冲区长度);枚举指定的网络协议信息,将具体的协议信息填充到WSAPROTOCOL_INFO结构体中。WSAEnumProtocols函数仅能枚举
此文档下载收益归作者所有