二 通用协议与TCP握手
Two general agreement and TCP handshake
所以这两个一般性问题表明,没有确定的方法可以知道我们通过不可靠渠道与之通信的另一方是否收到了我们的消息。这非常类似于我们发送 syn
syn ack
ack
并建立连接的 TCP 握手。这不是反对两个普遍问题的主张吗?
这两个普遍问题确实是 TCP 的异步模型,这就是为什么(如理论结果所示)两个端点不能同时了解连接状态的原因。
每个分布式协议协议处理这个问题的方式是始终承诺安全(不会发生任何坏事),但不能保证活性(最终会取得进展)。活力不在你手中。顺境时,努力做到最好,希望有进步。
在 TCP 中,这意味着端点可以在不确定知道对方状态的情况下做出假设(例如 "connection established")。但是,做出这样的假设并不是不安全的;在最坏的情况下,这是一个良性的误解。超时后,它将改变其意见。这与在长途电话的一端并继续通话并认为连接仍然存在没有什么不同;过了一会儿,你可能要问 "hello, you still there?",然后超时。现实世界的协议必须始终有超时(不同于异步正式模型),因为它们在堆栈的某个地方服务于某些人类功能,而人类的耐心是有限的。在实践中,有足够好的时间段可以取得进展,所以我们只需要选择合适的超时时间,不要太早超时。
也就是说,即使是良性的误解也会产生不良后果。例如,服务器响应syn后,为连接分配资源,希望客户端完成协议。这是典型的拒绝服务攻击,因为流氓客户端可以简单地开始握手序列但永远不会完成,从而使未准备好的服务器分配了数百万个状态机。需要小心。
所以这两个一般性问题表明,没有确定的方法可以知道我们通过不可靠渠道与之通信的另一方是否收到了我们的消息。这非常类似于我们发送 syn
syn ack
ack
并建立连接的 TCP 握手。这不是反对两个普遍问题的主张吗?
这两个普遍问题确实是 TCP 的异步模型,这就是为什么(如理论结果所示)两个端点不能同时了解连接状态的原因。
每个分布式协议协议处理这个问题的方式是始终承诺安全(不会发生任何坏事),但不能保证活性(最终会取得进展)。活力不在你手中。顺境时,努力做到最好,希望有进步。
在 TCP 中,这意味着端点可以在不确定知道对方状态的情况下做出假设(例如 "connection established")。但是,做出这样的假设并不是不安全的;在最坏的情况下,这是一个良性的误解。超时后,它将改变其意见。这与在长途电话的一端并继续通话并认为连接仍然存在没有什么不同;过了一会儿,你可能要问 "hello, you still there?",然后超时。现实世界的协议必须始终有超时(不同于异步正式模型),因为它们在堆栈的某个地方服务于某些人类功能,而人类的耐心是有限的。在实践中,有足够好的时间段可以取得进展,所以我们只需要选择合适的超时时间,不要太早超时。
也就是说,即使是良性的误解也会产生不良后果。例如,服务器响应syn后,为连接分配资源,希望客户端完成协议。这是典型的拒绝服务攻击,因为流氓客户端可以简单地开始握手序列但永远不会完成,从而使未准备好的服务器分配了数百万个状态机。需要小心。