《第2讲协议软件接口课件.ppt》由会员分享,可在线阅读,更多相关《第2讲协议软件接口课件.ppt(43页珍藏版)》请在三一办公上搜索。
1、第2讲 协议软件接口,Windows网络编程基础,1.协议的软件接口,1.TCP/IP协议软件接口的特点,现象:TCP/IP标准没有规定应用软件与TCP/IP协议软件如何接口的细节,只建议了所需的功能集。,操作系统,应用程序,TCP/IP实现,?,TCP/IP协议软件接口,特点:不精确指明TCP/IP的设计者尽量避免使用任何一家厂商的内部数据表示。TCP/IP标准尽量避免让接口使用那些只在某一家厂商的操作系统中可用的特征目的:使得协议的兼容性强,可以运行在多厂商的环境之中。目前的一些协议软件接口Berkeley UNIX:套接字接口(或socket)微软:Windows SocketAT&T
2、UNIX(System V):TLI(Transport Layer Interface),1.TCP/IP协议软件接口的特点,2.如何访问TCP/IP协议?,两种基本方法:设计者发明一种新的系统调用,应用程序用它们来访问TCP/IP;列举出所有的概念性操作为每个操作指定一个名字和参数将每个操作实现为一个系统调用设计者使用一般的I/O调用访问TCP/IP扩充一般的I/O原语两种方法综合,问题的引入,Linux系统的I/O模型一般模式:打开读/写关闭步骤: 调用“打开”获得对文件或设备的使用权,并返回整型的文件描述符,此后使用它对该文件或设备进行I/O操作; 多次调用“读/写”传输数据; 所有传
3、输操作完成后,用户调用“关闭”,通知操作系统已经完成了对某个对象的使用。,Linux中提供的基本I/O功能,Linux中对文件操作打开一个文件读取一个文件关闭文件,int desc;desc=open(“filename”,O_RDWR,0);,read(desc, buffer, 128);,close(desc);,TCP/IP的角色:相当于一种新的I/O操作,但比普通应用程序与传统的I/O操作的相互作用复杂得多。网络应用程序要解决的问题: 进行网络I/O操作的两个进程在不同机器上,如何建立它们之间的联系? 网络协议有很多种,如何建立一种通用机制以支持多种协议?,如何扩充一般的I/O原语?
4、,1.协议的软件接口,2.套接字,一个本地主机建立或拥有的应用程序, 在操作系统控制下的,与其它(远程)应用进程之间发送和接收数据的接口。,socket(套接字),socket 是进行程序间通讯(IPC)的 BSD 方法。客户将插头插入一个服务器端口建立一个双向的连接管道,socket的抽象表示,Berkeley套接字,时间:20世纪80年代早期资助方:远景研究规划局(Advanced Research Projects Agency,ARPA)研究方:加利福尼亚大学伯克利分校产品:套接字接口(套接字API)方法:扩充已有的系统调用增加新的系统调用,方法socket程序设计中的几个重要概念端口
5、:为网络通信进程设置一些抽象的访问点,提供了多路输出数据到指定应用程序的方法;端口数据管理:每一端口有一缓冲区来存放进入该端口的数据队列;OS提供机制,创建或唤醒相应进程来处理相应端口数据。 半相关: 三元组(协议,本地地址,本地端口号) 唯一标识本地通信一方;全相关: 五元组(协议,本地地址,本地端口号,远地地址,远地端口号),标识一个完整的网络通信。,进行网络I/O操作的两个进程在不同机器上,如何建立它们之间的联系?,全相关在客户-服务器应用中的体现客户端:(主动一方) 服务器的IP地址:知道向谁请求服务 客户机的IP地址:让服务器知道把数据传送给谁 服务器的端口号:知道服务器上究竟是谁来
6、提供服务 客户端的端口号:服务器知道最终把数据传送到哪 使用的传输层服务:要求可靠的传输,还是不可靠的传输?服务器:(被动方,与客户端类似),解决方法套接字类型 流式套接字(SOCK_STREAM): 提供面向连接的、可靠的字节流服务,用于TCP。 数据报套接字(SOCK_DGRAM): 提供无连接的,不可靠的数据报服务,用于UDP。 原始套接字(SOCK_RAW): 允许对较低层的协议,如IP、ICMP直接访问。,网络协议有很多种,如何建立一种通用机制以支持多种协议?,将Linux中的 I/O用于TCP/IP扩展文件描述符集(+网络通信所使用的描述符)扩展read和write这两个系统调用(
7、+网络操作功能)其它考虑:指明地址(IP,PORT)指明通讯方式(TCP,UDP,IP)确定通讯角色(Client,Server)处理数据格式,套接字描述符和文件描述符,用于文件1的内部数据结构,用于文件0的内部数据结构,用于文件2的内部数据结构,用于文件3的内部数据结构,用于套接字1的内部数据结构,3.2 套接字的抽象概念,针对套接字的系统数据结构,Family:PF_INETService:SOCK_STREAMLocalIP:202.196.63.5RemoteIP:22.196.56.3Local Port:4000Remote Port:8000,用于套接字的内部数据结构,端点地址,
8、socket编程步骤 建立一个socket 配置socket 连接socket 通过socket发送数据 通过socket接收数据 关闭socket,OSI模型与套接口,套接口,用户进程,内核,应用层细节,通信细节,思考,考察一种提供消息传递的操作系统,你将如何扩展应用程序接口使其适用于网络通信?,猜一宋词名句,if ( (item) ,1.协议的软件接口,2.套接字,3.Winsock,1.1983年,加利弗尼亚大学Berkely学院推出了UNIX下的网络通信接口Socket。 2.90年代初,Sun Microsystems、JSB Corporation、FTP software、Mic
9、rodyne和微软等公司共同参与制定了Windows Socket规范,试图使Windows下的Sockets程序设计标准化。 3.1992年制定Windows Socket规范1.0版,将Socket从UNIX移植到DOS和Windows下。 4.1993年1月,制定了Windows Socket 1.1版。 5.1994年5月,WinSock小组启动WinSock2规范制定工作。 6.1997年5月,WinSock2的正式规范版本2.2.1发布。,发展历史,6 Windows socket,Windows Socket API是Windows的网络程序接口,它包括一个标准的Berkeley
10、 Socket功能函数集合,和为Windows所作的扩充。 扩充的功能都冠以WSA(Windows Socket Asynchronous)的前缀,表明它们都允许异步的I/O操作,并且采用了符合Windows消息机制的网络事件异步选择机制。,WinSock API, 开发组件 功能:供程序员开发Windows Socket应用程序 组成:a. 介绍Windows Socket实现的文档 b. Windows Socket应用程序接口(API)导入库 c. 一些头文件 其中WINSOCK.H:包括了WinSock实现所定义的宏、常数值、数据结构和函数调用接口原型; 运行组件 WINSOCK.DL
11、L:Windows应用程序接口的动态链接库(DLL),应用程序在执行时通过装入它实现网络通信功能。 两组运行必须的组件:第一版:winsock.h winsock.dll winsock.lib第二版:winsock2.h ws2_32.dll ws2_32.lib,1. WinSock的组成, 异步选择机制当使用它登记的网络事件发生时,Windows应用程序相应的窗口接收到一个消息,消息中指示了发生的网络事件,以及与事件相关的一些信息。 异步请求函数增加了异步请求服务函数WSAAsyncGetXByY( );允许应用程序采用异步方式获取请求信息,并在请求的服务完成时给应用程序的窗口发送一个消
12、息。 阻塞处理方法当一个应用程序的套接字处于阻塞时,使其放弃CPU,让其它应用程序运行。,2. 对Berkeley Socket的扩充,出错处理WSAGetLastError():获取最近错误号 WSASetLastError():设置最近错误号启动与终止在使用任何Windows Sockets API调用之前,必须先调用启动函数WSAStartup()来完成Windows Sockets DLL的初始化,协商版本支持,分配必要的资源。 在应用程序完成了对Windows Sockets的使用之后,必须调用函数WSACleanup()从Windows Sockets实现中注销自己,并允许实现释放
13、为其分配的任何资源。,2. 对Berkeley Socket的扩充, 套接字函数 数据库函数 Windows扩充的专有函数,Windows Socket 1.1库函数,第一类:套接字函数 功能: 完成套接字的创建、关闭以及对套接字的命名和名字获取。,一套接字函数,第二类:网络连接函数功能: 完成网络连接的建立与关闭。,一套接字函数,第三类:数据传输函数 功能: 完成数据的发送与接收。,一套接字函数,第四类:字节顺序转换函数 功能: 完成主机字节顺序和网络字节顺序之间的转换。,一套接字函数,第五类:地址转换函数 功能: 完成IP地址的点分十进制形式和二进制整数形式之间的转换。,一套接字函数,第六
14、类:套接字控制函数 功能: 设置/获取套接字的选项;控制/检测套接字的工作状态。,一套接字函数,获得一组套接字的状态,以实现异步I/O操作,二. 数据库函数,第一类:启动与终止函数,三. Windows Socket专用的增设函数,启动函数:WSAStartup () 函数定义:int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ) 输入参数:wVersionRequested:用户使用的Windows Socket最高版本,低字节为主版本,高字节为次版本。 lpWSAData:存放了Windows Socket实现的细节。
15、返回值:成功返回0;失败返回错误码。 终止函数:WSACleanup() 函数定义:int WSACleanup (void),说明:必须在所有的套接字函数之前调用,说明:必须在套接字操作完成后调用该函数,第二类:异步服务函数,三. Windows Socket专用的增设函数,第三类:基于消息机制的异步I/O函数,第四类:阻塞处理函数,三. Windows Socket专用的增设函数,第五类:错误处理函数,说明:调试程序时非常有用;MSDN索引:Win32 Error Codes和Net Error Codes;例如: 10060(WSAETIMEDOUT):连接超时,三. Windows Socket专用的增设函数,说明: 扩充了新的内容,同时与Windows Sockets 1.1向后兼容。 编写应用程序时需要包含头文件:“Winsock2.h.” 在32位Windows下应包含WS2_32.lib,使用WS2_32.DLL。,四、Windows Socket 2 扩展,
链接地址:https://www.31ppt.com/p-1488179.html