最后一条消息缺乏确认的后果

时间:2014-04-28 23:15:00

标签: tcp

直到不久前,我还没有深入思考过甚至TCP的一个限制,这在众所周知的two-generals problem

中可见

由于我偶然发现了这个问题,我开始想知道解决问题的可能性可能带来的后果。让我们考虑一下电子邮件协议。当A向B发送邮件时,A收到确认B确实收到其消息的确认。但是,B最终不知道A是否收到了确认。为什么这不重要?我试图理解为什么在日常应用中不可能达成共识并不是什么大不了的事情,我们确实担心这一点(也许我是在过度思考)。

我想到的另一种情况与ATM机有关。假设有人想要提取50美元,交易在银行总部接受,所以从余额中扣除了资金,但考虑到总部和ATM之间的连接此时失败了。钱是折扣但机器不提供金钱。这些情况是如何处理的?

也许我有点困惑,但这对我来说都是新的。看起来很奇怪,即使在人们之间的对话中,说最后一句话的人也无法知道对方是否听过这句话,因为最后一句话必须在没有确认的情况下离开。

1 个答案:

答案 0 :(得分:1)

这是在应用程序到应用程序的基础上处理的,具体取决于业务逻辑:

  • SMTP:最糟糕的事情是,邮件发送两次。今天的邮件服务器将看到重复的ID并删除第二个副本
  • ATM:这笔钱只在第一步中保留,只有在用户拿出钱后才能从预订转换为提款。这实际上要复杂得多,因为所有步骤都在设备上本地记录(“计数钱......好”,“打开插槽......好”,“把钱推出插槽......好”,。 ..)如果机器,连接或电源在坏的时刻发生故障,能够回滚或转发。