使命必达: 深入剖析WCF的可靠会话[概念篇]

在《实例篇》中,我通过可靠会话成功地进行了美女图片的传输,相信大家在保了眼福之余,会对WCF的可靠会话的功用具有一个深刻的认识。实际上,这涉及到WS中一个重要的概念——可靠消息传输(RM:Reliable
Messaging)。如果想对可靠会话有一个深入的认识,对可靠消息传输的了解是必须的。

一、可靠消息传输(Reliable Messaging)

我们可以将一个通过WCF构建的分布式应用划分为两个部分,即客户端应用和服务端应用,它们之间的交互方式即采用某种MEP的消息交换。在这里,我们需要通过可靠消息传输机制确保从客户端应用(或者服务端应用)发送的消息能够成功地被服务端应用(或者客户端应用)接收。也就是说,可靠消息传输提供的是一种端到端的消息传输确保机制,而不管两个终端之间是否具有相应的中间结点(Intermediary),比如路由器、防火墙和代理之类。除了确保对消息的可靠交付,可靠消息传输还需要解决以下两个问题:

  • 重复消息(Duplicate Message):对于某一个客户端发出的消息,服务端接收到两个以上相同的副本。可靠消息传输机制需要具有对重复消息的识别能力;
  • 无序交付(Disordered Delivery):服务端接收到的消息序列与消息发送序列不一致。在某些情况下,我们要求WCF服务端框架严格按照消息在客户端应用中被发送的顺序交付给服务端应用,这需要消息传输机制提供有序消息交付(Ordered Message Delivery)的功能。

说道这里,可能有的读者对可靠消息传输机制有一种是曾相识之感,是不是觉得这个TCP协议对于TCP报文段(TCP Segment)的可靠交付机制有点类似。

二、TCP对报文段(Segment)的可靠交付机制

稍微有点网络知识的读者应该都知道,IP协议是TCP/IP协议簇中最为核心的协议。对于协议分层(链路层、网络层、传输层和应用层)体系中,属于网络层协议。所有的TCP、UPD、ICMP以及IGMP协议均是建立在IP协议之上。

IP协议传输的数据单位是数据报(Datagram),数据报的首部(一般20个字节)包含有源和目标的IP地址以及其他的相应的寻址和控制信息。IP协议具有以下两个显著的特点:

  • 不可靠(Unreliable): IP协议只能尽可能提供最好的传输服务,但不能保证数据报能够成功地抵达目的地。如果发生某种错误,它有一个简单的错误处理算法:丢弃数据报,然后发送通知信息给发送端;
  • 无连接(Connectionless):IP协议并不维护任何关于后续数据报的状态信息,每一个数据报都是被独立处理的。

而作为传输层的TCP协议,众所周知,这是一个可靠的、基于连接的协议。TCP协议传输的数据单位被称为报文段(Segment),可靠的TCP协议能够确保发出的报文段能够成功地抵达目的地。那么,建立在不可靠的IP协议上的TCP协议是如何实现报文段的可靠交付的呢?大体上说,下面两种机制取保了TCP协议对“使命必达”的承诺:

  • 消息确认(Message Acknowledgement):当接收端TCP成功接收到TCP报文段之后,会在一个短暂的时间间隔内(并不是在成功接收到报文的那一刻),向发送端发送一个表明该报文段已经被成功接收确认消息(Acknowledgement);
  • 超时重传:发送端具有一个存储报文段的缓冲区(Buffer),我们一般称为发送端窗口(Sender

    Window),用于存放已经发送但是尚未接受到确认的报文段。如果接收到确认,会将相应的报文段从发送端窗口中移除。如果在一定的超时时限内没有接收到确认消息,会认为相应的报文段发送失败,此时发送端TCP会从发送端窗口中提取相应的报文段进行重新发送。

对于上述的消息确认和超时重传的机制,细心的读者会发现这会出现两个问题:如果接收端TCP成功接收到某个报文段,并且成功发送了确认。但是,如果确认消息丢失,发送端TCP会对相应的报文段进行重传,就意味着接收端有可能接收到两份重复的报文段。很显然,接收端TCP不能将重复的报文段向上层交付,那么如何解决重复报文段的问题呢?

