使命必达: 深入剖析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
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号 蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章
|
27天前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
62 1
|
存储 监控 安全
【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
传统上,企业应用程序在公司网络中部署和运行。为了获取有关用户的信息,如用户配置文件和组信息,这些应用程序中的许多都是为与公司目录(如Microsoft Active Directory)集成而构建的。更重要的是,通常使用目录存储和验证用户的凭据。例如,如果您使用在本地运行的SharePoint和Exchange,则您的登录凭据就是您的Active Directory凭据。
290 1
【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
|
JavaScript Dubbo 小程序
4年工作经验,多线程间的5种通信方式都说不出来,你敢信?
有两个线程,A 线程向一个集合里面依次添加元素“abc”字符串,一共添加十次,当添加到第五次的时候,希望 B 线程能够收到 A 线程的通知,然后 B 线程执行相关的业务操作。线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。
|
人工智能 运维 安全
业内对 5G 的响应 | 带你读《5G时代的承载网》之五
自 2014 年 5 月 13 日三星电子宣布其已率先开发出了首个基于 5G 核心技 术的移动传输网络,并表示将在 2020 年之前进行 5G 网络的商业推广以来,关 于 5G 的话题如火如荼。
|
机器学习/深度学习 编解码 5G
前传感知的协作传输和接收之上行链路 | 带你读《5G系统关键技术详解》之十二
本节说明了上行链路和下行链路 C-RAN 的波束成形 设计技术,并将 C-RAN 用户的理论可实现速率表征为前传容量限制的函数。
前传感知的协作传输和接收之上行链路   | 带你读《5G系统关键技术详解》之十二
|
数据挖掘 5G 调度
前传感知的协作传输和接收之下行链路 | 带你读《5G系统关键技术详解》之十三
在当前的 3G/4G 蜂窝网络中,每个被调度的用户由一个基站服务并且接收到来自所 有相邻基站的干扰。C-RAN 架构的优点来自多个 RRH 协同服务用户的能力,从而小化干扰的影响。
前传感知的协作传输和接收之下行链路 | 带你读《5G系统关键技术详解》之十三
|
网络协议
一起谈.NET技术,使命必达:深入剖析WCF的可靠会话
  作为一个通信基础平台,WCF必须保证通信的可靠性。由于消息交换是WCF采用的通信手段,通信可靠性的保障体现在确保消息的可靠传输。WCF本质上是一个消息处理框架,作为整个消息交换系统的两个终端,即发送端和接收端。
960 0
5走进区块链-应用层作用与设计
随着区块链概念的持续升温,越来越多的人投身到区块链中来,很多行业都将目光投向区块链,希望能够通过区块链技术来解决行业中遇到的问题。但是就区块链现状来看,还处于发展时期,需要有更多的落地应用来验证,正如互联网一样,从认知到认可是经过时间检验的。
1492 0