第2讲协议软件接口_第1页
第2讲协议软件接口_第2页
第2讲协议软件接口_第3页
第2讲协议软件接口_第4页
第2讲协议软件接口_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第2 2讲讲 协议软件接口协议软件接口WindowsWindows网络编程基础网络编程基础1.1.协议的软件接口协议的软件接口1.TCP/IP协议软件接口的特点现象:TCP/IP标准没有规定应用软件与TCP/IP协议软件如何接口的细节,只建议了所需的功能集。操作系统操作系统应用程序应用程序TCP/IP实现实现?TCP/IP协议软件接口协议软件接口特点:不精确指明TCP/IP的设计者尽量避免使用任何一家厂商的内部数据表示。TCP/IP标准尽量避免让接口使用那些只在某一家厂商的操作系统中可用的特征目的:使得协议的兼容性强,可以运行在多厂商的环境之中。目前的一些协议软件接口Berkeley UNI

2、X:套接字接口(或socket)微软:Windows SocketAT&T UNIX(System V):TLI(Transport Layer Interface)1.TCP/IP协议软件接口的特点2.如何访问TCP/IP协议?两种基本方法:设计者发明一种新的系统调用,应用程序用它们来访问TCP/IP;列举出所有的概念性操作为每个操作指定一个名字和参数将每个操作实现为一个系统调用设计者使用一般的I/O调用访问TCP/IP扩充一般的I/O原语两种方法综合问题的引入Linux系统的I/O模型一般模式:打开打开读读/ /写写关闭关闭步骤: 调用“打开”获得对文件或设备的使用权,并返回整型的

3、文件描述符,此后使用它对该文件或设备进行I/O操作; 多次调用“读/写”传输数据; 所有传输操作完成后,用户调用“关闭”,通知操作系统已经完成了对某个对象的使用。Linux中提供的基本I/O功能操作 含义open为输入或输出操作准备一个设备或文件close终止使用以前已经打开的设备或文件read从输入设备或文件中获得数据,将数据放到应用程序的存储器中write将数据从应用程序的存储器传导输出设备或文件lseek转到文件或设备中的某个指定位置ioctl控制设备或用于访问该设备软件(如:指明缓存的大小或改变字符集的映射)Linux中对文件操作打开一个文件读取一个文件关闭文件int desc;des

4、c=open(“filename”,O_RDWR,0);read(desc, buffer, 128);close(desc);TCP/IP的角色:相当于一种新的I/O操作,但比普通应用程序与传统的I/O操作的相互作用复杂得多。网络应用程序要解决的问题: 进行网络I/O操作的两个进程在不同机器上,如何建立它们之间的联系? 网络协议有很多种,如何建立一种通用机制以支持多种协议?如何扩充一般的I/O原语?1.1.协议的软件接口协议的软件接口2.2.套接字套接字一个本地主机建立或拥有的应用程序一个本地主机建立或拥有的应用程序, 在操作系在操作系统控制下的统控制下的,与其它与其它(远程远程)应用进程之

5、间发送和接应用进程之间发送和接收数据的接口。收数据的接口。socketsocketsocketsocket(套接字)(套接字)socket 是进行程序间通讯(IPC)的 BSD 方法。客户将插头插入一个服务器端口建立一个双向的连接管道客户端服务器插口(port)socket的抽象表示Berkeley套接字时间:20世纪80年代早期资助方:远景研究规划局(Advanced Research Projects Agency,ARPA)研究方:加利福尼亚大学伯克利分校产品:套接字接口(套接字API)方法:扩充已有的系统调用增加新的系统调用方法socket程序设计中的几个重要概念端口:为网络通信进程设

6、置一些抽象的访问点,提供了多路输出数据到指定应用程序的方法;端口数据管理:每一端口有一缓冲区来存放进入该端口的数据队列;OS提供机制,创建或唤醒相应进程来处理相应端口数据。 半相关: 三元组(协议,本地地址,本地端口号) 唯一标识本地通信一方;全相关: 五元组(协议,本地地址,本地端口号,远地地址,远地端口号),标识一个完整的网络通信。进行网络进行网络I/OI/O操作的两个进程在操作的两个进程在不同机器不同机器上,如何建上,如何建立它们之间的联系?立它们之间的联系?全相关在客户-服务器应用中的体现客户端:(主动一方) 服务器的IP地址:知道向谁请求服务 客户机的IP地址:让服务器知道把数据传送

7、给谁 服务器的端口号:知道服务器上究竟是谁来提供服务 客户端的端口号:服务器知道最终把数据传送到哪 使用的传输层服务:要求可靠的传输,还是不可靠的传输?服务器:(被动方,与客户端类似) 解决方法套接字类型 流式套接字(SOCK_STREAM): 提供面向连接的、可靠的字节流服务,用于TCP。 数据报套接字(SOCK_DGRAM): 提供无连接的,不可靠的数据报服务,用于UDP。 原始套接字(SOCK_RAW): 允许对较低层的协议,如IP、ICMP直接访问。网络协议有很多种,如何建立一种网络协议有很多种,如何建立一种通用通用机制以支持机制以支持多种协议多种协议? ?将Linux中的 I/O用于

8、TCP/IP扩展文件描述符集(+网络通信所使用的描述符)扩展read和write这两个系统调用(+网络操作功能)其它考虑:指明地址(IP,PORT)指明通讯方式(TCP,UDP,IP)确定通讯角色(Client,Server)处理数据格式套接字描述符和文件描述符用于文件用于文件1的内部数据结构的内部数据结构用于文件用于文件0的内部数据结构的内部数据结构用于文件用于文件2的内部数据结构的内部数据结构用于文件用于文件3的内部数据结构的内部数据结构用于套接字用于套接字1的内部数据结构的内部数据结构3.2 套接字的抽象概念 文件描述符表文件描述符表(一个进程一张)(一个进程一张)0:1:2:3:4:5

