消息通信机制

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在不可靠的介质上实现可靠的信息交换。考虑由数据网络连接的两个进程 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>
2、NCP B 接收 <data,m>,传送 m,发送 <ack>,关闭
3、NCP A 接收 <ack>,通知,关闭;如果超时没有接到确认应答,重新进行步骤1
当 NCP A 超时没有收到应答,重新发送信息时,此时 NCP B 可能收到了消息,并返回了 ack,已关闭。重新收到的这个消息会被当做一个新到达的消息处理,造成了信息复制的问题。

该协议也不能保证数据不会丢失,考虑进程 a 提供两个信息单元 m1 和 m2 进行传输
1)NCP A 发送 <data,m1>
2)NCP B 接收 <data,m1> ,传送 m1,发送 <ack>,关闭
3)NCP A 超时,发送 <data,m1>
4)NCP B 接收 <data,m1> , 传送 m1,发送 <ack> ,关闭
5)NCP A 接收 <ack> ,通知,关闭
6)NCP A 发送 <data,m2>
7)DN <data,m2> 丢失
8)NCP A 接收 <ack> (step 2),通知,关闭

三消息对话
1)NCP A 发送 <data,m>
2)NCP B 接收<data,m>,传送 m,发送<ack>
3)NCP A 接收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值