第一节 应用程序接口概念(识记)
- 网络操作系统中应用程序编程接口称为“网络API”(Application Programming Interface),也称为应用程序接口。应用程序编程接口是一组定义,程序及协议的集合,通过API接口可以实现计算机软件之间的相互通信。API的一个主要功能是提供通用的功能集。
- 操作系统的用户接口包括命令输入和系统调用,应用程序接口API是完成某一个功能的多个系统调用或命令的组合,其功能是完成一个特定的操作。
- 从网络的开放系统互连参考模型(OSIRM)来看,API所采用的基本构造技术就是分层使用。
- 为了便于用户使用网络和开发网络应用程序,各种网络在各个层次上为用户和第三方开发者提供了方便灵活的编程接口。这些接口统称为应用程序编程接口API。
- API同时也可以看作是一种中间件,为各种不同平台提供数据共享途径。根据单个或分布式平台上不同软件应用程序间的数据共享性能,可以将API分为四种类型。
- 远程过程调用(RPC)。远程过程调用通过作用在共享数据缓冲区中的进程(或任务)实现程序间的通信。
- 标准查询语句(SQL)。标准查询语句是标准的访问数据的查询语句,通过通用数据库实现应用程序间的数据共享。
- 文件传输。文件传输通过发送结构化文件实现应用程序间数据共享。
- 信息交付。信息交付指松耦合或紧耦合应用程序间的小型结构化信息,通过程序间的直接通信实现数据共享。
- 某些商用产品会将API作为其公共开放的系统。即产品制定自己的系统接口标准,当需要执行系统整合,自定义和程序应用等操作时,系统所有成员都可以通过该接口标准调用程序代码,该接口也被称之为开放式API。开放式API目前有三种。
- AT&T的UNIX System V,提供的TLI/XTI接口。
- 伯克利的软件分发系统BSD,提供Socket接口。
- Microsoft的Windows系列,提供WinSock接口。
一,TLI/XTI概述(识记)
- TLI(Transport Layer Interface)一开始提供了一个传输层接口API。ISO传输服务为此定义了其所基于的模型。迄今为止,TLI提供了OSI传输层和会话层之间的API。
- XTI(X/Open Transport Interface)接口由TLI接口演变而来,代表该系列接口的未来发展方向。使用XTI与使用TLI接口的应用程序相兼容。新应用程序可以直接使用XTI接口,也可以将应用程序移植到XTI接口上。
- TLI/XTI是一组函数的集合,它为用户提供传输层接口,包括建立通信连接,管理连接以及传送数据。应用程序利用这些函数实现网络通信,控制网络活动。
1,TLI/XTI结构
- TLI/XTI把相互通信的两个进程称为端点。TLI/XTI提供网络通信的低层端点到端点的功能。TLI/XTI为用户应用进程提供了直接传输的接口。
二,TLI/XTI的服务模式(领会)
- TLI/XTI提供了两种服务模式,面向连接的服务模式和面向非连接的服务模式。
三,套接字概念(识记)
- 套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。
第二节 UNIX套接字及其应用(领会)
套接字
- 套接字是通信的两方的一种约定,利用套接字中的相关函数来完成通信过程。有两种加入函数的方法,一种是直接加入支持TCP/IP的调用,另一种是加入支持一般网络协议的函数,而用参数来选择使用TCP/IP。Socket接口采用了后者,这样通信可以支持多协议簇,而TCP/IP只是其中之一。
套接字地址
-
Socket接口可以看成在两个进程进行通信中的一个端点。一个进程将一段信息写入Socket接口中,该Socket接口将这段信息发送给另外一个Socket接口中,使这段信息能传送到其他进程中。
-
网络中Socket接口是如何找到目标的呢?
- 在基于TCP/IP的网络中,每一个主机均被赋予一个唯一的计算机地址,称为IP地址,IP地址是一个32位的无符号二进制整数(仅限IPv4系统),通常以小数点按每8位一组分割。IP地址由四个部分组成,每个部分的范围都是0~255,是一个8位二进制地址。由于每台主机具有唯一的IP地址,所以信息会传递到目的主机而不会误送到其他主机。
- 上述IP地址是指32位地址,这是IP协议版本4(IPv4)规定的,目前由于IPv4地址已近耗尽,所以IPv6地址正逐渐替代IPv4地址,IPv6地址则是128位无符号二进制整数。
- 若同一主机中有多个程序,发送者如何能够将信息传送到目标程序而不会传送到其他程序中去呢?
- 端口号(每一个基于TCP/IP网络通信的程序都被赋予了唯一的端口和端口号),端口是一个信息缓冲区,用于保留Socket接口中的输入/输出信息,端口号是一个16位无符号二进制整数,范围是0~65535,用来区别主机上的每一个进程,低于256的端口号保留给标准应用程序。在通信中,每一个套接字都组合进了IP地址,端口,端口号,这样形成的整体就可以认为每一个套接字传送的对象是可识别的。
-
套接字是通信的基础,是支持TCP/IP的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。
-
套接字可根据通信性质分类。应用程序一般仅在同一类的套接字间进行通信。若操作系统的底层通信协议允许,不同类型的套接字间也照样可以通信。套接字有两种不同的类型:流套接字和数据报套接字,分别用于不同的场景。
-
通信中套接字必须成对出现,其中一个运行于客户机端,称为Client Socket,另一个运行于服务器端,称为Server Socket。套接字之间的连接过程分成三个步骤:服务器监听,客户端请求,连接确认。
套接字函数
-
创建套接字函数socket
#include <sys/socket.h> int socket(int family, int type, int protocol);
- 创建成功返回非负的描述符;失败,返回-1。
- 其中protocol一般取0(raw socket除外)
-
绑定本地名称函数bind
#include <sys/socket.h> int bind(int sockfd, const struct sockaddr*myaddr, socklen_t addrlen);
- 绑定正常返回0,失败返回-1。
- 其中sockfd由socket返回。
-
建立连接函数connect
#include <sys/socket.h> int connect(int sockfd, const struct sockaddr*servaddr, socklen_t addrlen);
- 连接正常返回0,失败返回-1。
- 其中sockfd由socket返回。
-
侦听函数listen
#include <sys/socket.h> int listen(int sockfd, int backlog);
- 侦听正常返回0,失败返回-1。
- 该函数通常在socket和blind函数调用后使用,且在accept调用前在服务器端运行。
-
接收数据函数accept
#include <sys/socket.h> int accept(int sockfd, struct sockaddr*cliaddr, socklen_t*addrlen);
- 接收正常返回非负的描述符,失败返回-1。
- 其中sockfd由socket返回,cliaddr和addrlen用于返回用户相应的进程的协议地址。
-
关闭套接字函数close
#include <sys/socket.h> int close(int sockfd);
- 正常关闭返回0,失败返回-1。
第三节 WinSock接口及其应用(领会)
一,WinSock概述
- WinSock接口规范支持单一的通信域,即Internet域。各种进程在域中用Internet协议簇来相互进行通信。套接字可以根据通信性质分类。应用程序一般仅在同一类的套接字间通信。若底层的通信协议允许,不同类型的套接字间也可以通信。用户目前可以使用两种套接字:即流套接字和数据报套接字。
- 流套接字提供了双向的,有序的,无重复并且无记录边界的数据流服务。
- 数据报套接字支持双向的数据流,但并不保证是可靠,有序,无重复的。
二,WinSock接口实现网络通信
- WinSock接口实现网络通信的典型范例便是客户机/服务器模型。
- 在此模型中客户应用程序向服务器服务程序请求服务。这种方式是非对称的。在非对称协议中,一方固定地认为是主机,而另一方则认为是从机。当服务被提供时必然存在“客户进程”和“服务进程”。一个服务程序通常在一个默认的端口监听客户方对服务的请求,即服务进程一直是处于休眠状态,直到一个客户对这个服务提出了连接请求。此时,服务程序被“唤醒”并且为客户提供服务,即对客户的请求做出反应。
- 在一次网络通信/连接中有以下几个参数需要被设置:本地IP地址,本地端口号,对方端口号,对方IP地址。