计算机通信网络是计算机技术和通信技术相结合的产物,在进行网络通信时必须遵循一定的通信协议.在众多的通信协议中,TCP/IP协议簇得到了最为广泛的应用,特别是随着信息高速公路的大力建设和Intemet的飞速发展,TCP/IP协议簇一枝独秀,越来越受到人们的重视和欢迎.TCP/IP是一个开放的网络协议体系,其最显著的优点是便于实现各种异构网络的无缝连接和网络应用程序的跨平台移植,因此它得到了众多操作系统的广泛支持,使得TCP/IP逐渐成为互联网事实上的协议标准.但是,直接面向TCP/IP协议进行网络编程对大多数软件开发人员来说是不可取的,因为这涉及到路由选择、流量控制、拥塞控制、分段组装、检错纠错、Qos协商等一系列底层协议细节,极其繁琐、复杂.本文中讨论的Winsoek则提供了访问TCP/IP网络的捷径,它使得软件开发人员在开发网络通信软件时不必关心具体的协议细节,只需调用Winsock,由Winsock寻找并利用已经安装好的底层协议来进行数据传输,因而可以大大减少网络通信软件开发中时间和经费的投入 .
Winsock及其基本原理
Winsock的全称为Windows Sockets,其实质是Windows与TCP/IP的通用网络编程接口、Socket通常称为套接口,这一概念最初源于BSD Unix操作系统,它是Unix系统上开发的、基于TCP/IP协议簇的网络通信接口,而具体到某一个套接口则是指一个绑定了本地地址的通信端点.
一个正在使用的套接口有一个类型和相关的进程.套接口的类型有2种,即流套接口(stream sockets)和数据报套接口(datagram sockets).流套接口使用面向连接的传输服务(一般使用TCP/IP协议簇中的TCP协议),数据报套接口使用无连接的传输服务(一般使用UDP协议)与某一套接口相关的通信进程通过端口号(Port)来标识,一般l024以下的为系统端口,如HTTP的端口号为80,FTP的端口号为2l等,网络应用程序的可用端口号一般在l024到5 000之间.为了降低Windows环境下通信软件的开发难度,提供类似于Unix系统中的网络编程界面,20世纪90年代初,Microsoft、Sun等几家公司合作,共同制定了Window下Socket的实现标准,即Windows Sockets规范.
Winsock有2个版本,第一版WinSock1.1于1993年1月颁布,全名为Windows socketr An Open Interface for Network Programming Under Microsoft Windows,用于Windows 95、在Windows 98等版本中使用的为第二版,简称Winsock2,Winsock2除了支持TCP/IP协议外,还支持其它协议,如ATM、IPX/SPX、DECNET等.
WinSock Application -> WinSock API-> WinSock SPI
Winsock的结构模型如上图所示.其中Winsock Application是指基于Winsock的应用程序,如Web Browser、Email、FrP等;Winsock API是指由Winsock为用户提供的网络应用程序接口;Winsock SPI是指Winsock Service Provider Interface,即服务提供者接口层,而Winsock的服务提供者是指Winsock的底层协议,如TCP/IP、IPX/SPX、DNS等.
在Winsock中包含了2个明显示不同的部分:API面向网络应用程序开发者,为开发人员提供统一的、简化的编程界面;SPI面向服务(如协议栈)提供者.这样,在开发网络应用软件时,就可以通过WinSock提供的API来使用底层通信协议(如TCP/IP)提供的服务,从而简化通信软件的设计.
在Winsock中包括了一系列BSD风格的Socket函数,而且还提供了一些专门用于Windows的扩展函
数.在各种程序开发工具中,通过特定的方法调用这些Winsock函数,就可以使用Winsock API提供的网络通信接口并借助底层网络协议来实现数据通信.
Winsock使得Windows环境下底层通信协议的协议细节对网络应用程序开发人员而言是透明的,为广大程序员提供了一个统一的、简化的编程界面.通过Winsock不但可以很方便地实现不同计算机之间的相互通信,而且可以实现同一计算机中不同进程之间的通信,还可实现联网的计算机之间的远程控制.Winsock的最新版本不但支持TCP/IP协议簇,而且还支持其它的通信协议.随着Windows操作系统和Internet 的普及,Winsock作为网络编程的新标准,必将为计算机网络开拓出更广阔的应用前景.