消息通信机制

本文探讨了在网络环境中实现可靠通信的挑战,通过分析不同对话消息机制,如一消息对话、两消息对话、三消息对话和四消息对话,阐述了如何避免信息丢失和复制。尽管不断改进协议,但完全可靠的通信仍无法保证,因为存在潜在的对话干扰和状态丢失问题。
摘要由CSDN通过智能技术生成

在不可靠的介质上实现可靠的信息交换。考虑由数据网络连接的两个进程 a 和 b,从一个进程向另一个进程传输消息。消息发出之后,可以在任意时间内接收,也可能在网络中丢失。

网络控制过程(network control procedure,NCP)的使用增加了通信的可靠性,通过NCP,进程 a 和 b 访问网络。进程 a 给NCP A 一个信息单元 m 来初始化通信。NCP之间的交互作用(经过数据网络,DN)必须保证信息 m 被发送到进程 b(通过NCP B),之后 NCP A 通知进程 a 关于信息的发送。
这里写图片描述
即使进程 a 只传送了一个信息单元给进程 b,由于网络不稳定,NCP A 和 NCP B 之间的对话由几条消息组成,它们要维持这个对话的状态信息,但是由于每一个进程可能的对话对象数量很大, 因此在消息交换完成之后,状态信息即被抛弃。状态信息的初始化称作打开,抛弃称作关闭。
如果 a 发送消息给 b,而该信息单元未发送到 b,则称信息单元m是丢失的。
如果它被发送两次,则称单元 m 为可复制的。
可靠的通信机制不仅防止复制而且防止丢失。
可靠的通信不存在
不管 NPC 设计的如何复杂,也不可能达到完全可靠的通信。这一结论独立于数据网或者 NCP 的设计并仅仅取决于这样一个假设:NCP 可能丢失有关一次激活对话的信息。

假设进程 a 进行通信初始化之后,NCP A 与 NCP B 开始对话,再接到来自 NCP A 的消息 m 之后,假定 NCP B 将消息发送至 b。

我们尝试设计这样一种协议,在任何情况下,它都可以避免丢失。
一消息对话
1、在最简单的设计中,初始化之后,NCP A 单独由网络发送不可更改的数据,并通知 a,然后关闭。
2、NCP B 总是将所接收的数据传送给 b,传送之后即关闭。
当网络消息发送失败时,这种协议就会引起信息丢失,但是不会引入消息复制。

两消息对话
在协议中增加一个确认,就可对消息进行有限的保护以防丢失。
1、NCP A 发送 <data,m> <script type="math/tex" id="MathJax-Element-25204"> </script>。
2、NCP B 接收 <data,m> <script type="math/tex" id="MathJax-Element-25205"> </script>,传送 m,发送 <ack> <script type="math/tex" id="MathJax-Element-25206"> </script>,关闭
3、NCP A 接收 <ack> <script type="math/tex" id="MathJax-Element-25207"> </script>,通知,关闭;如果超时没有接到确认应答,重新进行步骤1
当 NCP A 超时没有收到应答,重新发送信息时,此时 NCP B 可能收到了消息,并返回了 ack,已关闭。重新收到的这个消息会被当做一个新到达的消息处理,造成了信息复制的问题。

该协议也不能保证数据不会丢失,考虑进程 a 提供两个信息单元 m1 和 m2 进行传输
1)NCP A 发送 <data,m1> <script type="math/tex" id="MathJax-Element-25208"> </script>
2)NCP B 接收 <data,m1> <script type="math/tex" id="MathJax-Element-25209"> </script> ,传送 m1,发送 <ack> <script type="math/tex" id="MathJax-Element-25210"> </script>,关闭
3)NCP A 超时,发送 <data,m1> <script type="math/tex" id="MathJax-Element-25211"> </script> 。
4)NCP B 接收 <data,m1> <script type="math/tex" id="MathJax-Element-25212"> </script> , 传送 m1,发送 <ack> <script type="math/tex" id="MathJax-Element-25213"> </script> ,关闭
5)NCP A 接收 <ack> <script type="math/tex" id="MathJax-Element-25214"> </script> ,通知,关闭
6)NCP A 发送 <data,m2> <script type="math/tex" id="MathJax-Element-25215"> </script>
7)DN <data,m2> <script type="math/tex" id="MathJax-Element-25216"> </script> 丢失
8)NCP A 接收 <ack> <script type="math/tex" id="MathJax-Element-25217"> </script> (step 2),通知,关闭

三消息对话
1)NCP A 发送 <data,m> <script type="math/tex" id="MathJax-Element-25218"> </script>
2)NCP B 接收 <data,m> <script type="math/tex" id="MathJax-Element-25219"> </script>,传送 m,发送 <ack> <script type="math/tex" id="MathJax-Element-25220"> </script>
3)NCP A 接收 <ack> <script type="math/tex" id="MathJax-Element-25221"> </script>,通知,发送 <close>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值