第二个问题,报文段在发送端TCP发送的节奏和在接收端TCP被接收的节奏是不同的,所以不可能保证报文段完全以发送的顺序被接收。但是,接收端TCP必须保证交付给上层的报文段的顺序必须是报文段被发送的顺序,这又是如何做到的呢?

要解决上述的两个问题,首先需要解决的是对报文段的识别机制。对于TCP协议来说,每一个报文段具有一个序号,一般代表报文段承载的数据在整个发送的数据块所处的位置(以字节为单位),通过这个序列号就可以确定报文段发送的顺序。此外,除了发送端TCP具有一个发送端窗口外,接收端TCP同样具有自己的接收端窗口,用于存放已经接收当时尚未交付的报文段如果说具有大序列号的报文段被先接收到,会先被置于接收端窗口中,只有等到前面的所有的报文段都抵达之后,接收端TCP才会按照序列号的顺序依次对报文段实施交付如果接收到的报文段的序列化小于或者等于接收端窗口的任一个报文段的序列化,接收端TCP会将其作为重复报文段而丢弃

从上面的介绍我们可以看出,TCP协议已经解决了我们之前提出关于可靠消息传输的三个难题:消息的可靠交付重复消息处理有序交付。实际上,WCF基于可靠会话机制的可靠消息传输的实现原理和TCP协议基本一致,如果硬是要找出不一致的地方,主要表现在以下四点:

  • WCF可靠消息传输是基于SOAP消息级别的,TCP则是基于报文段级别;
  • WCF可靠消息传输是与传输协议无关的,并不限于TCP协议;
  • WCF的可靠消息传输并没有具体传输会话(Transport Session)的限制,可以跨越多个传输连接或者会话;
  • TCP在当前TCP连接范围内提供端到端的可靠传输,而WCF的可靠消息传输在两个SOAP终结点之间提供可靠传输,并不受传输连接(Transport Connection)的限制

由于可靠消息传输对于SOA的重要性,在WS-*体系中具有专门的规范,即我们即将介绍的WS-Reliable Messaging,简称WS-RM。在《协议篇》中我将对WS-RM进行详细的介绍。

作者:蒋金楠
微信公众账号:大内老A
微博:www.weibo.com/artech
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文链接

时间: 2024-09-17 04:18:34

使命必达: 深入剖析WCF的可靠会话[概念篇]的相关文章

使命必达: 深入剖析WCF的可靠会话[实例篇](内含美女图片,定力差者慎入)

