(计算机应用技术专业论文)用于linux性能评估的测试工具的设计与实现.pdf_第1页
(计算机应用技术专业论文)用于linux性能评估的测试工具的设计与实现.pdf_第2页
(计算机应用技术专业论文)用于linux性能评估的测试工具的设计与实现.pdf_第3页
(计算机应用技术专业论文)用于linux性能评估的测试工具的设计与实现.pdf_第4页
(计算机应用技术专业论文)用于linux性能评估的测试工具的设计与实现.pdf_第5页
已阅读5页,还剩80页未读 继续免费阅读

(计算机应用技术专业论文)用于linux性能评估的测试工具的设计与实现.pdf.pdf 免费下载

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

文档简介

摘要 作为远程服务支持系统的一个子项目,我们开发的这套测试工具其作用是测 试l i n u x 操作系统作为通信服务器平台是否具有良好的性能,为我们开发通信服 务器选取l i n u x 还是f r e e b s d 作为服务器平台提供参考。f r e e b s d 因其良好的网 络性能、可扩展性、健壮性均比现在的l i n u x 出色,而作为通信服务器平台的首 选。然而考虑到维护的方便,远程服务支持系统的网站和用户数据库服务器却采 用了l i n u x 操作系统。f r e e b s d 作为通信服务器平台虽然对性能有着很好的保证, 但采用两种不同的操作系统对软件的开发和今后的维护都增加了难度。于是,我 们设计了这套测试工具,对l i n u x 的网络性能进行测试。 网络通信服务器通常面临一系列的问题:是否能支持足够多的用户数,是否 能把延迟限制在足够小,是否能在大负载情形保持稳定的运行等。为了解决这些 问题,人们必须能够产生足够多的负载来测试,不幸地单纯依靠硬件难以满足要 求,这就需要利用软件的方法模拟真实环境下的负载情形。 本文在基础理论中,首先介绍了网络协议和套接口编程的基础知识,并对几 种网络服务器内部架构进行了分析比较,同时对嗅探的原理进行了阐述。在此基 础上,我们设计了这套测试工具,它采用服务器一客户机模型模拟远程服务支持 系统中通信服务器与客户机的交互,同时用一个网络嗅探器记录用户数据包进入 服务器和离开服务器的时间,剩下的延迟分析由离线分析器完成。该套测试工具 的设计方式可以应用于类似的性能分析系统中。 关键词: 网络负载发生器延迟嗅探器 a b s t r a c t a sas u b s y s t e mo ft h er e m o t es e r v i c es y s t e m ( r s s ) ,t h es e to ft e s tt o o l si s d e s i g n e dt ot e s tw h e t h e rl i n u xo p e r a t i n gs y s t e mh a sg o o dp e r f o r m a n c ea sp l a t f o r mo f c o m m u n i c a t i o ns a l v e ro fr s s i tw o u l db eag o o dr e f e r e n c ef o ru st od e c i d ew h i c h o p e r a t i n gs y s t e mi st h eb e t t e rc h o i c ea sp l a t f o n no fc o m m u n i c a t i o ns e r v e r , l i n u xo r f r e e b s d f r e e b s di so f t e nt h ef i r s tc h o i c ef o rc o m m u n i c a t i o ns e r v e rb e c a u s ei t s n e t w o r kp e r f o r m a n c e 、s c a l a b i l i t ya n dr o b u s t n e s so u t p e r f o r mt h ec u r r e n tr e l e a s eo f l i n u x h o w e v e r ,c o n s i d e r i n gt h ec h a r a c t e ro f l i n u x t h a ti se a s i l yt om a i n t a i n ,o u rw e b s t a t i o n sa n du s e rd a t as e r v e rc h o o s et h el i n u xa so p e r a t i n g s y s t e m d e s p i t ef r e e b s d c a ng i v eu sp e r f o r m a n c eg u a r a n t e e ,b u ti t b d n gu sm o r ed i f f i c u l t i e si nd e v e l o p m e n t a n dm a i n t e n a n c e ,s ow e d e s i g nas e to f t e s tt o o l st oe x a m i n ei fl i n u xc a ns a t i s f yt h e r e q u i r e m e n t so f t h ec o m m u n i c a t i o ns e r v e r t h en e t w o r kc o m m u n i c a t i o ns e r v e rm u s tf a c eas e r i a lo f p r o b l e m :c o u l di ts u p p o f t e n o u g hn u m b e ro fu s e r s ,c o u l di th a v eal o wl a t e n c y , c o u l di tr e m a i ns t a b l eu n d e rh e a v yl o a d ,e t c i no r d e rt os o l v et h e s em a t t e r s ,p e o p l em u s tg e n e r a t e e n o u g hw o r k l o a dt o t e s ti t u n f o r t u n a t e l y ,i ti sh a r dt os a t i s f ro u rr e q u i r eo n l yd e p e n d i n go nh a r d w a r em e t h o d ,s o w eh a v et ou t i l i z es o f t w a r em e t h o dt og e n e r a t es y n t h e t i cw o r l d o e d i nt h et h e o r y , w ei n t r o d u c et h eb a s i sk n o w l e d g eo fn e t w o r k p r o t o c o la n ds o c k e t p r o g r a m m i n ga n dc o m p a r es e v e r a li n t e r i o rs t r u c t u r e so fn e t w o r ks e r v e r , t h e nw e e x p a t i a t et h ep r i n c i p l eo fs n i f f e r b a s e do nt h e s et h e o r i e s ,w ed e s i g nt h es e to ft e s t t o o l si nw h i c hs e r v e r - c l i e n tm o d es i m u l a t e sd a t ae x c h a n g eb e t w e e ns e r v e ra n dc l i e n t s i nt h er s s a tt h es a m e t i m e , s n i f f e rc a p t u r e st h ep a c k e t sa n d r e c o r d st h et i m et h a tt h e p a c k e t se n t e ra n d l e a v et h es e r v e r r e m a i n e dw o r ki sc o m p l e t e d b y t h e d e l a ya n a l y z e r 1 h e d e s i g no f t h i ss e to f t o o l sc a nb e u s e di ns i m i l a r s y s t e mf o rp e r f o r m a n c e t e s t k e y w o r d s : n e t w o r kw o r k l o a d g e n e r a t o rl a t e n c y s n i f f e r i i 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名:之妻堕釜 日期:弘口洚2 月汐日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:幽导师签名: 日期:2 矿汐 用于l i n u x 性能评估的测试工具的设计与实现 1 1 背景知识 第一章引言 随着电脑的普及和互联网技术的发展,越来越多的网络服务如:电子邮件、 万维网、新闻组等等应运而生,伴随而来的是网络的不堪重负及服务器性能的低 下。不像传统的分布式操作系统,互联网上的服务器必须面对大量的用户访问需 求、短时交互、长的网络延迟等问题。为提高服务器的性能,人们从各个方面研 究网络的特性,希望有助于提高网络服务的质量。为此,人们通常开发了一些模 拟现实网络环境的工具,已知的大多数这样的工具都是用来针对w e b 服务器:模 拟产生w e b 请求,分析w e b 服务器的流量等。如:w e b s t o n e 就是为研究w e b 服 务器性能而开发的工具,它能模拟真实网络环境下的w e b 请求。 远程服务支持系统的通信服务器不同于w e b 服务器,它们的负载表现出不同 的特性:例如w e b 服务器处理短时连接居多,且传送的文件大多数是只有几k b 大小的h t m l 文本文件和小图片文件;而远程服务支持系统中的t c p 连接建立好 后通常会存在一段较长的时间( 1 0 分钟以上) ,客户机同服务器之间不停地进行 数据传送操作。在用户数较少的情况下,数据在服务器中逗留的时间极短,对用 户影响不大;但考虑到互联网上通常会有大量的用户同时在线,这时由l i n u x 操作系统作为平台的通信服务器就会引入较长的延迟,该延迟是否还在用户容忍 的范围内,通信服务器在大负载下是否还能保持稳定的运行,就需要我们开发自 己的测试工具来进行测试。 1 2 课题来源及论文贡献 本文研究的用于l i n u x 性能评估的测试工具是电子科技大学计算机网络与 应用技术实验室( 四川省重点实验室) 承担的项目远程服务支持系统中的一 个子项目。本论文旨在通过提出一种该类工具的设计方案,向大家展示如何解 决类似的问题,如何设计类似的模拟测试工具。 1 3 论文组织结构 第一章分析了相关的网络测试工具研究现状,论述了设计专用的测试工具 的重要意义,提出了论文所要解决的问题。 用于l i n u x 性能评估的测试工具的设计与实现 第二章介绍设计测试工具所需的原理性知识。 第三章首先简单介绍了远程服务支持系统,然后对这套测试工具的总体结 构作了阐述,给出了为模拟通信过程采用的应用层通信协议,并提到了设计中会 遇到的问题。 第四章详细介绍了服务器端软件的设计。 第五章详细介绍了客户端软件的设计。 第六章详细介绍了网络延迟分析部分的设计,它包含一个嗅探器和一个离 线分析程序。 第七章总结 2 用于l i n u x 性能评估的测试工具的设计与实现 第二章基础理论及相关技术 2 1 网络基础知识 2 1 1 t c p i p 协议介绍 t c p i p 协议是i n t e r n e t 网的最基本的协议,它实际由许多协议组成,并 以协议栈的形式存在,其中的主要协议有:传输控制协议( t c p ) 、用户数据报协 议( u d p ) 、i n t e r n e t 协议( i p ) 、i n t e r n e t 差错与控制报文协议( i c m p ) 和地 址解析协议( a r p ) 等。 直接连接到i n t e r n e t 网上的主机必须具有唯一的地址,这一地址称为“i p 地址”。i p 地址由4 个数字组成,中间用旬点隔开,每个数字的取值范围一般 在0 2 5 5 之间,例如:1 9 2 1 6 8 1 1 。在i n t e r n e t 上,主机的i p 地址分为 五类,分别是a 、b 、c 、d 和e 五类。主机的唯一i p 地址一般从a 、b 或c 类 地址中产生;d 类地址用来表示一组目的地址,即多点广播地址;而e 类地址是 试验性的,当前不可用。另外,有一些特殊的i p 地址被保留用于特殊目的,例 如,1 2 7 0 0 1 就是用来特指本地主机的回环地址。 和主机的i p 地址相关的概念还有子网掩码,t c p i p 软件利用予网掩码来 判断数据传输的目标主机是否和源主机处于同一子网中。例如,某主机的i p 地 址为1 9 2 1 1 1 ,而子网掩码为2 5 5 2 5 5 2 5 5 0 ,如果目标主机的i p 地址为 1 9 2 1 1 4 ,则说明目标主机和源主机处于同一子网中,而如果目标主机的i p 地 址为1 9 2 1 2 1 ,则说明不在同一子网中。上述判断通过利用子网掩码计算两台 主机所在的子网地址而实现。主机i p 地址和子网掩码的二进制与运算的结果称 为“子网地址”,例如,主机i p 地址1 9 2 1 1 1 和子网掩码2 5 5 2 5 5 2 5 5 0 的二进制与运算的结果为1 9 2 1 1 0 ,即该主机所在子网的地址为1 9 2 1 1 0 , 对地址为1 9 2 1 1 4 的主机来说,可计算该主机所在子网地址为1 9 2 1 i 0 , 于是说明目标主机和源主机处于同一予网中,而i p 地址1 9 2 1 2 1 却不在同一 子网中。 子网掩码也同时定义了子网中主机的最大数目。如果子网掩码为 2 5 5 2 5 5 2 5 5 0 ,在上面的例子中,i p 地址从1 9 2 1 1 1 到1 9 2 1 1 2 5 4 的主 机均可出现在同一予网中( i p 地址1 9 2 1 1 0 和1 9 2 1 1 2 5 5 分别作为子网 地址和子网中的广播地址) ,因此,该子网中的主机数目最多为2 5 4 台。 因为数字式的i p 地址非常难于记忆,因而通常利用主机域名标识主机,例 用于l i n u x 性能评估的测试工具的设计与实现 如,b b s u e s t c e d u c n 是电子科技大学b b s 服务器的域名,其i p 地址为 2 0 2 1 1 2 1 4 1 7 4 。但在使用域名标识主机的同时,也需要能够将域名转换为i p 地址的机制,这种机制称为“域名解析”。在一般的实现t c p i p 的主机中,这 一域名解析可通过静态的h o s t s 文件指定,也可通过d n s ( 域名系统) 服务器 获得。在l i n u x 中,可以通过e t c h o s t s 文件指定静态的主机名称,而 e t c r e s o l v c o n f 文件指定d n s 服务器的i p 地址。 每当需要连接到其他计算机进行数据传输时,该计算机的i p 地址就用于数 据包的传递。数据被划分为小的i p 数据包发送,该数据包的前面是目的主机和 源主机的i p 地址,然后是数据本身,最后是数据的校验和以及其他有用的信息。 利用校验和信息,目的主机可以判断数据的传输是否正确。由于数据包经过的物 理传输介质不同,因此,针对不同的物理传输介质,i p 数据包还可能要进一步 划分为小的数据包或报文进行传输。这种情况下,目的主机还要将小的报文重新 装配成大的数据包,以便进行后续处理。 一般而言,逻辑上处于同一子网的两台主机处于同一局域网中,如果目的主 机和源主机处于同一子网,就可通过某种机制获得目的主机的网卡物理地址,从 而利用局域网的技术实现数据传输。从主机的i p 地址获得其网卡物理地址的机 制称为“地址解析”,在t c p i p 协议中,地址解析可由专门的协议( 地址解析 协议) 完成。如果目的主机和源主机不在同一子网中,这时的数据传输就要通过 其他计算机( 网关或路由器) 完成,如果目的主机和源主机跨越大的地理距离, 则可能要通过许多计算机的参与才能实现数据的传输。跨越不同子网的数据传输 通过网关或路由器实现。当t c p i p 软件发现数据传输的目的主机处于其他予网 时,它首先将数据发送到网关,然后再由网关选择适当的路径传输,直到数据到 达目的主机为止。l i n u x 系统维护一个路由表,每个目标i p 地址均对应一个路 由表项。利用该路由表项,l i n u x 可将每个跨网的i p 数据包发送到一个适当的 主机( 路由器) 。系统中的路由表实际是动态的,并随着网络使用情况和网络拓 扑结构的变化而变化。 协议 獬 圉圈囤圈 圈回 田 圈囤圈圈 图2 - it c p i p 协议层次结构 4 应用屡 信输屡 网际屡 网络 接口层 用于l i n u x 性能评估的测试工具的设计与实现 如上面所述,t c p i p 实际上是以协议栈的形式存在的,图2 1 是t c p i p 协议栈的层次结构。从图中可看出,t c p i p 映射为四层的结构化模型。这一模 型也称为i n t e r n e t 协议栈( i n t e r n e tp r o t o c o ls u i t ) ,可划分为网络接口层、 i n t e r n e t 层、传输层和应用层四层。 网络接口层( n e t w o r ki n t e r f a c el a y e r ) 负责和网络的直接通信。它必须 理解正在使用的网络结构,诸如令牌环和以太网等,并且还要提供允许i n t e r n e t 层与之通信的接口。i n t e r n e t 层负责和网络接口层之间的直接通信。 i n t e r n e t 层( i n t e r n e tl a y e r ) 主要完成利用i n t e r n e t 协议( i p ) 的路 由选择和数据包的传递。传输层上的所有协议均要使用i p 发送数据。i n t e r n e t 协议定义了如下一些规则:如何寻址和定向数据包;如何处理数据包的分段和重 新组装;如何提供安全性信息;以及如何识别正在使用的服务类型等。 但是,由于i p 不是基于连接的协议,因此它并不能保证在物理线路中传输 的数据不会丢失、损坏、重复或颠倒次序。这由网络模型中的高层,即传输层或 应用层负责处理。i n t e r n e t 层中还有一些其他的协议:i n t e r n e t 差错与控制协 议( i c m p ) ,i n t e r n e t 组管理协议( i g m p ) 以及地址解析协议( a r p ) 等。 传输层( t r a n s p o r tl a y e r ) 专门负责提供应用程序之间的通信。这种通信 可以是面向连接的,也可以是非连接的。这两种连接类型的主要差别在于是否跟 踪数据以及是否确保数据发送到目主机等。传输控制协议( t r a n s m i s s i o n c o n t r o lp r o t o c o l ,t c p ) 是面向连接的协议,能够提供可靠的数据传输;而用 户数据报协议( u s e rd a t a g r a mp r o t o c o l ,u d p ) 是非连接的协议,不能确保数 据的正确,按序传输。 i n t e r n e t 协议栈的应用层( h p p l i c a t i o nl a y e r ) 作为应用程序和网络协议 栈之间的接口而存在,其中存在大量的协议,包括简单网络管理协议( s i m p l e n e t w o r km a n a g e m e n tp r o t o c o l ,s n m p ) 、文件传输协议( f i l et r a n s f e rp r o t o c o l , f t p ) 、简单邮件传输协议( s i m p l em a i lt r a n s f e rp r o t o c o l ,s m t p ) 等。 图2 - 2 给出了t c p 数据包的在i n t e n e t 协议栈中的传输情况。t c p 利用 i p 数据包传输它自己的数据包,这时,i p 数据包中的数据是t c p 数据包本身。 u d p 也利用i p 数据包进行数据的传输,在这种情况下,接收方的i p 层必须能 够知道接收到的i p 数据包要发送给传输层中的哪个协议。为此,每个i p 数据 包头中包含了一个字节,专门用作协议标识符。接收方的i p 层利用这一标识符 决定将数据包发送给传输层的哪一个协议处理。和上面的情况类似,同一台主机 上利用同一协议进行通信的应用程序可能有许多,因此,也需要一种机制来标识 应由哪一个应用程序处理同一种数据包。为此,应用程序利用t c p i p 协议进行 通信时,不仅要指定目的i p 地址,还要指定应用程序的“端口”地址。端口可 用于l i n u x 性能评估的测试工具的设计与实现 唯一标识应用程序,标准的网络应用程序使用标准的端口地址,例如w e b 服务 器的标准端口为8 0 。在网络接口中,i p 地址和端口地址合称为“套接字”。 i p 协议层可利用许多不同的物理介质传输i p 数据包,图2 2 中,i p 数 据包进一步包装在以太网数据帧中传输。除以太网外,i p 数据包还可以在令牌 环网等其他物理介质上传输。以太网数据帧头中包含了数据帧的源和目的以太网 地址,以太网地址实际就是以太网卡的硬件地址或物理地址,一般由6 位整数 组成,如o o a o o c 一1 3 - c c 一3 4 。以太网卡的物理地址是唯一的,一些特殊的物理 地址保留用于广播等目的。因为以太网数据帧和i p 数据包一样,可以传输不同 的协议数据,因此,数据帧中也包含一个标识协议的整数。 以太网帧 球数据包 张目标 长度协议枝验和 口i p 数据 地址地址 据包 图2 - 2t c p 数据包的传输 在以太网中,数据的传输是通过网卡的物理地址或硬件地址实现的,而i p 地址实际只是一种概念性的逻辑地址,因此,在类似以太网这样的网络中,必须 采用地址解析协议( a r p ) 将i p 地址翻译为实际的硬件地址。a r p 负责为i p 所 请求的任意一个本地i p 地址找出其本地物理地址。a r p 使用本地广播来寻找主 机的物理地址,并在内存的高速缓冲区中维护最近所映射的物理地址。如果目的 i p 地址是本地地址,a r p 可以发送一个本地广播请求获取目的i p 主机的物理 地址,并将物理地址返回给i p 。如果i p 发现目的i p 地址处于远程子网中, 则数据包必须发送到路由器,这时,a r p 协议可替i p 找到路由器的物理地址。 图2 - 3 描述了l i n u x 的网络软件结构,和t c p i p 协议的结构类似,l i n u x 以分层的软件结构实现t c p i p 协议栈。 b s d 套接字由一般性的套接字管理软件i n e t 套接字层支持。i n e t 套接字 管理着基于i p 的t c p 或u d p 协议端。如前所述,t c p 是面向连接的协议,而 用于l i n u x 性能评估的测试工具的设计与实现 u d p 是无连接的协议。在传输u d p 数据包时,操作系统不需要关心数据包是否 安全的,按序的到达目的端。但对t c p 数据包来说,操作系统需要对数据包进 行编号,数据包的源端和目的端需要协调工作,以便保证数据包不会丢失或以错 误的顺序发送。i p 层包含的代码实现了i n t e r n e t 协议,i p 层需处理数据包的 报文头信息,并且必须将传入的数据包发送到t c p 或u d p 两者中正确的一层处 理。在i p 层之下是操作系统的网络设备层,其中包括以太网设备或p p p 设备 等。和操作系统系统中的其他设备不同,网络设备并不总是代表实际的物理设各, 例如,回环设备就是一个纯软件设备。a r p 协议提供地址解析功能,因此它处于 i p 层和网络设备层之间。 图2 - 3l i n u x 网络软件结构 2 1 28 s d 网络套接字接口 套接字既可看成是支持多种网络操作形式的接口,也可看成是一种进程间通 信的接口。在一条通信连接中,每个参与通信的进程有一个套接字描述相应的连 接端。我们可以将套接字看成是某种特殊类型的管道,但和管道不同的是,套接 字并不限制其中可以包含的数据数量。操作系统支持多种套接字种类,不同的套 7 用于l i n u x 性能评估的测试工具的设计与实现 接字种类称为“地址族”,这是因为每种套接字种类拥有自己的通信寻址方法。 l i n u x 操作系统所支持的套接字地址族见表2 - 1 。 表2 - 1l i n u x 支持的套接字地址族 套接字地址族描述 u n i xu n i x 域套接字 通过t c p i p 协议支持的i n t e r n e t i n e t 地址族 a x 2 5a m a t e rr a d i ox 2 5 i p xn o v e l ii p x a p p l e t a l k a p p l e t a l kd d p x 2 5x 2 5 和虚拟文件系统类似,l i n u x 操作系统将上述套接字地址族抽象为统一的 b s d 套接字接口,应用程序关心的只是b s d 套接字接口,而b s d 套接字由各地 址族专有的软件支持。一般而言,b s d 套接字可支持多种套接字类型,不同的套 按字类型提供的服务不同,操作系统所支持的b s d 套接字类型见表2 - 2 ,表2 - 1 中的套接字地址族并不一定全部支持这些套接字类型。 表2 - 2l i n u x 所支持的b s d 套接字类型 b s d 套接字类型描述 这种套按字提供了可靠的双向顺序数据 流,并可保证数据不会在传输过程中丢失、 流( s t r e a m ) 破坏或重复出现。流套接字通过i n e t 地 址族的t c p 协议实现。 这种套接字也提供双向的数据传输,但是 并不对数据的传输提供担保,也就是说, 数据报( d a t a g r a m )数据可能会以错误的顺序传递,甚至丢失 或破坏。这种类型的套接字通过i n e t 地 址族的u d p 协议实现。 和数据报套接字类似,但保证数据被正确 可靠发送的消息 传输到目的端。 顺序数据包和流套接字类似,但数据包大小是固定的。 用于l i n u x 性能评估的测试工具的设计与实现 用户进程在利用套接字进行通信时,通常采用客户一服务器模型。服务器提 供某种服务,而客户使用这种服务。w w w 服务器就是很好的例子,w w w 服务器提 供w e b 页,而客户端程序,即浏览器则读取w e b 页并显示w e b 页的内容。服 务器首先创建一个套接字,并将某个名称绑定到该套接字上,套接字的名称依赖 于套接字的底层地址族,但通常是服务器的本地地址。套接字的名称或地址通过 s o c k a d d r 数据结构指定。对于i n e t 套接字来说,服务器的地址由两部分组成, 一个是服务器的i p 地址,另一个是服务器的端口地址。已注册的标准端口可以 查看e t c s e r v i c e s 文件。将地址绑定到套接字之后,服务器就可以监听请求 链接该绑定地址的传入连接。连接请求由客户生成,它首先建立一个套接字,并 指定服务器的目的地址来请求建立连接。传入的连接请求通过不同的协议层最终 到达服务器的监听套接字。服务器接收到传入的请求后,如果能够接受该请求, 服务器就必须创建一个新的套接字来接受该请求并建立通信连接( 用于监听的套 接字不能用来建立通信连接) ,这时,服务器和客户就可以利用建立好的通信连 接传输数据。 b s d 套接字上的详细操作和具体的底层地址族有关,底层地址族的不同实际 意味着寻址方式、采用的协议等的不同,因此t c p i p 连接的建立过程和a x 2 5 连接的建立过程有很大的区别。前面提到,操作系统利用b s d 套接字层抽象了 不同的套接字接口。在内核的初始化阶段,建于内核的不同地址族分别以b s d 套 接字接口在内核中注册。然后,随着应用程序创建并使用b s d 套接字,内核负 责在b s d 套接字和底层的地址族之间建立联系。这种联系通过交叉链接数据结 构以及地址族专有的支持例程表建立。例如,每个地址族具有专有的套接字创建 例程,应用程序在建立新的套接字时,b s d 套接字接口可利用该例程建立新的 b s d 套接字。 在l i n u x 内核中,地址族和协议信息保存在p r o t o c o l s 向量中。每个地址族 由其名称( 例如“i n e t ”) 以及相应的初始化例程地址代表。在引导阶段初始化 套接字接口时,操作系统内核调用每个地址族的初始化例程,这时,每个地址族 注册自己的协议操作集。协议操作集实际是一个例程集合,其中每个例程执行一 个特定的操作。注册的协议操作集保存在p o p s 向量中,向量中包含指向 p r o t o o p s 数据结构的指针。p r o t oo p s 数据结构由地址族类型和一组套接字操 作例程指针组成,这些例程是特定的地址族所特有的。p o p s 向量的索引是地址 族的标识符,例如,i n e t 地址族的标识符为2 。 9 用于l i n u x 性能评估的测试工具的设计与实现 2 1 3 i n e t 套接字层 i n e t 套接字层是用于支持i n t e r n e t 地址族的套接字层。它和b s d 套接字 之间的接口通过i n t e r n e t 地址族套接字操作集实现,如前所述,这些操作集实 际是一组协议的操作例程。网络的初始化过程中,这一操作集在b s d 套接字层 中注册,并且和其他注嬲的地址族操作集起保存在p o p s 向量中。b s d 套接字 层通过调用p r o t oo p s 结构中的相应函数执行任务,例如,当应用程序给定 i n e t 地址族来创建b s d 套接字时,将利用i n e t 套接字创建函数来执行这一任 务。在每次的套接字操作函数调用中,b s d 套接字层向i n e t 套接字层传递 s o c k e t 数据结构来代表一个b s d 套接字,但在i n e t 套接字层中,它利用自己 的s o c k 数据结构来代表该套按字。 在b s d 的s o c k e t 数据结构中存在一个d a t a 指针,该指针将b s ds o c k e t 数据结构和s o c k 数据结构链接了起来。通过这种链接关系,随后的i n e t 套接 字调用就可以方便地检索到s o c k 数据结构。实际上,s o c k 数据结构可适用于 不同的地址族,在建立套接字时,s o c k 数据结构的协议操作集指针指向所请求 的协议操作集。如果请求t c p 协议,则s o c k 数据结构的协议操作集指针将指 向t c p 的协议操作集。 2 1 4 建立b s d 套接字 在利用l i n u x 系统调用建立新的套接字时,需要传递套接字的地址族标识 符、套接字类型以及协议。内核首先利用套接字的地址族标识符搜索p o p s 向量。 如果能够建立该b s d 套接字,内核将为该套接字分配新的s o c k e t 数据结构。 s o c k e t 数据结构实际是v f s 索引节点数据结构的一部分,分配新的s o c k e t 数 据结构实际就是分配新的v f s 索引节点。因为可以和操作普通的文件一样操作 套接字,而所有的文件均由一个v f s 索引节点代表,因此,为了在套接字上支 持文件操作,也必须以v f s 索引节点来代表b s d 套接字。 新创建的b s ds o c k e t 数据结构包含有指向地址族专有的套接字例程的指 针,这一指针实际就是p r o t o _ o p s 数据结构的地址,p r o t o _ o p s 数据结构可从 p o p s 向量中检索到。b s d 套接字的套接字类型设置为所请求的s o c ks t r e a m 或 s o c k 等。然后,内核利用数据结构中的信息调用地址族专有_ d g r a mp r o t o _ o p s 的创建例程。 之后,内核从当前进程的f d 向量中分配空闲的文件描述符,该描述符指向 的f i l e 数据结构被初始化。初始化过程包括将文件操作集指针指向由b s d 套 1 0 用于l i n u x 性能评估的测试工具的设计与实现 接字接口支持的b s d 文件操作集。所有随后的套接字( 文件) 操作都将定向到 该套接字接口,而套接字接口则会进一步调用地址族的操作例程,从而将操作传 递到底层地址族。 2 1 5 在i n e tb s d 套接宇上绑定地址 为了监听传入的i n t e r n e t 连接请求,每个服务器都需要建立一个i n e t b s d 套接字,并且将自己的地址绑定到该套接字。绑定操作主要在i n e t 套接字 层中进行,还需要底层t c p 层和i p 层的某些支持。将地址绑定到某个套接字 上之后,该套接字就不能用来进行任何其他的通信,因此,该s o c k e t 数据结构 的状态必须为t c p _ c l o s e 。传递到绑定操作的s o c k a d d r 数据结构中包含要绑定 的i p 地址,以及一个可选的端口地址。通常而言,要绑定的地址应该是赋予某 个网络设备的i p 地址,而该网络设备应该支持i n e t 地址族,并且该设备是可 用的。利用i f c o n f i g 命令可查看当前活动的网络接口。端口地址是可选的,如 果没有指定,底层的支持网络会选择一个空闲的端口。因为小于1 0 2 4 的端口号 作为标准端口号已经分配给了标准应用程序,因此,底层网络只会分配大于1 0 2 4 的端口号,而且,没有超级用户的权限,进程不能使用小于1 0 2 4 的端口号。 当底层网络设备接受到数据包时,它必须将数据包传递到正确的i n e t 和 b s d 套接字以便进行处理,因此,u d p 和t c p 各自维护一个或多个哈希表,用 来查找传入i p 消息的地址,并将它们定向到正确的s o c k e t s o c k 对。因为t c p 是面向连接的协议,因此在处理t c p 数据包时涉及到的内容比起处理u d p 数据 包时更多一些。 2 1 。6 在i n e tb s d 套接宇上建立连接 创建一个套接字之后,该套接字不仅可以用于监听入站的连接请求,也可以 用于建立出站的连接请求。对类似u d p 的非连接协议,该套按字操作涉及的内 容不多,但对面向连接的协议,如t c p 来说,该操作涉及到一个重要的过程: 建立两个应用程序之间的虚拟电路。 出站连接只能建立在处于正确状态的i n e tb s d 套接字上,因此,不能建立 于已建立连接的套接字,也不能建立于用于监听入站连接的套接字。也就是说, 该b s ds o c k e t 数据结构的状态必须为u n c o n n e c t e d 。u d p 协议并不在应用程序 之间建立虚拟电路,它所发送的信息均是数据报,有可能不能正确到达目标应用 程序,但是,它也支持b s d 套接字的c o n n e t 操作。在u d pi n e tb s d 套接字 用于l i n u x 性能评估的测试工具的设计与实现 上的连接操作只是简单地设置远程应用程序的地址,即i p 地址和u d p 端口号。 另外,它还建立一个路由表项的缓存,这样,在该b s d 套接字上发送的u d p 数 据包不需要再次检查路由数据库( 除非该路由非法) 。如果没有给定寻址信息的 话,缓存的路由和i p 寻址信息将自动用于消息的发送。此后,u d p 将s o c k 的 状态设置为t c pe s t a b l i s h e d 。 对于t c pb s d 套接字上的连接操作,t c p 必须建立一个t c p 消息,该消息 包含连接信息并发送到给定的目标i p 。t c p 消息中包含了有关连接的消息、一 个唯一的消息起始顺序号,以及传输和接收窗口的大小等信息。在t c p 中,所 有的消息均是编号的,初始的顺序号用作第一个消息编号,l i n u x 选择合理的随 机数以避免受到恶意的协议攻击。由t c p 连接的某一端发送的每条消息,如果 由另一端成功接收到,则接收端发送确认消息,那些未经确认的消息则需要重新 发送。传输和接收窗口的尺寸,是指在未获得确认的情况下可发送出站的消息数 量。最大的消息尺寸根据发出连接请求一端的网络设备决定,如果接收端的网络 设备所支持的最大消息尺寸较小,则该连接将使用较小的最大消息尺寸。这时, 建立出站连接请求的应用程序必须等待目标应用程序的接受或拒绝响应。当出站 连接请求发送出去之后,t c p 将启动个定时器,如果在该定时器到期之前目标 应用程序没有响应,则该连接请求最终会因超时而失败。 2 1 7 监听i n e tb s d 套接字 当某个套接字被绑定了地址之后,该套接字就可以用来监听专属于该绑定地 址的传入连接。网络应用程序也可以在未绑定地址之前监听套接字,这时,i n e t 套接字层将利用空闲的端口编号并自动绑定到该套接字。套接字的监听函数将 s o c k e t 的状态改变为t c p _ l i s t e n 。 2 1 8 接受连接请求 u d p 不支持连接的概念,接受i n e t 套接字的连接请求只应用于t c p 协议。 接受操作在监听套接字上进行,最终从原始的监听s o c k e t 中克隆一个新的 s o c k e t 数据结构。其过程如下所述。接受操作首先传递到支持协议层,即i n e t 中,以便接受任何传入的连接请求。如果底层的协议,例如u d p 不支持连接, 则i n e t 协议层上的接受操作将失败。相反,接受操作进一步传递到实际的协议, 例如t c p 上。接受操作可以是阻塞的,也可以是非阻塞的。接受操作为非阻塞 的情况下,如果没有可接受的传入连接,则接受操作将失败,而新建立的s o c k e t 数据结构被抛弃。接受操作为阻塞的情况下,执行阻塞操作的网络应用程序将添 用于l i n u x 性能评估的测试工具的设计与实现 加到等待队列中,并保持挂起直到接收到一个t c p 连接请求为止。此后,应用 程序就可以利用该文件描述符在新建立的i n e tb s d 套接字上进行套接字操作 2 2s o c k e t 编程 s o c k e t 编程界面由b s du n i x 首先提出,目的是解决网络中进程间通信问题。 2 2 1 s o c k e t 原理 s o c k e t 实质上是提供了进程通信的端点。进程通信之前,双方首先必须各 自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双 方必须拥有各自的电话机一样。 在网问网内部,每一个s o c k e t 用一个半相关描述:f 协议,本地地址,本地 端口) 一个完整的s o c k e t 连接则用一个相关描述: 协议,本地地址,本地端口, 远地地址,远地端口 每一个s o c k e t 有一个本地唯一的s o c k e t 号,由操作系统分配。 最重要的是,s o c k e t 是面向客户一服务器模型而设计出来的,针对客户和服 务器程序提供不同的s o c k e t 系统调用。客户随机申请一个s o c k e t ( 相当于一个 想打电话的人可以在任何一台入网电话上拨号呼叫) ,系统为之分配一个s o c k e t 号;服务器拥有全局公认的s o c k e t ( 在l i n u x 中,e t c s e r v i c e s 用于存储全局 公认的s o c k e t 号) ,任何客户都可以向它发出连接请求和信息请求。 2 2 2s o c k e t 系统调用 不管s o c k e t 的内部机制如何,它提供给应用程序员的最终界面是一组系统 调用。s o c k e t 系统调用与u n i x 的文件访问有许多相似之处,事实上二者确实有 某种联系。文件访问与s o c k e t 操作的相似之处在于对于应用程序来说不外乎都 是一些输入输出;不同的是,文件访问是本地输入输出,文件号对应于一个具 体的块文件或字符文件;而s o c k e t 除了对应于某个网络设备外,还跟一个信宿 地址( 对方s o c k e t 半相关) 联系在一起。在这个意义上,s o c k e t 是对u n i x 输 入输出的扩充。 下面我们一一给出重要的s o c k e t 系统调用。 创建s o c k e t s o c k e t ( ) 用于l i n u x 性能评估的测试工具的设计与实现 应用程序在使用s o c k e t 之前,首先必须拥有一个s o c k e t 。系统调用s o c k e t ( ) 向应用程序提供创建s o c k e t 的手段,s o c k e t ( ) 的调用格式为: s o c k i d = s o c k e t ( a f ,t y p e ,p r o t o c 0 1 ) 返回值

温馨提示

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

评论

0/150

提交评论