Winsock程序员经典问答(中译)之第1部分:Winsock基本信息
1.1 什么是Winsock?
Winsock是Windows Sockets的简称,意指派生于BSD Sockets API。
题外话:您可能在一些旧的或学院式的材料中看到早先的驼峰式命名形式WinSock。目前微软的拼写为Winsock,本文档自从我接手维护工作后也是这么做的。
Winsock规范定义了微软Windows的网络编程接口,其基础是BSD Unix上盛行的socket范型。Winsock包含了人们熟知的Berkeley socket风格的例程函数,以及一组专门针对Windows的扩展函数。
1. Winsock 1应用程序让Winsock以Windows消息的形式发送通知,使程序能进行网络、UI处理以及后台处理,而无需担心其并发性。
2. Winsock 2增添了许多特性。下文会有详细说明。
Winsock 2.x版本定义了两种接口:一是应用程序接口(API),这种接口将开发者和底层隔离开;二是服务提供接口(SPI),这种接口允许对Winsock协议栈的扩展。通过对API的恰当使用,Winsock应用程序可以在多种网络传输协议和Winsock的实现版本之上工作。
(顺便提一句:大多数人谈到Winsock的当前版本时只说Winsock 2,这是因为新版本仅仅包括对旧规范的一个修订和说明,不会有太大变更。)
目前Windows Sockets的最好的规范文档就是MSDN库里的Winsock相关材料。您可能会见到另外一个规范文档,但是现在这跟我们的主题本身没什么关系。
1.2 Winsock与TCP/IP的区别
网络由多个层次构成。网络技术厂商讨论这些层次的根据是OSI网络模型。
TCP/IP是一种网络协议,处在OSI模型的第3到4层。网络协议提供的服务类似分址、数据传输、路由、跨网络的逻辑连接等。两台计算机上运行的程序要实现通信,这两台计算机必须使用相同的网络协议。其它的常用网络协议包括Novell的IPX,3Com、IBM、微软的NetBIOS,苹果的AppleTalk等。现在TCP/IP是最流行的网络协议,实际上所有的计算机都支持它。
Winsock是一种能使Windows程序通过任意网络传输协议发送数据的API。Winsock中有几个只支持TCP/IP协议的函数(例如gethostbyaddr()),但是在Winsock 2中新增了所有这些函数的通用版本,以允许开发者使用其它的传输协议。
1.3 Winsock 2有哪些Winsock 1.1不具备的东西?
最重要的新特性之一就是对多种传输协议的官方支持。虽然Winsock 1.1实际上并没有仅限于支持TCP/IP,但是TCP/IP是写入规范的唯一受官方支持的协议。并没有标准的途径为Winsock添加另一个传输协议的支持,尽管一部分厂商加入了其它协议的专有实现。Winsock 2的规范中写入了对OSI、Novell IPX/SPX和Digital DECNet的官方支持。
Winsock 2也添加了对一些诸如服务质量(QoS)、广播等技术创新的支持。随着对带宽的需求变得越发严格和紧张,这些技术变得越来越重要。例如,QoS允许一个视频会议项目保留一定量的带宽,这样的话,比如突然发生一个文件传输,也不会由于带宽不够而中断视频。广播允许视频会议程序向诸多参会者发送音视频流时不重复传输数据,除非特别必要。
Winsock 2在Win32高效的重叠I/O机制下工作。这些都是在当代Windows版本的内核中处理的,故与Winsock 1.1所支持的更传统的I/O方式相比,Winsock 2有显著的速度优势。
Winsock 2也考虑到了分层服务供应商,使得很多小巧的程序得以启用,比如安全插件:比如安装一个SSL服务商提供的插件,忽然之间您的数据就被自动加密了。
规范中还添加了大量的内容,您可以从sockets.com网站的Winsock 2 Overview页获取一个完整清单。
1.4 Winsock下一版规范什么时候发布?
现在没有发布新的Winsock规范的必要了,我在另一篇文章中谈到了原因。Winsock目前的规范正是微软协议栈现在所做的一切。微软把这些东西写进了MSDN库文档而非一个独立的规范。当然,Windows也有一些没有记入文档的特性。
Winsock并不是微软新增网络功能时所影响的唯一模块。有时微软会创建全新的API,比如IP助手、IE ActiveX控件。这些只是对Winsock的补充,而不能直接影响它。有时这些模块甚至不以Winsock为基础,而是直接调用底层API通信,如传输驱动接口(TDI)层或网络驱动接口标准(NDIS)层。
1.5 Winsock支持DECNet、IPX/SPX等协议集吗?
Winsock 1.1规范仅支持TCP/IP协议。Winsock 1.1协议栈的几大厂商提供了对其它传输协议的支持,但问题是Winsock 1.1规范并没有将其标准化。
Winsock 2对DECNet、IPX/SPX、OSI传输的支持进行了标准化,其规范定义了标准化方法,用于添加对新传输协议的支持。
posted on 2011-09-04 15:45 Programmer K 阅读(1893) 评论(3) 收藏 举报
浙公网安备 33010602011771号