9、:针对套接字的系统数据结构 文件描述符表文件描述符表(一个进程一张)(一个进程一张)0:1:2:3:4:5:用于文件的内部数据结构用于文件的内部数据结构Family:PF_INETService:SOCK_STREAMLocalIP:RemoteIP:Local Port:4000Remote Port:8000用于套接字的内部数据结构用于套接字的内部数据结构端点地址端点地址socket编程步骤 建立一个socket 配置socket 连接socket 通过socket发送数据 通过socket接收数据 关闭socketOSIOSI模型与套接口模型

10、与套接口套套接接口口用户进程用户进程内核内核应用层细节应用层细节通信细节通信细节思考考察一种提供消息传递的操作系统,你将如何扩展应用程序接口使其适用于网络通信?猜一宋词名句猜一宋词名句if ( (item) & (!people) ) everything = false ; if (tears.setFlowing() try Speaker skr = new Speaker() catch IOException e; 1.1.协议的软件接口协议的软件接口2.2.套接字套接字3.Winsock3.Winsock 1.1983年,加利弗尼亚大学Berkely学院推出了UNIX下的网

11、络通信接口Socket。 2.90年代初,Sun Microsystems、JSB Corporation、FTP software、Microdyne和微软等公司共同参与制定了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发布。l 发

12、展历史6 Windows socket Windows Socket API是Windows的网络程序接口,它包括一个标准的Berkeley Socket功能函数集合,和为Windows所作的扩充。 扩充的功能都冠以WSA(Windows Socket Asynchronous)的前缀,表明它们都允许异步的I/O操作,并且采用了符合Windows消息机制的网络事件异步选择机制。WinSock API 开发组件 功能:供程序员开发Windows Socket应用程序 组成:a. 介绍Windows Socket实现的文档 b. Windows Socket应用程序接口(API)导入库 c. 一些

13、头文件 其中WINSOCK.H:包括了WinSock实现所定义的宏、常数值、数据结构和函数调用接口原型; 运行组件 WINSOCK.DLL:Windows应用程序接口的动态链接库(DLL),应用程序在执行时通过装入它实现网络通信功能。 两组运行必须的组件:第一版:winsock.h winsock.dll winsock.lib第二版:winsock2.h ws2_32.dll ws2_32.lib1. WinSock的组成 异步选择机制当使用它登记的网络事件发生时,Windows应用程序相应的窗口接收到一个消息,消息中指示了发生的网络事件,以及与事件相关的一些信息。 异步请求函数增加了异步请

14、求服务函数WSAAsyncGetXByY( );允许应用程序采用异步方式获取请求信息,并在请求的服务完成时给应用程序的窗口发送一个消息。 阻塞处理方法当一个应用程序的套接字处于阻塞时,使其放弃CPU,让其它应用程序运行。2. 对Berkeley Socket的扩充出错处理WSAGetLastError():获取最近错误号 WSASetLastError():设置最近错误号启动与终止在使用任何Windows Sockets API调用之前,必须先调用启动函数WSAStartup()来完成Windows Sockets DLL的初始化,协商版本支持,分配必要的资源。 在应用程序完成了对Window

15、s Sockets的使用之后,必须调用函数WSACleanup()从Windows Sockets实现中注销自己,并允许实现释放为其分配的任何资源。 2. 对Berkeley Socket的扩充 套接字函数 数据库函数 Windows扩充的专有函数Windows Socket 1.1库函数第一类:套接字函数 功能: 完成套接字的创建、关闭以及对套接字的命名和名字获取。 一套接字函数第二类:网络连接函数功能: 完成网络连接的建立与关闭。 一套接字函数第三类:数据传输函数 功能: 完成数据的发送与接收。 一套接字函数第四类:字节顺序转换函数 功能: 完成主机字节顺序和网络字节顺序之间的转换。 一套

16、接字函数第五类:地址转换函数 功能: 完成IP地址的点分十进制形式和二进制整数形式之间的转换。 一套接字函数第六类:套接字控制函数 功能: 设置/获取套接字的选项;控制/检测套接字的工作状态。 一套接字函数获得一组套接字的状态,以实现异步获得一组套接字的状态,以实现异步I/O操作操作二. 数据库函数第一类:启动与终止函数 三. Windows Socket专用的增设函数启动函数:WSAStartup () 函数定义:int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ) 输入参数:wVersionRequested:用户使用的

17、Windows Socket最高版本,低字节为主版本,高字节为次版本。 lpWSAData:存放了Windows Socket实现的细节。 返回值:成功返回0;失败返回错误码。 终止函数:WSACleanup() 函数定义:int WSACleanup (void) 说明说明:必须在所有的套接字函数之前调用:必须在所有的套接字函数之前调用说明说明:必须在:必须在套接字操作完成后调用该函数套接字操作完成后调用该函数第二类:异步服务函数 三. Windows Socket专用的增设函数第三类:基于消息机制的异步I/O函数 第四类:阻塞处理函数第四类:阻塞处理函数 三. Windows Socket专用的增设函数函数名功能WSAAsyncSelect( )Berkeley套接字中的select在WinSock中的扩充,获得一组套接字的状态,以实现基于消息机制的异步I/O操作。第五类:错误处理函数 说明:说明:调试程序时非常有用;调试程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论