




已阅读5页,还剩66页未读, 继续免费阅读
(计算机软件与理论专业论文)基于集群的高可用通信中冗余技术的研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华中科技大学硕士学位论文 摘要 集群系统是一个并行处理系统,具有性价比高和可扩展的特点。 集群已成为高性能计算和超级服务器的基本构建方法,它被运用在各 个领域。但还有许多具有挑战性问题有待解决。其中,针对一些关键 性事务处理需要向用户提供不间断服务,这就要求集群服务器具有容 错能力。 冗余副本是容错计算中的一种技术,其中的主动副本服务器是容 错能力最强的一种。组通信是主动副本服务器的基础,现有的组通信 是建立在用户层。这种组通信不但对用户不透明而且消息的延迟较 厂 大。凶此提出内嵌t c p 的组通信服务e t c p g c ( e m b e d d e d i nt c p g r o u pc o m m u n i c a t i o n ) ,它内嵌于t c p ,位于客户端和服务器的通信 路径上,对客户端和服务器端都是透明,同时由于它在底层通信协议 上实现,因此通信时延较小。在e t c p g c 基础上针对集群内部使用 服务的可靠性,提出了三层结构中的组通信技术,m s 是e t c p g c 7 在集群内部的优化,m c 是对e t c p g c 的发展。为了体现它的实用 性凡讨论使用这些组通信技术构造基于p ,s 的主动副本元数据服务 器。另外,针对副本中的资源利用率较低的问题,还提出面向高可靠 和高性能的多i p 链路的技术。该技术在提高集群内部通信可靠性的 同时也提高通信带宽。由于基于i p ,它独立于底层通信链路从而也突 破了现有p o r tt r u n k i n g 技术有端口限制的要求。 华中科技大学硕士学位论文 a b s t r a c t c l u s t e r s y s t e m i sa p a r a l l e lp r o c e s s i n gs y s t e m ,w h i c h h a sa g o o d p e r f o r m a n c e c o s tr a t i oa n ds c a l a b l i t y c l u s t e r b e c o m e sab a s i cm e t h o dt oc o n s t r u c t h i 曲p e r f o r m a n c ea n ds u p e rc o m p u t e ra n d i sw i i d l yu s e de a c hf i e l d s h o w e v e r , t h e r e a r em a n yc h a l l e n g e st ob es o l v e d s o m ec r i t i c a lb u s i n e s ss h o u l dp r o v i d ec u s t o m e r w i t hi n t e r m p t a b l es e r v i c e sa n dr e q u i r e s 也ec l u s t e rs e r v e rh a v i n gt h ea b i l i t yo f f a u l t t o l e r a n c e r e d u n d a n tr e p l i c a t i o ni so n eo fm e t h o d so ff a u l tt o l e r a n c ec o m p u t i n ga n dt h e a c t i v er e p l i c a t i o ns e r v e rh a ss t r o n g e s ta b i l i t yt ot o l e r a n tf a u l t g r o u pc o m m u n i c a t i o n i sab a s i sf o ra c t i v er e p l i c a t i o ns e r v e r h o w e v e r t h ec u r r e n tg r o u pc o m m u n i c a t i o ni s b a s e do nt h eu s e r - l e v e ls p a c e w h i c hn o to n l yi sn o tt r a n s p a r e n tt ot h eu s e rb u ta l s o h a sg r e a tm e s s a g el a t e n c y t ot h e s ee n d ,t h i st h e s i sp r o p o s e sa ne m b e d d e d i nt c p p r o t o c o lg r o u p c o m m u n i c a t i o n s e r v i c e :e t c p - o c ( e m b e d d e d - i nt c p - g r o u p c o m m u n i c a t i o n 、i ti se m b e d d e di 1 3 t c p p r o t o c o l a n di s d e p l o y e d a tt h e c o m m u n i c a t i o np a t hb e t w e e nc l i e n ts i d ea n ds e r v e rs i d e , t h u si ti st x a n s p a r e n tt ob o t h c l i e n ta n ds e r v e r a ts a m et i m e i ti si m p l e m e n t e da tl o w1 e v e lc o n - l n l u n i c a t i o n p r o t o c o l a n dt h ec o m m u n i c a t i o n l a t e n c y i ss m a l l e t i no r d e rt o i m p r o v e t h e a v a i l a b i l i t yo f s e r v i c e sp r o v i d e da tt h ei n t e m a lo fc l u s t e r 也eb a s e do ne t c p g c g r o u pc o m m u n i c a t i o n s u i tu n d e rt h et r i - f i r e sa r c h i t e c t u r ei sp r o p o s e d t h em si st h e o p t i m i z a t i o no fe t c p g c a t 也ei n t e m a lo fc l u s t e r ,a n dt h em ci st h ef t l r t h e r d e v e l o p m e n t o fe t c p g c t od e m o n s t r a t et h e p r a c t i c a l v a l u eo ft h e g r o u p c o m m u n i c a t i o np r o p o s e di nt h i st h e s i s ,t h i st h e s i sd i s c u s s e st h ec o n s t r u c t i o no f b a s e d o nt h ep v f sa c t i v er e p l i c a t e dm e t a d a t as e r v e ru s i n gt h e 7 0 u pc o m m u n i c a t i o ns u i t a ts a m et i m e i no r d e rt oa t t a c kt h ep r o b l e mo fl o w r e p l i c a t e dr e s o u r c eu s a g e r a t e ,t h i st h e s i sp r o p o s e st h eo r i e n t e dt oh i g h l yr e l i a b l ea n dh i g hp e r f o r m a n c em u l t i p l e i pl i n k i td o s en o to n l yi m p r o v ct h ea v a i l a b i l i t yo fc o m m u n i c a t i o ni n s i d et h ec l u s t e r b u ta l s oe n h a n c et h ec o m m u n i c a t i o nb a n d w i d t hi n s i d et h ec l u s t e r b yt h er e a s o no f b a s e d o ni pl i n k ,i ti si n d e p e n d e n to nt h el o w e rc o m m u n i c a t i o nl i n k ,t h u sb r e a k s t h r o t l g l lt h e1 i m i t a t i o no f p o r t i nm ec u r r e n t p o r tr e t a k i n g k e yw o r d s :f a u l t - t o l e r a n c e ,c l u s t e r ,r e l i a b l ec o m m u n i c a t i o n ,a c t i v er e p l i c a t i o n s e r v e r ,g r o u pc o m m u n i c a t i o n i i 华中科技大学硕士学位论文 = = ;= = = = = = = = = = = = = = = = = ;= = = = = = = = = 一: 1 引言 1 1 问题的提出 随着微电子技术和集成电路技术的发展,工作站和p c 机的处理能力 已经接近或超过了以前的小型机。同时工作站、p c 机和快速网络已经被 商品化。使用多个工作站建立的集群【1 1 系统不但具有良好的性价比而且也 具有扩展性【2 j 。由于以上二个吸引人的特点,集群系统已经广为用来建立 高性能的处理系统,它们不但用于科学计算【3 】而且也用于事务处理f 4 11 5 。 虽然集群有着上述的优点,但是它也有着本身固有的缺点:随着集群 中的节点的数目的增加,整个集群的失效的概率也就增加。在集群中,增 加发生故障的概率对于长期运行的应用程序( 比如:科学数字计算) 是十 分危险的。当出现故障时,系统必须有某种机制保证在错误发生时程序运 行的连续性。否则,集群将会由于它的低可用性而没有实用价值。因此提 高集群的可用性成为集群系统研究的一个问题。 集群不仅可以用于并行计算,也可用于事务处理。除了提高长期运行 的系统可用性,高可用的集群系统针对关键事务处理的应用应满足信息系 统日益增长高可用的需求。这些信息系统包括:在线交易系统,电子商务, 数据库,决策支持,电信交换机,在线分析处理( o l a p ) 和每曰2 4 小时 运行的服务器程序。这些服务器必须不间断地运行,对客户提供高可靠的 服务。服务的中断将会失去机会和信誉,并把客户推向自己的竞争对手。 这些服务的中断的代价是服务提供者的巨大损失【6 】【7 】【8 】。因此在日益信息 化的今天,高可用集群的研究是有重要理论意义和实用价值。 1 2 高可用集群的技术 1 2 1 独立冗余部件 目前,实现高可用有二个基本的方法,一个是防错,可以通过保守的 设计,形式证明,广泛的测试来防止错误的发生;另一个是容错,当故障 发生时,系统仍然可以运行并提供服务本文讨论容错技术和机制。实现 容错的基础是冗余,有空间的冗余( 如:硬件冗余) ,信息冗余( 如:数 据结构的冗余) ;时态冗余( 如:冗余计算) 。 容错可以通过硬件和软件来实现。通过来硬件实现容错可以有较好的 性能,但是成本高。通过软件来实现容错有较好的灵活性。下面介绍6 种 广为使用的软硬件容错技术: 1 ) 模块冗余 华中科技大学硕士学位论文 入,各个硬件模块产生的输入会经过选举器确定一个输出。通常,选举器 使用的是大多数一致的原则。 2 ) n 一版本编程 n 一版本编程能够容忍软件和硬件错误。它使用n 个软件模块。这些 模块的输出被一个选举器来确定正确的输出。 3 ) 控制编码 使用副本的方式来达到容错的目的,但是却需要付出代价。在有些场 合下,如有限的内存容量,使用副本就需要比较大的代价。因此可以使用 错误校正码,如海明码。 4 1 查点和回滚 在进入原予活动的入口点设置检查点 9 1 并把它保留在可靠的存储设 备上。回滚f 加j 是出错的程序从前一个检查点恢复程序的状态,从前一个检 查点开始重新执行。 5 ) 复块 恢复块是使用多个可替换使用的模块来执行同样的功能。在这些模块 中有一个模块是主模块,而其他的模块是次模块。主模块输出的结果需要 经过输出接受模块验证。如果通过验证,那么这个输出是可以接受的。如 果不被接受,那么会从一个次模块来执行。直达输出被数据接受模块接受。 恢复块的方法可以实现软件的容错,因为不同的模块可以用不同的算法实 现。 6 ) 基于软件的副本 基于软件的副本是运行在普通计算机上的软件来处理副本副本有主 一从副本( p r i m a r y b a c k u p ) 和主动( a c t i v e ) 副本2 种儿1 2 1 。主一从副本 是指在副本中只有一个副本接受客户的请求并处理并把应答返回给客户。 主动副本是所有的副本都执行客户发来的请求。主动副本服务器能够运行 的前提是各个副本服务器的状态是确定的,即:对于相同的输入有相同的 输出 1 2 2 故障接管 一个部件发生故障时,故障接管技术容许系统中的另部分能够继续 提供失效的部件提供的服务。一个故障接管机制应该具有故障诊断 1 3 1 1 1 4 1 1 1 5 1 ,故障通知和故障恢复1 1 6 1 【1 7 】【1 8 】能力。 2 华中科技大学硕士学位论文 故障诊断是指检测故障和定位故障部件。常用的方法有涌瓣蠹酊一 集群中的节点向其他的节点发出心跳消息。如果系统没有受到来自一个节 点的心跳消息,就可以知道该节点或者网络发生了故障。 一旦诊断出一个故障,系统会通知需要了解故障事件的各个部件。故 障通知是非常必要的,因为不仅是主节点需要了解故障信息。例如,当一 个节点发生了故障时,要通知域名服务器d n s 。d n s 了解故障信息后就 不再容许有用户访问该节点。资源管理器要对工作负载重新分配,并接管 该节点剩下的工作负载。另外还要向系统管理程报警,以便使它能启动相 应的动作来修复该节点。 1 2 3 故障恢复 故障恢复是指为了接管一个已发生了故障部件的工作负载所需要做 的工作。有二种故障恢复技术。一种是向后恢复,它周期地为运行在集群 中地进程在可靠的存储设备上保存它的一个一致状态( 即检查点) 。发生 故障后,系统重组并将故障部件隔离。当故障隔离后,恢复前一个检查点, 然后继续正常的操作,整个过程成为回卷【1 9 儿2 们。在独立于应用程序的可移 植方式下向后恢复较容易实现,并已被广泛使用。然而,回卷过程需要较 大的时间开销。 如果执行时间是一个很重要的参数,比如在实时系统中不能容忍回卷 恢复很长的执行时间,此时应使用向前恢复方案【2 1 1 。在这个方案中,系统 不能回卷到故障前的某个检查点,相反,系统会利用故障诊断信息来重构 一个有效的系统状态,继续运行下去。向前恢复是依赖于应用程序并且需 要额外的硬件设备支持。 1 3 高可用集群服务器的研究现状 按照可用性的程度,可以把现有的高可用集群分为:热备份多服务 器集群,主动可用集群,容错多服务器集群,它们的可用性是逐步递增的。 在热备份集群中,通常只有主节点在主动地做所有的工作。备份节点 已经启动,而且运行一些监视程序,这些监视程序发送心跳线信号以检查 主节点的状态,但是备份节点并不运行向客户提供服务的服务器程序。主 节点必须将任何数据镜像到一个共享磁盘上,这样备份节点就可以访问 它。备份节点需要所有数据的第二个完全备份。 在主动可用集群中,二个服务器节点间的系统结构是对称的。两个服 务器都是主节点,它们都在在做有用的工作。两者都支持故障接管和返回 ( 故障返回是指修复和维护后恢复节点返回正常操作的能力) 。当一个节 华中科技大学硕士学位论文 = = 亏= 亍= 言= 亍= = 宁号苎气= 暑鼍言亍亍号鼍苎号= 号号亍号= = ;号= = ;= = = = 一= = 点失效时,在其上运行的应用程序被集群中的可用的节点接管。微软和一 d i g i t a l 产品主要分别支持基于i n t e l 的n t 服务器或基于a l p h a 的服务器。 由于实现故障接管需要时间,用户可能会经历一些时延或丢失上一个检查 点未保存的数据。手工负载平衡可以最小化故障接管条件下所增加的负 担,或减轻主动集群中超过2 个节点时的过载情况。自动故障返回大大提 高了主一从集群的可靠性。n c r 的l i f e k e e p e r ,h p 的m c s e r v i c e s g u a r d ,a m d a h l 的e n v i s t as e r v e r 和s t r a t u s 的r a d i o 都是主动集群。这 些服务器集群都是有故障接管和故障返回的能力。特别是r a d i o ,它具有 完全的冗余:使用了二个计算服务器,双存储设备,和双网络来消除所有 的软件和硬件,网络的单一故障点。 容错多服务器集群的可用性是最高的。它具有完全冗余和主动接管能 力。为了提供容错能力,它对所有的单故障点进行了备份,而且还备了所 有的关键部件,比如:c p u ,操作系统,存储总线,网络接口,磁盘驱动器, 电源和s a n 。目前只有天腾和m a r a t h o n 等少数公司推出了容错多服务器 集群。m a r a t h o n 的m i a l2 是用市售的部件构建的容错集群,它的每个部 件都是处于活动状态,并且还有一个部件和它冗余。集群故障的接管时间 是在1 秒内,这样集群的可用性可以达到:9 9 9 9 9 i “,即:每年关机的 时间不会超过6 分钟。m i a l2 具有二个最新c p u 芯片的计算服务器。2 个数据服务器通过全双工,高速的连接和m i c ( m a r a t h o n 接口卡) 来连接2 个计算服务器。计算服务器同时将数据写到2 个数据服务器以实现实时数 据保护。使用专用的1 0 0b a s e tl i n k 连接带有镜像存储的数据服务器,如 果一个数据服务器失效,用户应用程序可以在另一个上继续运行。该功能 由硬件支持的数据完整性检查和3 2 m b ,s 的吞吐率来到达的。 1 4 高可靠的通信的研究现状 从上面的介绍可以知道副本技术是建立一个高可用服务器的基本方 法。由于基于软件的副本服务器的灵活性,它常被用来在集群上来构造高 可靠的服务器1 2 2 1 ,因为,大多数基于软件的副本服务器是不需要特定的硬 件支持。副本服务器可以分为二类:一类是主一从副本服务器【2 3 1 1 2 4 】【2 5 】【26 1 , 另一类是主动副本服务器【2 7 】【2 8 】【2 9 儿3 0 】【3 。为了使用副本服务器,特别是在 故障发生时如何让副本服务器接管目前正在进行的通信以及保证向用户 提供不问断的通信连接,需要有可靠的通信机制来支持【3 2 】【”】,因为用户和 服务器的通信是服务提供的基础。目前对于提供不问断的通信连接已经成 为一个研究热点。下面对不间断连接的研究现状进行介绍。 4 华中科技大学硕士学位论文 在集群内部高可靠的通信研究最受关注的就是s o c k e t 迁移。s o c k e t 迁移主要是为了支持进程的迁移。被迁移后的进程可以在新的不中断迁移 前的通信继续运行。为了实现服务器的负载平衡,m t c p t 3 4 1 提出了客户端 或服务器端发起的连接迁移。在一个连接会话的生命期间中的任意点,连 接的服务器端可以在多个协作的服务器之间迁移,这些服务器是对客户端 是透明的。为了支持连接的迁移,m t c p 对t c p 协议进行了扩充,增加了: t r i g g e r = ( c i d , a u t ht r i g ( sd e s t ,a u t hd e sc ) ) ,m i g r a t et r i g g e r逸项。 应用程序要使用连接迁移,必须使用新的a p i 。它还对连接上的状态进行 快照进行了讨论。这种方法需要对t c p 的实现进行修改,同时对应用程序 也要做相应的修改。显然这种方法要求通信双方都要修改。 s c 【35 】在w e b 集群服务器中实现了打开的s o c k e t 的迁移,然而它迁移的 目的是为了提高w e b 集群服务器的性能,而不是为了提高可靠性。在s c 中,w e b 服务器节点有s cc l i e n t ,包路由器,s cs e r v e r 构成。s cc l i e n t 和 s cs e r v e r 通过s c 消息实现一个s o c k e t 在新的节点上被克隆。从这以后,从 c l i e n t 的包被原来的节点上的包路由器转发到新的节点,并在新的节点处 理,从而实现负载平衡。这种方法对于客户端是透明。 f t t c p 3 6 1 是服务器在服务器t c p 协议栈的上下2 端使用了2 个w r a p e r 和一个l o g g e r 为了向客户端屏蔽服务器发生的故障。当服务器重新运行时, f t t c p 会从l o g g e r e p 将这个连接在服务器端进行恢复。一个称为北端的 w r a p e r 位于应用程序和t c p 协议栈之间,它截获来自应用程序的读写命令, 并把读写的序列号记录在l o g g e r q b 。另一位被称为南端的w a p e r 位于i p 和 t c p 协议栈之间,它记录t c p 连接双向的序列号。当服务器故障发生了故 障并且恢复的对候,f t - t c p 的南端的w r a p e r 会根据记录在l o g g e r 中的序列 号与客户端通信,同时北方的w r a p e r 也会根据l o g g e r 中的信息把应用程序 重发的数据丢弃,它们是在故障发生前已被发送了的数据,以防止客户端 重新接受;同时也从l o g g e r 读取故障发送前的数据。f t - t c p 的显著的特点 就是在服务器端修改t c p 协议栈透明地向客户端屏蔽故障的发生。但是, 它的恢复时间可能会持续较长。 h y d r a n e t - f t t 3 7 】在i n t e r n e t 环境下动态地管理副本服务器,以消除 服务器这个单一失效点。它在服务器端通过对t c p 协议栈的修改,在t c p 协议上实现一到多和多到一的消息传递。在各个副本服务器之间的通信以 保持消息的原子性和有序性。在h y d r a n e t - f t 中,除了副本服务器之外 还有包重定向器,这些重定向器位于客户端和副本服务器的通信路径上。 当t c p 包通过这些重定向器时,它会把属于访问高可靠的服务的包转发到 所有的副本服务器。当一个副本服务器失效时,错误检查模块会通知重定 华中科技大学硕士学位论文 向器,重定向器就不再会把包转发给这个出错的副本服务器。在这些副本 服务器中有一个主服务器,其他的是备份服务器。主服务器会把发送到客 户端包发送到客户端,而备份服务器发送到客户端的数据是在各个备份服 务器之间传递,直到主服务器,然后主服务器才将它发送给客户端。通过 对服务器的t c p 的修改,在各个副本器之间建立应答通道,以保证从各个 从副本服务器到主副本服务器的消息的传递的原子性和有序性。通过重定 向器对发给服务器的消息的截获来达到一到多的消息传递,本文的工作和 这一点相似,但是在对于从服务器到客户端的消息处理却是不同。本文认 为发送到客户端的数据的处理是一种串行的处理方式,这会增大消息的延 迟。 文献p8 】是在3 层结构中的解决在各个部件失效的情况下保证“只执行 一次”。在错误发生时,客户端必须要重新发送请求到多个服务器,这就 需要客户端知道这些服务器的i p 地址。这种方式,副本服务器的对于客 户端是不透明的。在本文中,多个副本服务器对于客户端是透明的,并且 当错误发生的时候,也不需要客户端程序重新发送请求。 文献 3 9 】1 4 0 】提出了对于客户端透明的容错模式,在w e b 服务器失效的 时候,它能够保证对正在处理的请求正确处理。这种容错是基于s t a n d b y 的备份模式,t c p 的出错的处理是利用代理把客户的请求多播到多个副本 服务器上,而副本服务器到客户端的应答是在各个副本服务器中传递,最 后由主副本服务器发给客户端。当一个请求到达时,它首先被非主副本服 务器收到,最后才被主服务器收到,在主副本服务器处理完后,它的应答 被发到其他的副本服务器,在收到其他副本服务器的应答后,主服务器才 会把这个对客户应答发送到客户端。如果在主服务器正在处理请求的时候 出错,那么,其他的副本服务器已经有了这个未完成的请求的副本,因此 剩下的副本服务器可以处理这个请求,不会对客户产生任何影响。如果错 误发生在主服务器正在把请求的应答给客户端的时候,那么剩余的副本服 务器有这个应答的副本,也会将这个应答发送给客户端。但是这样的容错 处理对于每个进出服务器的消息都要经过副本服务的备份会增大消息处 理的时延。 领导跟随副本1 4 l 】是把不确定的进程一致化的方法。它的基本思想是: 一个副本被选举为领导,它首先执行每个不确定的动作,然后领导把不确 定的结果通知跟随,跟随副本根据领导的通知来执行与领导相同的状态转 换。由于跟随副本和领导执行相同的状态转换,因此它们的状态是一致的。 如果领导失效了,那么一个跟随副本将会被选举为新的领导。 t f t 4 2 】是基于领导跟随副本思想的一个系统。t f t 是在系统调用级别 华中科技大学硕士学位论文 把不确定的选择转发给跟随者,跟随者会根据这些信息执行相同的状态转 换。然而这种方式的开销是比较大的。本文使用不同副本的确定化的方法, 该方法是在每个副本的本地确定化,这样消除了副本的不确定性不会产生 领导跟随的多个副本之间的交互。 文献1 4 3 】从网络上获取数据而不是依赖与领导转发的数据来减小领导 的工作负载。在这里,副本服务使用的通信是依赖于t c p 。然而,为了使 用这样的方式,跟随副本程序需要使用这个系统开发的库,而不是标准的 通信库。这样就需要改写并重新连接程序。 1 5 本文组织 本文余下的各章是如下安排的。 第二章t c p 介绍和网络在l i n u x 的实现 介绍了t c p 的连接建立和数据发送控制,以及它们在l i n u x 的相关数 据结构和相应的处理流程。同时还介绍了l i n u x 中i p 包的截获机制 n c t f i l t c r 。它们是以下各章的讨论和系统实现的基础。 第三章面向高可靠和高性能的多i p 链路 为了消除集群中网络这个单一的失效点,提出了对于用户透明的冗余 网络设备。为了充分利用冗余资源,在没有网络设备失效的时候,副本网 络设备都被用户程序透明的使用,这就是主动副本网络设备。同时,并对 这种模式下的网络性能进行了分析。 第四章内嵌t c p 的组通信 提出了对于使用t c p 通信两端都透明的内嵌于t c p 的组通信。这种 组通信可以把用户的数据分发到多个主动副本节点,并对副本节点送回给 客户的数据精简后转发给客户端。讨论了相关的设计和实现问题,最后给 了性能分析 第五章支持三层结构中主动副本服务器的组通信 为了有效的支持集群中的三层结构中的主动副本服务器,提出了m s 组通信,它是对第4 章的组通信的改进;同时还提出了m c 组通信,它是 对各个中间的主动副本服务器和后端服务器的组通信的支持。在组通信的 属性上m s 组通信和m c 组通信是对称的并对它们的实现进行了讨论。 最后,讨论了利用m c 组通信和m s 组通信来实现一个基于主动副本的 p v f s 元数据服务器,从而来说明这个2 这个组通信的实用性。 华中科技大学硕士学位论文 ;= = = = 2 通信机制的分析 2 1 t c p 通信机制的分析 2 1 1 t c p 包 每个t c p 段都包含源端和目的端的端口号,用于寻找发端和收端应用 进程。这两个值加上i p 首部中的源端i p 地址和目的端i p 地址唯一确定一个 t c p 连接。有时,一个i p 地址和一个端e l 号也称为一个插口( s o c k e t ) 。 插口对( s o c k e t p a i r s ) ( 包含客户i p 地址、客户端口号、服务器i p 地址 和服务器端口号的四元组) 可唯一确定互联网络中每个t c p 连接的双方。序 号用来标识从t c p 发端向t c p 收端发送的数据字节流,它表示在这个报文段 1 6 忙躲端口号1 6 斑目的鞠口号 3 2 t a 庠蛩 3 2 敞确认穿号 4 位霄纬 px 濉 1 6 证昏j u 夫小 长班 雠l 嗣t 6 缸) rcss ckt 1 6 证垃齄翔1 6 位龄2 j 持仆 i圭碱 i 黻瓣 一 l 图2 1t c p 包的首部 中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动, 则tc p 用序号对每个字节进行计数。序号是3 2b i t 的无符号数。序号到 达2 ”一l 后又从0 开始。当建立个新的连接时,syn 标志变1 。序号字 段包含由这个主机选择的该连接的初始序号isn ( i n i t i a ls e a u e n c e n u m b e r ) 。该主机要发送数据的第一个字节序号为这个isn 加1 ,因为sy n 标志消耗了一个序号。既然每个传输的字节都被计数,确认序号包含发 送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成 功收到数据字节序号加1 。只有ack 标志( 下面介绍) 为l 时确认序号字 段才有效。发送ack 无需任何代价,因为3 2b i t 的确认序号字段和ack 标志一样,总是tc p 首部的一部分。因此,一旦一个连接建立起来,这 t。l,。上 华中科技大学硕士学位论文 双工服务。这意味数据能在两个方向上独立地进行传输。因此,连接的每 一端必须保持每个方向上的传输数据序号。tcp 可以表述为一个没有选 择确认或否认的滑动窗口协议。tcp 缺少选择确认是因为tcp 首部中的 确认序号表示发方已成功收到字节,但还不包含确认序号所指的字节。当 前还无法对数据流中选定的部分进行确认。例如,如果1 1024 字节已 经成功收到,下一报文段中包含序号从2049 3o72 的字节,收端并 不能确认这个新的报文段。它所能做的就是发回一个确认序号为1 0 2 5 的 a c k 。它也无法对一个报文段进行否认。例如,如果收到包含1025 20 48 字节的报文段,但它的检验和错,tcp 接收端所能做的就是发回一 个确认序号为l025 的ack 。首部长度给出首部中3 2b i t 字的数目。需 要这个值是因为任选字段的长度是可变的。这个字段占4b i t ,因此tcp 最多有6o 字节的首部。然而,没有任选字段,正常的长度是20 字节。在 tcp 首部中有6 个标志比特。它们中的多个可同时被设置为1 。这些选项 表示如下。 1 ) urg 紧急指针( ur g e n tp o i n t e r ) 有效。 2 ) ack 确认序号有效。 3 ) psh 接收方应该尽快将这个报文段交给应用层。 4 ) rst 重建连接。 5 ) syn 同步序号用来发起一个连接。 6 ) fin 发端完成发送任务。 以上各个部分构成了t c p 包的首部,如图2 - - 1 所示。 tcp 的流量控制由连接的每一端通过声明的窗口大小来提供。窗口 大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接 收的字节窗口大小是一个1 6b i t 字段,因而窗口大小最大为65535 字 节。检验和覆盖了整个的t cp 报文段:t cp 首部和t cp 数据。这是 一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。tc p 检验和的计算和udp 检验和的计算相似,使用一个伪首部。只有当ur g 标志置1 时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段 中的值相加表示紧急数据最后一个字节的序号。tcp 的紧急方式是发送 端向另一端发送紧急数据的一种方式最常见的可选字段是最长报文大 小,又称为m s s ( m a x i m u ms e g m e n ts i z e ) 每个连接方通常都在通信的第 一个报文段( 为建立连接而设置syn 标志的那个段) 中指明这个选项。 它指明本端所能接收的最大长度的报文段。从图2 - l 中我们注意到tc p 报文段中的数据部分是可选的。 9 华中科技大学硕士学位论文 在一个连接建立和一个连接终止时,双万菱预蕊丽盯舜飘牙f i 虿f 香一 部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的 数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。 2 1 2 建立连接协议 为了建立一条t cp 连接,需要完成如下步骤: 1 ) 请求端( 通常称为客户) 发送一个sy n 段指明客户打算连接的服 务器的端口,以及初始序号( is n ) 。这个s y n 段为报文段l 。 2 ) 服务器发回包含服务器的初始序号的syn 报文段( 报文段2 ) 作 为应答。同时,将确认序号设置为客户的is n 加1 以对客户的sy n 报 文段进行确认。一个syn 将占用一个序号。 3 ) 客户必须将确认序号设置为服务器的isn 加1 以对服务器的sy n 报文段进行确认( 报文段3 ) 。 这三个报文段完成连接的建立。这个过程也称为三次握手( t h r e e w a y h a n d s h a k e ) 。发送第一个syn 的一端将执行主动打开( a c t i v e o p e n ) 。接 收这个syn 并发回下一个sy n 的另一端执行被动打开( p a s s i v eo p e n ) 。 当一端为建立连接而发送它的syn 时,它为连接选择一个初始序号。is n 随时间而变化,因此每个连接都将具有不同的isn 。 2 1 3 连接终止协议 建立一个连接需要三次握手,而终止一个连接要经过4 次握手。这由 t cp 的半关闭( ha l f - c lose ) 造成的。既然一个t c p 连接是全双工 ( 即数据在两个方向上能同时传递) ,因此每个方向必须单独地进行关闭。 这原则就是当一方完成它的数据发送任务后就能发送一个fin 来终止这 个方向连接。当一端收到一个fin ,它必须通知应用层另一端已经终止 了那个方向的数据传送。发送fin 通常是应用层进行关闭的结果。收到 一个fin 只意味着在这一方向上没有数据流动一个tcp 连接在收到 一个fin 后仍能发送数据。而这对利用半关闭的应用来说是可能的,尽 管在实际应用中只有很少的t cp 应用程序这样做首先进行关闭的一方 ( 即发送第一个f i n ) 将执行主动关闭,而另一方( 收到这个f i n ) 执 行被动关闭。当然,在实际中也存在着双方的t c p 应用程序都执行主动关 闭,这样双方各发送一个f i n 包,二个f i n 经过网络传送后分别到达另一 端。收到f i n 后,将会导致发送最后的a c k 。图2 - - 2 说明连接关闭过程, 报文段4 发起终止连接,由客户端关闭连接时发出。它将导致t c p 1 0 华中科技大学硕士学位论文 客户服务甜 鹿用程 片雩ep 妇 图2 2 连接的关闭 客户端发送一个fin ,用来关闭从客户到服务器的数据传送。当服务器 收到这个fin ,它发回一个ack ,确认序号为收到的序号加1 。和syn 一样,一个fin 将占用一个序号。同时tcp 服务器还向应用程序( 即丢 弃服务器) 传送一个文件结束符。接着这个服务器程序就关闭它的连接, 导致它的tcp 端发送一个fin ,客户必须发回一个确认,并将确认序号 设置为收到序号加l ( 报文段7 ) 。图2 2 显示了终止一个连接的典型握手 顺序。在这个图中,发送fin 将导致应用程序关闭它们的连接,这些fi n 的ack 是由tcp 软件自动产生的连接通常是由客户端发起的,这样 第一个syn 从客户传到服务器。每一端都能主动关闭这个连接( 即首先 发送fin ) 。 2 1 4 复位报文段 上文已介绍了tcp 首部中的rst 比特是用于“复位”的一般说来, 无论何时一个报文段发往基准的连接( r e f e r e n c e dc o n n e c t i o n ) 出现错 误,tcp 都会发出一个复位报文段( 这里提到的“基准的连接”是指由 目的ip 地址和目的端口号以及源ip 地址和源端口号指明的连接。这就是 为什么r f c7 9 3 称之为插口) 产生复位的一种常见情况是当连接请求到达 时,目的端口没有进程正在听。对于udp ,当一个数据报到达目的端口 时,该端口没在使用,它将产生一个icmp 端口不可达的信息而tcp 则使用复位。我们在上面看到终止一个连接的正常方式是一方发送fi n 。 有时这也称为有序释放( o r d e r l yr e l e a s e ) ,因为在所有排队数据都已 发送之后才发送fin ,正常情况下没有任何数据丢失。但也有可能发送 一个复位报文段而不是f in 来中途释放一个连接。有时称这为异常释放 华中科技大学硕士学位论文 ( a b o r t i v er e l e a s e ) 。异常终止一个连接对应用。程序采碗甬7 齐唧骶f 1 ) 丢弃任何待发数据并立即发送复位报文段; 2 ) rst 的接收方会区分另一端执行的是异常关闭还是正常关闭。 应用程序使用的api 必须提供产生异常关闭而不是正常关闭的手段。 2 1 5t c p 选项 tcp 首部可以包含选项部分。仅在最初的tc p 规范中定义的选项是 选项表结束、无操作和最大报文段长度。新的r fc ,主要是r f c1 3 2 3 , 定义了新的tcp 选项,这些选项的大多数只在最新的tcp 实现中才能见 到。图2 3 显示了当前tcp 选项的格式,这些选项的定义出自于r f c7 9 3 和r f c1 3 2 3 。 烈日 i 字节 无憬怍 最丈搬文段长度 窗讳扩大因子 时俺曩 1 竿节1 亭节i 字节 l 字节i j f 节4 字节 4 字节 图2 3t c p 选项 每个选项的开始是1 字节k ind 字段,说明选项的类型。kind 字 段为o 和1 的选项仅占1 个字节。其他的选项在k ind 字节后还有1en 字 节。它说明的长度是指总长度,包括k ind 字节和len 字节。设置无操 作选项的原因在于允许发方填充字段为4 字节的倍数。如果我们使用4 4 bsd 系统进行初始化tcp 连接,tcpdu 1 1 1 p 将在初始的syn 上显示 下面tcp 选项: mss 选项设置为512 ,后面是n0p ,接着是窗口扩大选项。第一个 n0p 用来将窗口扩大选项填充为4 字节的边界。同样, 10 字节的时间戳 选项放在两个nop 后,占l2 字节,同时使两个4 字节的时间戳满足4 字节 1 2 萼圈 目兰一 k 萄 华中科技大学硕士学位论文 边界。其他ki nd 值为4 、5 、6 和7 的四个选项称为选择ack 及回显选项。 2 1 6 滑动窗口 当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿 的相对运动增加或减少了窗口的大小。使用三个术语来描述窗口左右边沿 的运动:1 ) 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数 据被发送和确认时。2 ) 当窗口右边沿向右移动时将允许发送更多的数据, 称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据 并释放了tcp 的接收缓存时。3 ) 当右边沿向左移动时,称之为窗口收缩。 t c p 连接是一个全双工的,有输入流和输出流。t c p 首部包含有两个 序号,确认序号( a c k s e q ) ,发送序号( s e q ) 。其中确认序号主要是针对 输入流,而发送序号主要是针对输出流。 确认序号t 对于接收方,它表示所有序号小于或等于确认号减1 的数据字 节都已经被对方正确地收到。对于发送方,它表示等待接收的 下一序号。 发送序号t 它表示该数据包发送数据的首字节的序号。 t i | 鬻l m 种) 1 司邗裔t r 1 :。厂1 了i ,o n 23 i 5 6 :7 89 l 1 0n 敏送井l :确认 发送尚未确认 + 0 n d - 1 m 一 最早帕来确认 垃的序号 能够发j 羞 l a n c l m t t - 7 下一一个发锺l 擎母 t e n e l t m m l 7 最大笈送序廿 图2 4t c p 的发送窗口空间 薹辇丝垡堕 到倚口穆动
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 激光行业竞争分析与策略试题及答案
- 油层物理考试题及答案
- 系统规划与管理师考试线上课程评价试题及答案
- 药品市场动态与策略应对试题及答案
- 考试中应注意的时间管理试题及答案
- 报关实务考试试题及答案
- 河南音乐乐理试题及答案
- 药物储存与管理知识试题及答案
- 衛生管理機構評價題目
- 幼儿文学对口试题及答案
- 第6节 有机磷农药中毒病人的护理
- 小学生安全教育校本教材(中年级版)
- 中职语文 大国工匠——彭祥华
- 数字化语音存储与回放系统(毕业设计)
- 喜达屋明星服务
- 烟草企业安全生产标准化规范-第3部分-考核评价准则和方法
- 武汉市控制性详细规划编制技术规程610
- 电子显微分析试题集1
- ANCA相关性小血管炎
- 服装面料采购合同
- 斯伦贝谢定向钻井和旋转导向
评论
0/150
提交评论