两种通用协议与TCP握手

两种通用协议与TCP握手,tcp,handshake,Tcp,Handshake,因此,两个普遍的问题是,没有确定的方法可以知道我们通过不可靠的渠道与之通信的另一方是否收到了我们的消息。这与TCP握手非常类似,在TCP握手中,我们发送synsyn ackack并建立连接。这不是与两个一般性问题的说法相反吗?这两个一般性问题确实是TCP的异步模型,这就是为什么(正如理论结果所示)两个端点不能同时拥有关于连接状态的公共知识 每个分布式协议协议处理这个问题的方式都是保证安全(不会发生坏事),但不能保证活跃性(最终会取得进展)。活力不在你手中。在好的时候,人们可以尽力做到最好,并希望

因此,两个普遍的问题是,没有确定的方法可以知道我们通过不可靠的渠道与之通信的另一方是否收到了我们的消息。这与TCP握手非常类似,在TCP握手中,我们发送
syn
syn ack
ack
并建立连接。这不是与两个一般性问题的说法相反吗?

这两个一般性问题确实是TCP的异步模型,这就是为什么(正如理论结果所示)两个端点不能同时拥有关于连接状态的公共知识

每个分布式协议协议处理这个问题的方式都是保证安全(不会发生坏事),但不能保证活跃性(最终会取得进展)。活力不在你手中。在好的时候,人们可以尽力做到最好,并希望取得进展

在TCP中,这意味着一个端点可以做出假设(如“连接已建立”),而不必明确知道另一个端点的状态。然而,这并不是一个不安全的假设;最坏的情况是,这是一个善意的误解。超时后,它将更改其意见。这和坐在长途电话的一端,继续通话,以为连接还在继续,没有什么不同;过了一会儿,你可能不得不问“你好,你还在吗?”然后暂停。现实世界的协议必须总是有超时(与异步形式化模型不同),因为在堆栈的某个地方,它们服务于某些人类功能,人类的耐心是有限的。在实践中,有足够长的时间可以取得进展,所以我们只需选择适当的暂停时间,也不要过早暂停


也就是说,即使是善意的误解也可能产生不良后果。例如,在服务器响应syn后,它为连接分配资源,希望客户端完成协议。这是一种典型的拒绝服务攻击,因为恶意客户端可以简单地启动握手序列,但永远无法完成握手序列,从而使未做好准备的服务器上分配了数百万台状态机。需要小心。

这就是为什么TCP不能保证任何一方都能正常终止连接,或者任何一方都不能正常终止连接。(尽管我们现在需要解决这个问题。)