版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计校园代理服务器的设计与实现大学年6月毕业设计校园代理服务器的设计与实现学生:指导教师:专业:网络工程所在单位:计算机科学与工程学院答辩日期:年6月19日大学毕业设计(论文)PAGEVI -PAGEIV-摘要随着Internet在全世界的普及,越来越多的用户正在将自己的个人计算机连入网络。然而,Internet访问范围的扩大,对网络管理者提出了更高的要求。在决定如何对网络访问进行管理时,需要综合考虑经济投入、经费控制、网络安全以及内容管理等诸多方面的问题,而使用代理服务器软件系统是解决这一系列问题的有效途径。代理服务器是介于浏览器和WEB之间的一台服务器,能够对浏览器请求进行各种各样的处理,起到很好的访问控制作用。它的工作原理是,接收客户机的数据连接请求,并将请求传给Web服务器;再从Web服务器接收返回的数据,最后把数据传给客户端显示。本论文设计并实现了一个简单的代理服务器,采用客户机/服务器结构进行开发。系统主要包括三个功能模块,分别为主守护进程模块、代理服务模块、缓存管理模块。主守护进程模块主要负责代理服务器的初始化,提供监听代理服务的端口;代理服务模块主要是负责处理客户端的请求,提供代理服务;缓存管理模块主要是对缓存区进行管理,包括缓存区的更新策略和更新方式等。为了方便分析和设计,系统设计中设置不同的状态量用于标识客户机、代理服务器及服务器间的联结状态。在保证系统基本功能的同时,使用多线程机制使得代理系统有更好的延续性。该代理系统具有简单、易用、网络化等优点,能够完成一般的HTTP访问代理服务。关键词代理服务器;C/S结构;套接字;网络编程
AbstractAlongwiththepopularityofInternetallovertheworld,moreandmorepeopleconnecttheircomputerstothenetwork.However,withtheenlargementoftherangeofaccessinInternet,itprovedtobeachallengetothosenetworkmanagers.Whentheymakeadecisionabouthowtomanageanetwork,theyhavetothinkitovertogetherwiththepolicyofinvestment,expenditurecontrol,networksecurityandmanagementofcontentofaccessandsoon.Aproxyserversystemwouldbeaneffectiveresolutiontothisproblem.TheproxyserverisaserverwhichsituatesbetweenbrowserandaWEBserver.Itcanrequestavarietyofprocessing,playaverygoodaccesscontrol.It’sprincipleofworkisthatitreceivestheconnectionrequestfromtheclient,andhandsdowntherequestedtotheWebserver,thenreceivesdatawhichisreturnedfromtheWebserver,finallyhandsitdownthedatatotheclient.Thisthesisdesignsandimplementsasimpleproxyserver,usingclient/serverstructurewasdeveloped.Thesystemmainlyincludesthreemodulesrespectivelythemaindaemonmodule,servicemoduleagent,cachemanagementmodule.Mainguardprocessmoduleismainlyresponsiblefortheinitializationoftheproxyserverandportofthelisteningagentservice;proxyservicemodulemainlyisresponsibleforhandlingtheclient'srequest,provideserviceproxy;cachemanagementmoduleismainlyforbuffermanagement,includingthebuffercacheupdatestrategyandupdate.Tofacilitateanalysisanddesign,thesystemsetsdifferentstatestoidentifyclient,proxyserverandtheconnectivestatesbetweenservers.Whenthesystem’sbasicfunctionareguaranteed,itusethemultithreadingtoenabletheproxyservertohaveabetterduration.Thisproxysystemhasthemeritsuchassimple,easytouse,networkandsoon,anditcancompletetheproxyofgeneralHTTPvisit.KeywordsProxyServer;Client/ServerStructure;Socket;NetworkProgramming
目录TOC\o"1-3"\u摘要 IAbstract II第1章绪论 11.1选题的背景 11.2课题研究意义和目的 1第2章系统开发工具及开发平台 32.1开发语言 32.2开发平台 42.2.1Eclipse 42.2.2C/S结构 52.3网络编程技术 52.4运行环境 6第3章代理服务器的理论基础 73.1主要功能 73.2主要作用 83.3基本原理 93.4工作流程 10第4章代理服务器系统分析 134.1设计目标 134.2需求分析 134.2.1性能需求分析 144.2.2功能需求分析 144.2.3可行性分析 15第5章代理服务器的设计与实现 165.1总体设计 165.2详细设计 165.2.1主守护进程模块 165.2.2代理服务模块 185.2.3缓存管理模块 195.3系统实现 205.3.1主守护进程模块的实现 215.3.2代理服务模块的实现 225.3.3缓存管理模块的实现 23第6章系统测试 246.1系统测试概述 246.2代理服务器系统的测试 246.2.1访问网页测试 256.2.2登录QQ测试代理服务器 27总结 29致谢 30参考文献 31大学毕业设计(论文)
第1章绪论1.1选题的背景随着Internet的普及和不断增长,越来越多用户开始访问网络。2014年底统计Internet的人数已经达到30亿,Internet指数级的增长导致了沉重的的网络负载和网络服务响应时间的迟缓。随着Internet的高速发展,越来越多的企业需要通过Internet与外界进行更多的联系。出于安全性和促进业务发展的考虑,一方面各种各样的代理服务器(APACHE、WINPROXY)应运而生,同时几乎所有的防火墙产品都融入了应用代理的功能。大量的数据要通过代理服务器进出企业内部网,随着数据量的日益增大,代理服务器所能承受的并发连接数量和所要处理的网络吞吐量越来越大,如何设计高性能的代理服务器成为一个倍受关注的问题。1.2课题研究意义和目的随着Internet与Intranet的飞速发展,作为连接Internet与Intranet的桥梁,代理服务器在实际应用中发挥着及其重要的作用。它可用于多个目的,最基本的功能是连接,此外还包括安全性、缓存、内容过滤、访问控制管理等功能。在代理服务器的众多功能中,安全性是一个突出且敏感的功能。绝大多数企业、部门在使用代理服务器的时候,都会考虑这个问题,把它作为选购代理服务器产品的重要依据。代理服务器是介于浏览器和Web服务器之间的一台服务器,其工作主要在OSI模型的会话层,它提供了一个有效访问Internet的途径,它的实施在校园网管理中有如下优势:1.解决校园网中IP资源不足的矛盾除了清华大学等少数几个学校分配到B类IP地址外,大部分学校分到的IP地址都是C类地址,在校园网的运行管理中IP资源十分紧张。在满足学校管理、办公自动化、教师教学研究等主要要求后,根本就不可能给各院系学生机房中的每一台计算机再配一个固定的IP地址,这样做是不经济的,也是不必要的。采用代理服务器,仅给此代理服务器一个真实的IP地址,而与此代理服务器相连的内部网计算机由代理服务器分配一个虚拟的地址块即可,这样既节约了IP地址,又可以使所有学生用机间接地与Internet相连,共享Internet资源。2.可缓解校园网中传输速度不高的矛盾尽管网络传输速率得到了很大的提高,但传输效率还是当前网络发展的问题之一。一般情况下,校园网中计算机访问Internet的资源都是与该资源站点建立连接和传输数据的一个过程,当多个计算机访问相同的站点、下载相同的资料时,多个计算机就会与同一个站点进行多次连接,这样既浪费时间,占用信道,又多花通讯费用。如果使用代理服务器,代理服务器会将访问过的资源信息保存在服务器的Cache中,内部网中客户机随后对同样资源的访问可直接从代理服务器中获取,不必建立外部连接及从内部外部传输,即加快了访问速度,又节约了上网费用。3.可实现各院系学生机房的费用管理使用代理服务器,对外它是一个IP地址单位,可作为一个收费用户向学校管理部门交费;而对机房内部,它又是一个管理机构,可实现机房内部的管理,并对网络内外的通讯过程进行审计、跟踪、记录,它既可定期将这些记录日志存入文件,也可存入数据库,这些信息为实现网络的审计和计费提供了依据。4.可实现对校园网的安全访问控制若校园网不加防范地连入Internet,很容易受到入侵者的攻击,严重时会导致网络的瘫痪,防火墙技术正是在Internet上使用的一种安全保障措施,它可以按照用户事先规定的方案控制信息的流入和流出,监督和控制使用者的操作。目前防火墙的实现技术主要有两种,即基于路由器的包过滤技术和基于代理服务器控制技术。如果采用代理服务器,只是代理服务器直接与Internet相连,而内部网的机器不直接与Internet相连,客户机的内部资源不会受到侵犯,同时,又可以在代理服务器上控制内部网客户机对Internet资源和服务的访问。如限制某种用户使用某种Internet服务,限制某种用户访问某些Internet站点,比如说,允许某些用户访问国外站点,允许某些用户仅访问国内免费网站,允许某些用户只能访问校园网内资源等[1]。
第2章系统开发工具及开发平台2.1开发语言Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。Java作为一种高级的程序语言,具有众多的优点。Java特性主要有以下几点内容。(1)简单。Java语法是C++语法的一个“纯净”和“升华”的版本。Java舍去了C++中很少使用、难于理解、易混淆的内容提供了大量的类库,使得编程更易学,让更多计算机爱好者加入到了程序员的队伍中。同时其保留了C++的精华,使原来的C++程序员能够顺利地转入到Java的使用中来。(2)可移植性。Java引以为傲的“一次编译,到处运行”,可以方便地将Java部署到任何不同平台的计算机上。(3)面向对象。Java是纯面向对象的编程语言,程序员可以用面向对象的思想来进行程序的编写与设计,能够创建或使用可重用的组件,使得程序更容易编写和维护。(4)分布式。Java在网络方面的强大是其它任何语言无法比拟的,可以通过其提供的类库方便地处理各种网络协议,把打开套接字连接等烦琐的网络任务变得非常容易。(5)健壮性。Java编译器会检查出很多其它语言在运行时才显示出来的错误。Java采用的指针模型可以消除重写内存和数据崩溃的可能。(6)多线程。多线程编译的简单性是Java成为流行的服务器端开发语言的主要原因之一。(7)安全。Java是目前最安全的语言之一。目前极少的语言本身具有安全性的开发平台,用Java可以构建防病毒和防篡改的系统。(8)动态。Java可随意增加新的方法以及实例变量,而客户端却不需要做任何的改动。动态的特性也是Java在互联网中兴盛不衰的法宝。(9)体系结构中立。字节码与计算机体系结构无关,只要存在运行时系统,可在多种处理器上执行。Java是在字节码的层次上跨平台,而C++只是在源码的层次上跨平台[2]。2.2开发平台2.2.1EclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL、PHP、Android等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。Eclipse项目IBM发起,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。Eclipse是一个开放源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。随后还有包括Oracle在内的许多大公司也纷纷加入了该项目,Eclipse的目标是成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成--EclipsePlatform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。2.2.2C/S结构C/S又称Client/Server或客户/服务器模式,是为人所熟知的软件系统体系结构。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。客户端需要安装专用的客户端软件。C/S的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。客户/服务器模式工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供或被接受,这一套惯例包含了一套协议,它必须在通信的两头都被实现。根据不同的实际情况,协议可能是对称的也可能是非对称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方是不可被改变的主机,而另一方则是从机。一个对称协议的例子是Internet中用于终端仿真的Telnet,而非对称协议的典型例子是HTTP协议。无论协议是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。2.3网络编程技术代理服务技术是一台PC机上安装一套代理软件,主要用于用户对Internet资源的访问,是典型的网络应用软件,要在Windows平台上开发这样的软件,必须对Windows网络编程的模式进行深入的研究和理解。Winsock是Windows的网络编程接口,是Windows网络编程事实上的标准。应用程序通过调用Winsock的API实现相互之间的通信,而Winsock利用下层的网络通信协议功能和操作系统调用实现实际的通信工作。套接字(Sockets)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看做不同主机间的进程进行双向通信的端点,它构成了在单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换可可能穿越域的界限,但这时一定要执行某种解释程序)。Windows规范支持单一的通信域,即Internet域。各种进程使用这个域,互相之间用Internet协议簇进行通信。套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间通信。套接字有两种不同的类型,流套接字和数据报套接字:1.流套接字流套接字提供双向的、有序的、无重复并且无记录边界的数据流服务,它适用于处理大量数据。网络传输层可以将数据分散或集中到合适尺寸的数据包中。2.数据报套接字数据报套接字支持双向的数据流,但并不保证数据传输的可靠性、有序性和无重复性。也就是说,一个数据报套接字接收信息的进程有可能发现信息重复,或者和发出时的顺序不同的情况。2.4运行环境软件运行平台:本系统设计运行在Windows2007操作系统环境下。硬件运行平台:CPU:P100或以上。内存:16M或以上。显卡:普通VGA显卡。显示器:普通彩色显示器。键盘:普通标准键盘。鼠标:标准鼠标。网络环境:由于系统为C/S模式,所以要求在网络环境下运行,结合本系统的网络数据流量不大,10Mbps的网络就足够了。当前的网络协议都能够满足这个要求,所以对网络环境没有特殊的要求。
第3章代理服务器的理论基础3.1主要功能ProxyServer(代理服务器)是Internet链路级网关所提供的一种重要安全功能,它的工作主要在开放系统互联(OSI)模型的对话层。主要的功能有:1.连接Internet与Intranet充当防火墙:因为所有内部网的用户通过代理服务器访问外界时,只映射为一个IP地址,所以外界不能直接访问到内部网;同时可以设置IP地址过滤,限制内部网对外部网的访问权限;另外,两个没有互联的内部网,也可以通过第三方的代理服务器进行互联来交换信息。2.节省IP开销:由于所有用户对外只占用一个IP,所以不必租用过多的IP地址,降低网络的维护成本。这样,局域网内没有与外网相连的众多机器就可以通过内网的一台带路服务器连接到外网,大大减少费用。当然也有它不利的一面,如许多网络黑客通过这种方法隐藏自己的真实IP地址,而逃过监视。3.提高访问速度:本身带宽较小,通过带宽较大的Proxy与目标连接。而且通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,从而达到提高访问速度的目的。4.防止攻击:隐藏本机的真实地址信息,还可以隐藏本机的IP,防止被黑客攻击。通过分析指定IP地址,可以查询到网络用户的目前所在地。例如,大家在一些论坛上看到,论坛中明确标出了发帖用户目前所在地,这就是根据论坛会员登录时的IP地址解析的。还有平时最为常用的显IP版QQ,在“发送消息”窗口中,可以查看对方的IP及解析出的地理位置。而当使用相应协议的代理服务器后,就可以达到隐藏当前所在地地址的目的了。5.突破IP访问限制:使用它可以访问一些有IP禁止访问的服务器,因为封锁只禁止了主机和目标服务器的连接,但并没有禁止主机与代理服务器的连接以及代理服务器与目标服务器的连接。代理服务器有许多种,大体来说有HTTP,FTP,SOCKET代理三种,其中由分透明和不透明代理。其中透明代理一般是网关,是硬件,所以不讨论透明代理。当机器通过代理服务器上网时,通讯是分两次的,先是机器和代理服务器通讯,再是代理服务器和目的地址通讯。机器和代理服务器通讯时,目的IP是代理服务器的IP。代理服务器和目的地址通讯时,源IP是代理服务器的IP,当然外部的数据也是一样的。在内网中,出现的IP数据,全是内网和代理服务器的IP。因此,从IP包头是看不出任何与外面通讯的信息的,只有从数据中才能看到。3.2主要作用代理服务器是一种网络实体,又称为万维网高速缓存,代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源。代理服务器可在客户端或服务器端工作,也可在中间系统工作。图3-1(a)是校园网不使用代理服务器的情况。这时,校园网中所有的PC都通过专线链路(R1-R2)与因特网上的源点服务器建立TCP连接。因而校园网各PC访问因特网的通信量往往会使这条链路过载,使得时延大大增加。图3-1(a)不使用代理服务器图3-1(b)使用代理服务器图3-1(b)是校园网使用代理服务器的情况,此时访问因特网的过程如下:1.校园网PC中的浏览器向因特网的服务器请求服务时,就先和校园网的代理服务器建立TCP连接,并向代理服务器发出HTTP请求报文。2.若代理服务器已经存放了所请求的对象,代理服务器就把这个对象放入HTTP响应报文中返回给PC的浏览器。3.否则,代理服务器就代表发出请求的用户浏览器,与因特网上的源点服务器建立TCP连接,并发送HTTP请求报文。4.源点服务器把所请求的对象放在HTTP响应报文中返回给校园网的代理服务器。5.代理服务器收到这个对象后,先复制在自己的本地存储器中(留待以后用),然后再把这个对象放在HTTP响应报文中,通过已建立的TCP连接,返回给请求该对象的浏览器。代理服务器有时是作为服务器(当接受浏览器的HTTP请求时),但有时却作为客户(当向因特网上的源点服务器发送HTTP请求时)。在使用代理服务器的情况下,由于有相当大一部分通信量局限在校园网的内部,因此,专线链路(R1-R2)上的通信量大大减少,因而减少了访问因特网的延时。3.3基本原理 代理服务器实质上是一个人架设在内部网络用户群体与Internet之间的桥梁,用以实现内部网络用户对Internet的访问[3]。代理服务器软件需要安装在一台同时跨越外部网络和内部网络的计算机上,换句话说,即需要这台计算机配备两个网络接口:一个接口通过网络适配器卡连接内部局域网络,另一个网络接口连接Internet。连接Internet的网络接口,可以是调制解调器拨号网络,可以是ISDN网络适配器,也可以是以太网适配器。这台用作代理服务器的计算机或网络服务器,通常被称作“双端口主机”或“双宿主机”。内部网络则需要运行TCP/IP协议。当位于内部局域网络上的计算机请求访问Internet时,先通过局域网将访问请求提交给充当代理服务器的计算机,再由这台计算机转发到Internet上去;当代理服务器从Internet上接收请求的信息时,代理服务器将能识别这是局域网中哪台计算机请求的内容,并将它正确地传送给该计算机,从而完成“代理服务”的职能。其基本功能结构,如图3-2所示:图3-2代理服务器基本功能结构代理服务器有一个ServerSocket始终在进行端口监听,对于每个Web客户机的请求,代理服务器生成一个连接服务线程进行处理,每个连接服务线程新开两个Socket进行Socket进行数据传递:客户端Socket首先接受Web客户机的请求=1\*GB3①,经过一系列处理后把请求=1\*GB3①转变成为请求=2\*GB3②,由服务器Socket发往Web服务器,同时获得服务器的响应=3\*GB3③,将其转变为响应=4\*GB3④,通过客户端Socket发往Web客户机。代理服务器不仅可以实现提高浏览器速度和效率的功能,它还可以实现网络的安全过滤、流量控制、用户管理等功能,因此它既是一种网络防火墙技术,同时也可以解决许多单位连接Internet引起IP地址不足的问题。在一些规模较大的企业网络内部,为了便于管理和恰当的控制网络信息流量,可以采取设置分级代理服务器的方法,来管理用户上网。3.4工作流程通过在一台Web主机上运行代理服务器软件,监测与侦听来自网络上各种信息,过滤访问内部网络的数据,保护内部网络不受破坏。在代理方式下,内部网络的数据包不能直接进入互联网,而互联网的数据包也不可直接进入内部网络,均要经过代理服务器的处理,通过网关复制传递数据,因此代理服务器可以进行访问控制和地址转换,如图3-3所示:图3-3工作流程图当代理服务器接受到用户对某点的访问请求后将检查请求是否符合规定,若允许用户访问该站点,代理服务器便以客户的身份去该站点取出信息转发给用户。代理服务器通常具有一个高速缓存,该高速缓存存储了用户经常访问的站点信息,若下一位用户需要访问同一站点信息,代理服务器不需要重新从站点获取信息,可直接将高速缓存中的内容发出即可,这样可以提高网络速度,并且使得网络资源可以高效地被利用。代理服务器封装并保护了内部网络资源,互联网用户不能直接访问。代理服务器进行网络传输的过程如下:(1)内部网络主机若要访问远程服务器上的一个网页,先生成一个请求并将请求信息传送给与远程网络连接的网关,即代理服务器;(2)代理服务器接收到请求后,先识别内部主机试图访问的类型,若是Web网页,则代理服务器将请求传送到只处理HTTP会话的应用程序;(3)当HTTP应用程序收到请求时,需验证ACL是否允许此类传输,若允许,则代理服务器将产生一个新请求发送给远程服务器;(4)新请求被送到远程服务器,远程服务器向代理服务器发出回复信息,代理服务器收到回复信息后,再次将回复信息传送给HTTP应用程序;(5)HTTP应用程序接着详细查看远程服务器发送的信息有无特殊情况,若可以接收,则将生成一个新分组,并把信息发送给内部主机。
第4章代理服务器系统分析4.1设计目标本设计要实现一个简单的代理服务器,并实现HTTP代理功能,服务器能够建立服务,接收用户请求,连接远程Web服务器,并将远程Web服务器上获取的数据转发给用户。在对代理服务器进行设计时,需要考虑许多方面的因素,因为在现代网络中代理服务器的作用是多方面的。尽管由于网络环境的差别很大,以及使用代理服务器的目的的不同,导致实现代理服务器的方案可能有很多,但不论采用何种代理服务器设计方案,要设计出高性能的代理服务器,都需要解决一些带有共性的问题。一般来说,在设计代理服务器时,都要从以下几个方面进行考虑:1.代理服务的多样性:也就是通过协议的覆盖率,客户通过网络代理服务系统应该得到全面的信息服务,这要求代理服务系统覆盖相对较多的常用协议。代理协议是多少往往是衡量代理服务器性能的一个重要指标。2.代理服务的安全性:作为防火墙的一种解决方案,其提供的安全性显然也是一个重要指标。3.管理功能的全面性:这对于代理服务系统的整体性能有着较大的影响。作为一个多用户网络应用系统,对用户以及用户使用的平台进行全面管理是其不可缺少的一个组成部分。4.代理服务的高效性:客户通过网络代理服务系统访问Internet应该尽可能的减少延时,提高客户的访问质量。5.已获得信息的共享性:Internet与局域网(LAN)的传输速率在数量级上的差异,Internet与局域网的使用费也存在巨大的差异,使得用户对已获得信息的共享性提出了较高的要求,代理服务器的缓存机制正日益受到重视。要开发出具有一定同用性的代理服务器产品,在形成设计目标时应该充分考虑这种因素,并结合自身的需求进行综合分析。4.2需求分析代理服务器的主要作用是为用户提供访问代理服务。它的工作过程是这样的:代理服务器被启动后,它首先在管理员指定的端口进行监听,当有客户要求进行Internet访问时,这个请求会发送到代理服务器,此时,代理服务器会审查这个请求,并启动相应的代理服务程序将客户的请求发送到Internet上去;当收到返回的内容时,代理服务器能够识别这是哪个客户请求的内容,并将这个内容发送给这个客户,这样就完成了一次代理服务的过程。1.在使用代理服务器的工作模式下,内部网所有Internet访问都是通过代理服务器进行的,这就意味着可以通过代理服务器进行Internet访问管理和网络安全控制。2.由于网络所有的Internet访问活动都是通过代理服务器完成,因此,所有的Internet访问活动在代理服务器上都是可见的,代理服务器应该能够根据管理员的要求,显示当时用户访问Internet的活动,或对用户的访问活动进行记录,形成日志,供系统管理员查阅和分析。同时,日志也可以作为其它管理活动的依据,比如访问流量和费用的管理、访问时间的管理等。代理服务器应该能够处理内部网用户的并发请求,以提高响应速度。代理服务器一般是采用多线程的方法来处理用户的并发请求的,当有用户的请求到达时,代理服务器启动一个新的线程处理用户的请求;当一个用户的请求处理结束后,为该用户服务的线程也就结束了,并释放系统资源。4.2.1性能需求分析面对目前网络的快速发展,为了确保代理服务器系统能够长期、安全、稳定、可靠、高效的运行,服务器系统应该能满足以下性能需求:1.准确性和及时性:代理服务器系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量。2.开放性和可扩充性:代理服务器系统在开发过程中,应该充分考虑以后的可扩充性。3.易用性和易维护性:代理服务器系统要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的帮助文档,缩短用户对服务器系统熟悉的过程。4.数据录入和处理的准确性和实时性、数据的一致性与完整性、数据的共享与独立性。5.代理服务器系统软件是Eclipse的环境下根据软件工程原理,以及Java开发设计方法实例开发完成。4.2.2功能需求分析根据课题论文的设计需求,结合目前代理服务器设计思想,本论文具有如下的功能需求:1.代理服务器要实现启动服务、接受用户代理请求、向目的服务器转发用户请求,从目的服务器上获取数据、以及向用户浏览器转发数据和关闭服务器的功能,同时对多个用户连接请求能够及时响应的功能,因此要采用编程语言的多线程技术。以及要具有良好的用户与服务器交互的界面,同时要提供管理员的管理界面。2.要去确保身份的安全连接,代理服务器要拥有对用户合法身份的认证,服务器被安全的连接。同时为了服务器的监控和管理,服务器要实现现在运行期间的日志进行记录,保存用户连接的重要信息,进行必要的信息管理。以及连接服务器所要的身份信息的记录,并且写入数据文件。3.无论用户还是管理员,在使用代理服务器时都要拥有对自己的有关信息进行修改。其中管理员用户既是信息的管理者又是信息的浏览者,其具有最高权限即具有对整个数据库信息的增加、删除、更改权限,而客户在此系统中只能作为使用者以及管理自己的基本信息。4.代理服务器还必须维护一个内存缓冲区,用来存放从Internet上收到的内容,当用户请求的内容在这个缓冲区中可以找到时,就直接将缓存区相应的内容返回给用户,而不用再次将用户去请求提交到Internet上去,这样不仅降低了网络的通信流量,节省了网络的通信费用,而且提高了代理服务器的响应速度。4.2.3可行性分析1.经济可行性:本系统仅需要一台装有Eclipse的环境即可实现系统的正常运行,最后仅需要一台能够连接因特网的计算机进行功能测试。2.技术可行性:由于此次论文设计采用的是实现中常用的Java编程语言的网络编程功能,Java语言对网络的支持体现了实现服务器的技术可行性。3.操作可行性:由于本次论文的设计调研的对象较多,校内的网络也采用的是代理服务器管理,通过现实中的代理服务器设计技术,对设计性能良好,效率高的服务器有着极大的需要,使得实现服务器的操作是可行的。
第5章代理服务器的设计与实现5.1总体设计代理服务器主要包括三大模块:(1)主守护进程模块:这部分的功能主要是负责代理服务器的初始化,监听提供HTTP代理服务的端口,启动一定数量的代理服务子进程并对进程池进行管理。(2)代理服务模块:这部分主要是负责处理客户端的请求,提供代理服务。(3)缓存管理模块:这部分主要是负责提供对缓存的快速查询、添加和删除等维护工作。根据管理人员的设置,对代理服务器的缓存区进行管理,包括缓存区的更新策略和更新方式等。系统的结构框架如图5-1所示:图5-1框架结构5.2详细设计5.2.1主守护进程模块普通的代理服务器是这样工作的:主进程在某个绑定的端口上监视,一旦有客户请求到达,就通过fork()系统调用创建一个子进程,而主进程则继续监听,由该子进程完成对客户请求的代理服务,服务完成后子进程自动终止。这种代理服务器有一个明显的缺点,由于fork()系统调用需花费较多的CPU时间,这样当客户比较多时,主进程就疲于创建子进程,代理服务器对客户的响应速度就会很慢。为了尽可能加快连接的响应速度,采用了预先派生子进程的方法。主守护进程启动,会先创建监听套接字,并对该套接字调用listen(),然后派生一组子进程,形成进程池。各个子进程会复制主进程的描述符字。子进程启动会对从主进程继承而来的套接字描述符调用accept(),没有客户请求时,所有子进程都进入睡眠,当一个客户请求来到时,所有子进程被内核同时唤醒,但只有最先被调度的子进程才能获得与客户的连接,而其他的子进程再次进入睡眠。由上面的讨论,可以了解主守护进程的实现过程如图5-2所示:图5-2主守护进程实现过程因为一个请求的到来唤醒了所有的子进程,而最后只有一个子进程被调用,这种现象叫做惊群现象(thunderingherd),虽然这样工作可行,但对系统系能的影响是显著的。由于同时醒来的进程过多,内核在进程调度上会花费更多的时间。解决的办法是在调用accept前后设置某种形式的锁,如信号量锁或文件锁,这样只有一个accept阻塞在套接字描述符上了。对进程池中进程的数量也需要管理,如果进程池中空闲进程太多,则浪费系统资源;空闲进程太少,就会因为客户连接的突发增加而使池中的子进程耗尽需要创建子进程,从而影响响应速度。主守护进程除了负责创建进程池,还负责对进程池的管理。它定时检查进程池中空闲进程数,当空闲进程数低于某一阈值时,则派生额外的子进程;当空闲进程数大于某一阈值时,则终止部分派生的子进程。5.2.2代理服务模块代理服务器提供的代理服务有:HTTP、SMTP、FTP、TELNET、POP3等代理服务。代理模块的实现在整个代理服务器的实现中占的比重最大,在实现的难度上也是最难的。虽然要提供的代理服务种类众多,针对RFC协议也各式各样,但是代理服务器包含的各各部分逻辑上都是相互独立,数据处理都依赖各自的具体协议。代理服务器在设计上采用了进程池的思想,每一个进程池在实现上均需要提供一个管理进程,管理进程负责管理进程池的开启[4]。管理系统管理进程池的基本实现过程如下:代理服务初始化;建立与监控进程的通信通道;启动池管理;进入循环体;读取来自监控进程的命令;读取进程池管理配置信息。在启动了进程池后,由进程池中的某一个进程承担具体的代理服务。进程池中承担代理服务的进程,一方面与进程管理器建立联系,同时与进程池中的其他进程保持进程间的同步,最后完成一般的代理服务功能。基本过程如下:1.建立与管理进程的通信通道;2.向管理进程报告进程的运行情况;3.读取管理进程的指令;4.建立套接字,接受客户端的连接;5.利用双态信号量实现互斥功能,保持进程间的同步。代理服务器对客户请求的解析处理,采用流程图的形式表示,如图5-3所示:图5-3客户请求解析流程图5.2.3缓存管理模块由于访问的网页都是动态的,也就是说每次用户访问一个界面,服务器要执行数据库查询,启动模板,执行业务逻辑以及最终生成一个你所看到的网页,这一切都是动态即使生成的的。从处理器资源的角度来看,这是比较昂贵的。为了尽可能地解决过载问题时,就要用到缓存了。缓存的目的是为了避免重复计算,特别是对一些比较耗时间、资源的计算。缓存系统需要一些少量的设定工作。也就是说你必须告诉它缓存的数据应该放在哪里,在数据库中、在文件系统、或者直接在内存中。代理服务器的缓存技术,可以把最近的一些请求和响应暂存在本地磁盘中,用一个文档存放计算机缓存经常访问的站点。当内部网络用户经过代理服务器访问Internet时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问资源[5]。这样,可以减少内部网络计算机访问Internet的时间和流量。如果在缓存目录中没有其所访问的主页,则代理服务器缓存文件将用户的请求转发给Internet,再将其所访问的主页传给访问用户。代理服务器缓存管理模块的工作流程图,如图5-4所示:图5-4缓存管理模块的工作流程图图中数字含义为:1.表示代理服务器将客户端的请求直接转发到远程服务器。2.表示代理服务器将远程服务器的响应直接转发给客户端。3.表示代理服务器按照客户端的请求,查找缓存。4.表示缓存中如果有客户端请求所需的数据,代理服务器将缓存中的相关数据转发给客户端。5.表示远程服务器返回的数据,经过代理服务器的判断,如果是可以缓存的,则存入缓存。5.3系统实现此代理服务器系统将是建立在Windows平台上的网络应用程序设计。由于需要服务器为其他许多称为客户的主机提供服务,而客户机又可以随时打开和关闭,在选择网络应用程序体系结构时就采用支持这种特点的客户机/服务器结构。还将运用Windows下网络编程的标准接口WinSock,因为它允许两个或多个应用程序在相同机器上,或者是通过网络相互交流,它是真正协议无关的接口。为了便于直接使用Windows提供的网络编程接口,利用MFC类库中提供的两个Socket类CAsyncSocket和Csocket[6]。使用这两个Socket类,我们可以运用面向对象的方法来进行Socket编程,而且它们还分别在较低和较高层次上封装了WindowsSocketAPI,为程序员Socket程序提供了便利。代理服务器的功能要实现,对于任何一个连接请求,服务器都能够对其进行响应,启动服务器后,其相应过程可以分三个步骤完成。第一步,创建线程用于监听用户连接,由于该代理服务器是基于面向连接的TCP协议,通过对JAVA提供的流Socket类实现。因此,用户再请求服务连接之前,必须建立与服务器之间的连接。第二步:接收用户请求,并向目的Web服务器转发用户请求。第三步:接收从服务器上获取的数据,并向用户浏览器转发,同一时间中,数据接收线程和数据发送线程同时工作,并且通过共享缓冲进行同步和协调工作。5.3.1主守护进程模块的实现主守护进程负责代理服务器的初始化、监听端口、启动一定数量的代理服务子进程并对进程池进行管理,实现流程如下:(1)首先将进程初始化为守护进程,守护进程的特点是在后台运行,没有与之相关联的终端;(2)建立Socket套接字,绑定IP地址和端口,并监听代理服务端口;(3)建立共享内存和文件锁,申请一块共享文件,大小为最大进程数,每个字节代表相应进程的状态,将共享内存中每个状态初始化为EMPTY;(4)启动进程池,启动一定数量的子进程,并在共享内存中对应位置存入IDLE状态;(5)定时检查进程池中空闲进程数,当空闲进程数低于某一阈值时,则派生额外的子进程;当空闲进程数大于某一阈值时,则终止派生的子进程。主守护进程与进程池的通讯可采用共享内存方式。在共享内存中存入一个数组,数组的每一项对应进程池中一个子进程,记录该子进程的状态。每个子进程有3个状态(EMPTY、IDL、BUSY)。EMPTY表示该位的子进程没有创建,IDL表示该为的子进程处于空闲,BUSY表示该位的子进程正在处理客户请求。进程池中的子进程向共享内存传递自己的状态信息(EMPTY、IDL、BUSY),主守护进程便可通过共享内存检测到各个进程的状态。对共享内存的操作要加锁(可采用文件锁)。另外,在处理客户请求过程中涉及到许多内存申请释放操作。为避免内存泄露问题,子进程每处理一定数量的连接,就自杀掉。5.3.2代理服务模块的实现在设计上采用了进程池的思想,所以在实现上也按照进程池的设计进行。每一个进程池在实现上均需要提供一个管理进程,管理进程负责管理进程池的启动和监视进程建立关系,从进程池中取出一个进程提供代理服务。代理服务模块负责处理客户端的请求,提供代理服务。每个代理服务子进程的流程如下:(1)初始化连接数为0;(2)进入循环体;(3)调用accept()接收连接,要对系统调用accept()加锁,解决惊群问题;(4)向共享内存对用位置传递BUSY状态;(5)读取客户请求,解析请求并进行相应处理;(6)将连接数递增,检查处理的连接数是否到达最大数。如果已经达到,则向共享内存对应位置传递EMPTY状态并推出程序;否则向共享内存对应位置传递IDLE状态,再进入步骤(3)。代理服务子进程在接收到客户的请求后,首先判断该请求是否可从缓存读取,判断的根据是如果请求的类型是GET,且请求头中不含用来表示不可缓存的Cache-Control:no-cache或pragma:no-cache字段,则可以从缓存读取;否则直接连接远端服务器,获取响应后直接转发给客户端。如果可以从缓存读取,则开始查询缓存文件。根据查询结果做不同的处理。查询结果分为两种情况。一种情况是查到该缓存文件且文件没有过期,此时判断客户的请求是否是条件请求,即客户端询问客户机器上保存的文件是否已经修改,如果是条件请求,则判断文件的有效性,如果有效,则返回给客户端304响应,告诉客户端客户机器上保护文件依旧有效;若无效则读取缓存文件返回给客户;如果客户请求不是条件请求,则可以直接读取缓存文件返回给客户端。另一种情况是没有查到该缓存文件或查到的缓存文件已经过期,此时也要判断是否是条件请求,如果是条件请求,则连接远程端服务器,转发该请求,获取响应后,判断该响应是否是已更新的网页,如果是,则判断该网页是否可以缓存(判断依据是,如果响应为200,且请求头中不包含用来表示不可缓存的Cache-Control:no-cache或pragma:no-cache字段,则可以缓存,否则不可以),可以缓存则更新缓存并将结果返回给客户端,不可以缓存则直接将结果返回给客户端;如果获得的响应是其他结果则直接转发给客户端。如果请求不是条件请求,则连接远程客户端,转发请求获取响应,再根据响应结果判断是否可以缓存,可以缓存则更新缓存并将结果返回给客户端;不可以缓存则直接将结果返回给客户端。5.3.3缓存管理模块的实现缓存管理模块负责对缓存的快速查询、添加和删除等维护操作。工作流程如下:(1)建立HASH数组和时间链表并初始化;(2)进入循环体;(3)阻塞式读取消息队列中的消息;(4)根据消息类型做相应处理,如果是查询消息,则查询HASH表,返回匹配的结点给相应的代理服务子进程;如果是更新消息,则建立新的结点,插入HASH表,同时也插入时间链表的头部;(5)计算缓存区已经使用的大小,如果超过一定的阈值,则通过时间链表中删除过期文件和最久未使用的文件及相应于时间链表上的结点结构,直至满足缓冲区大小的要求,回到步骤(3)。缓存是代理服务器用于保存远端服务器的网页,以便客户端能够直接从缓存读取,加快响应速度。如果缓存中的网页过期或不存在,则由代理服务器重新下载,在转发给客户端。采用缓存机制能够有效地降低Internet的信息流量,提高用户的访问速率。缓存中的网页是以文件的形式存储的,首先定义了一个数据结构记录每个文件的信息,该实现过程为:首先要声明换缓存的类名,声明缓存池,记录缓存的位置构造器,以及缓存方法。当传进要使用的实例名时,由该方法去判断缓存池中是否存在,遍历缓存池,若存在,则返回。如果缓存池满,则采取先进先出的原则。即当缓存的剩余空间小于一定阈值时,要替换掉一部分最近一直没有被访问的文件。
第6章系统测试6.1系统测试概述系统测试,是将通过集成测试的软件,作为整体基于计算机系统的一个元素、与计算机硬件、外设某些支持软件、数据、人员等其他系统元素结合在一起,对计算机系统进行全面的功能覆盖。简单的说,基于一个完全能运行的软件系统版本的测试可以称为系统测试。测试是为了发现错误而执行程序的过程。好的测试方案是能够发现迄今为止尚未发现的测试方案。成功的测试是为发现了至今尚未发现的错误的测试。总之,测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。从上述的目标可以归纳出测试的定义是为了发现错误而执行程序的过程。测试的原则:1.应尽早并不断地进行测试。2.测试工作应避免开发软件的人或小组来承担(单元测试除外)。3.在设计测试方案时不仅要确定输入数据,而且还要根据系统的功能确定输出结果。4.在设计测试用例时,不仅要包括合理、有效的输入条件,也要包含不合理、失效的输入条件。5.在测试程序时,不仅要检测程序是否做了该做的事,还要检测程序是否做了不应该的事。6.充分重视测试中的集群现象。7.严格按照测试计划来进行,避免测试的随意性。8.妥善保管测试计划、测试用例,作为软件文档组成部分,为维护提供方便。6.2代理服务器系统的测试HTTP客户可以发起两种方式的HTTP请求:一是不带HTTP选项的GET请求,代理服务器可以从缓存取网页返回;二是带“Pragmatic:nocache”的GET请求,代理服务器必须从源服务器取回网页再返回,而不是从本地缓存取回,但取回的网页根据响应的类型依然可以保留在代理服务器缓存中[7]。测试工具使用IE浏览器和腾讯QQ。测试解析过程如下:测试GET请求:在局域网内,任意一台机器的IE中设置HTTP代理为HTTP代理服务器所在的IP和端口,然后在IE浏览器地址栏中输入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【语文】《百年孤独》课件+2024-2025学年统编版高中语文选择性必修上册
- 【语文课件】天上的街市课件
- 《我不要赖皮》课件
- 空气凝结器产业规划专项研究报告
- 《HP安全及性能优化》课件
- 消毒用熏蒸棒产业规划专项研究报告
- 纸制人造花产业规划专项研究报告
- 浴缸产业深度调研及未来发展现状趋势
- 木材碾碎机市场洞察报告
- 人体模型市场洞察报告
- 企业资产管理培训
- 公文写作课件教学课件
- 第45届世界技能大赛焊接项目全国选拔赛技术工作文件
- 药品经营使用和质量监督管理办法2024年宣贯培训课件
- 《老年人生活照护》试卷B卷及答案
- 课程设计几种排序算法
- 学前教育法学习重点1
- 2024版合伙经营运输车辆合同范本
- 夏县县城污水处理提质增效-一厂一策-系统化整治方案
- 幼儿园中班健康《运动过后》课件
- 门卫室承包合同
评论
0/150
提交评论