【发布时间】:2012-12-04 15:22:00
【问题描述】:
我遇到了一个有趣的理论问题:
假设我们通过一些 IPC(如 tcp 套接字或命名管道)连接了程序 A 和程序 B。程序 A 向程序 B 发送一些数据,并根据数据传递的成功,A 和 B 执行一些操作。但是,只有在确定 A 已收到交货确认时,B 才应进行操作。所以我们想出了3个连接: A -> B [数据传输] B -> A [发货确认] A -> B [收到交货确认的确认]
这可能看起来很奇怪,但目标是在双方都知道数据已传输之前,不对 A 和 B 执行任何操作。
这就是问题所在,因为第二次连接是为了确认第一次连接成功。第三个是确认第二个,但实际上并不能保证连接 2 和 3 不会失败,在这种情况下,我们会陷入确认的无限循环。是否有一些 CS 理论可以解决这个问题?
【问题讨论】:
-
很简单:如果A在某个时间段内没有得到确认,则认为数据丢失,然后重新传输。没有循环,因为 A 将终止原始传输序列并开始一个新的传输序列。然后在某个时候,你终止重传,假设 B 是无可救药地无法到达,你只是爬回床上呜咽。
-
CS理论是TIMEOUT。
-
像非接触式电子支付卡...
-
这不是关于无响应,而是关于了解相互状态而不会有另一个连接失败的风险,所以不,这里不适合超时
标签: sockets tcp computer-science named-pipes computation-theory