假设我们的客户端以恒定速率发送数据包。现在,如果服务器暂时宕机,可能有两种情况
(我们使用的是 TCP 协议)
1)数据包不会被传递到服务器。因此,线路中的其他数据包必须等待服务器响应。并且可以从那里进行通信。
2)这个包不会被投递,会重试,但其他包不会受到这个包的影响。
比如说,数据包 A、B 和 C 将被传输。当我发送数据包 A 时,服务器暂时关闭,然后数据包 B 和 C 将在最初计划的时间发送,或者一旦服务器接收到 A,它们将被发送。
TCP 是一种面向流的协议。这意味着,如果在单个 TCP 连接上,您先发送 A,然后发送 B,那么接收者将永远不会看到 B,直到它看到 A。
如果您通过单独的TCP 连接发送 A 和 B,则 B 有可能在 A 之前到达。
当您说“暂时下降”时,您是什么意思?我可以看到两种不同的情况。
数据包 A 在途中发送。不幸的是,当它通过电缆缠绕时,一根电缆断裂,A 丢失了。同时,根据 TCP 窗口算法的确切状态,可能会或可能不会发送数据包 B 和 C(因为这取决于窗口大小、A/B7C 的大小以及发送的尚未确认的字节数) . 我想这是说你的“1”和“2”可能是对的?
如果 B 和/或 C 已发送,则不会有 A 的 ack,直到它被重新发送。如果它们已发送,一旦 A 到达,服务器将确认直到按顺序接收到的最后一帧结束(因此,C,如果是这种情况)。
如果发生这种情况,所有 TCP 状态都将丢失,并且必须在服务器完成重新启动后重新建立连接。