通过前面一系列的博文(<WCF 并发(Concurrency)的本质>.<并发中的同步>.<实践重于理论>.<并发与实例上下文模式>.<回调与并发>.<ConcurrencyMode.Multiple 模式下的WCF服务就一定是并发执行的吗[上篇]>.<ConcurrencyMode.Multiple 模式下的WCF服务就一定是并发执行的吗[下篇]>.<控制并发访问的三道屏障[上篇]>和<控制并发访问的三

使命必达: 深入剖析WCF的可靠会话[编程篇](下)

整个可靠会话的机制是完全在信道层实现的,而整个信道层的最终缔造者就是绑定,所以可靠会话编程是围绕着绑定进行的.<上篇>对实现可靠会话的绑定元素已经如何使用系统绑定实现可靠会话进行了介绍,下篇将和你探讨WCF可靠会话编程模型余下两个主题:自定义绑定和对消息传递的强制约束. 一.为自定义绑定的可靠会话进行设置 绑定是一系列绑定元素的有序组合,但是系统绑定为我们提供适应了某种典型通信环境的绑定元素组合方式,可以看成是"套餐".但是,如果套餐不符合您的胃口,你应该查看菜单点你喜欢的

使命必达: 深入剖析WCF的可靠会话[协议篇](上)

在<实例篇>中,我通过可靠会话实现了对图片的可靠.有序的传输:在<概念篇>中,我们对可靠消息涉及到的可靠消息传输(RM)的相关概念进行了讲述.在WS-*大家庭中,WS-RM为可靠消息传输提供了一个一个规范,使互操作成为可能.在<协议篇>中,我们侧重对WS-RM的介绍. WS-RM,为WS-Reliable Messaging的简称,是WS-*大家庭的一个重要成员.和前面介绍的WS-Coordination和WS-AT一样,WS-RM的制定者是结构化信息标准促进组织(OA

使命必达: 深入剖析WCF的可靠会话[协议篇](下)

在<上篇>中,我们认识了从序列创建到终止过程中消息交换的大致流程.接下来,我们进一步将关注点聚焦到单个小消息上,看看在整个基于序列的上下文中,不同类型的消息具有怎样的结构.首先从序列的创建开始. 一.CreateSequence 和CreateSequenceReponse 基于WS-RM的可靠消息传输从序列的创建开始.为了创建序列,RM源(RM Source)向RM目的地(RM Destination)发送一个主体包含CreateSequence元素的SOAP消息.CreateSequenc

使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](上)

本系列先后通过<实例篇>.<概念篇>.<协议篇>和<编程篇>对WCF的可靠会话进行了详细探讨.作为本系列的最后一片,我们将深入到WCF的可靠会话体系的最底层,对实现可靠会话的实现原理进行深入剖析.如果读者仔细阅读本系列博文,相信会使读者对可靠会话的理解提升到一定的高度. 从<编程篇>中,我们不难看出可靠会话的编程仅仅围绕着一个对象,那就是绑定.绑定在整个WCF架构模型具有重要的地位.WCF整个架构模型由两部分构成,即服务模型(Service Mo

使命必达: 深入剖析WCF的可靠会话[共8篇]

作为一个通信基础平台,WCF必须保证通信的可靠性.由于消息交换是WCF采用的通信手段,通信可靠性的保障体现在确保消息的可靠传输.WCF本质上是一个消息处理框架,作为整个消息交换系统的两个终端,即发送端和接收端.换句话说,WCF仅仅负责对消息的发送和接收,一旦消息通过WCF的信道层进入了网络,就脱离了WCF的控制范围.但是,由于网络环境的限制,网络层不能百分之百地确保对消息的有效交付.如何克服中间环节的制约,确保从一端发送的消息能够被有效地交付给另一端,这就是可靠消息传输(Reliable Mes

使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](下)

上面一部分我们站在信道层的角度剖析了WCF为了实现可靠会话在信道层进行的一系列消息交换,或者说客户端和服务端的RS信道为了实现可靠消息传输所进行一轮又一轮的握手.这一切都是基于这样一个假设:两个RS信道均可以在适当的时机向对方发送消息,或者说两个RS信道之间是一个双工的通道. 如果我们站在传输层看待这个问题,该假设对于TCP传输是成立的,但是对于HTTP来说就有点问题了.HTTP本身就是一个基于请求|回复消息交换模式的应用层网络协议,并不能对双工通信提供支持.而WCF通过WSDualHttpBi

一起谈.NET技术,使命必达:深入剖析WCF的可靠会话

作为一个通信基础平台,WCF必须保证通信的可靠性.由于消息交换是WCF采用的通信手段,通信可靠性的保障体现在确保消息的可靠传输.WCF本质上是一个消息处理框架,作为整个消息交换系统的两个终端,即发送端和接收端.换句话说,WCF仅仅负责对消息的发送和接收,一旦消息通过WCF的信道层进入了网络,就脱离了WCF的控制范围.但是,由于网络环境的限制,网络层不能百分之百地确保对消息的有效交付.如何克服中间环节的制约,确保从一端发送的消息能够被有效地交付给另一端,这就是可靠消息传输(Reliable Mes

使命必达--阿里云商用消息服务MNS初探

在2015杭州云栖大会上,阿里云飞天事业部资深总监李津发布了一款海量消息,使命必达的消息服务产品(http://www.aliyun.com/product/mns).该产品能够提供高效,可靠,安全,便捷,弹性扩展的消息服务:能够帮助我们轻松的构建松耦合,高并发的分布式系统:能够方便我们做跨域数据安全传输.目前,消息服务也是阿里云唯一商用消息产品,其服务稳定性和可靠性都有SLA保障.下面让我一起来详细了解一下这款产品.   架构优势带来海量,高可靠,高可用特性 在了解消息服务前,不得不提的是阿里