第二章 设计Winsock
2.1 系统体系结构
提供程序分为两种类型:基础提供程序和分层提供程序。
基础提供程序位于传输协议顶端
分层提供程序位于WS2_32.DLL之下,基础提供程序之上,能截获并操纵Winsock调用
如果一个应用程序利用分层提供程序创建了一个套接字,分层提供程序将使用该套接字截获所有的Winsock调用。分层提供程序可能会阻塞,修改调用,也可能将未经修改的调用传递给底层的提供程序。
2.2 协议的特征
2.2.1 面向消息
2.2.2 面向流
不保留消息边界的协议通常称为“基于流的协议”。
2.2.3 伪流
发送端必须分别发送每个独立的数据包,但接收端可以按任何使用的大小自由合并收到的数据包。
2.2.4 面向连接和无连接
2.2.5 可靠性和有序性
2.2.6 正常关闭
正常关闭只出现在面向连接的协议中。在这种关闭过程中,其中一方开始关闭通信会话,但此时另一方仍然可以读取线路上或网络堆栈上挂起的数据。如果面向连接的协议不支持正常关闭,则只要其中一方关闭了通信信道,就会出现连接立即中断,接收端丢失还未读取的数据这些情况。如果使用的是TCP协议,则连接双方都必须执行一次关闭,才能完全中断连接。
2.2.7 广播数据
所谓广播数据,就是从一个工作站发出数据,局域网内的其他所有工作站都能收到。(适用于无连接协议)
2.2.8 多播数据
多播是指一个进程发送数据而一个或多个接收端可接收到数据的能力。
2.2.9 服务质量
服务质量(QOS)体现了应用程序请求独占网络宽带的能力。
2.2.10 部分消息
部分消息只用于面向消息的协议。
2.2.11 路由选择的考虑
对应用程序开发者而言,一个需要考虑的重要方面,就是协议是否可路由。如果协议可路由,就可在两个工作站之间顺利地建立一条通信路径,至于这两个工作站之间的网络硬件是什么,则无关紧要。
2.2.12 其他特征
2.3 Winsock编录
Winsock编录是一个数据库,它包含系统中可用的各种不同的协议。
要想获得系统中安装的网络协议的相关信息,可以调用WSAEnumProtocols函数,这个函数定义为:
int WSAEnumProtocols(
LPINT lpiProtocols,
LPWSAPROTOCOL_INFO lpProtocolBuffer,
LPDWORD lpdwBufferLength
);
2.3.1 Winsock编录和Win64
2.3.2 创建套接字