第2讲-协议软件接口分析.ppt_第1页
第2讲-协议软件接口分析.ppt_第2页
第2讲-协议软件接口分析.ppt_第3页
第2讲-协议软件接口分析.ppt_第4页
第2讲-协议软件接口分析.ppt_第5页
免费预览已结束,剩余38页可下载查看

下载本文档

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

文档简介

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

温馨提示

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

评论

0/150

提交评论