为什么XMPP消息有时会在移动设备上丢失

时间:2016-10-14 12:29:10

标签: tcp xmpp

This question询问如果在没有稳定连接的情况下在移动设备上丢失XMPP消息该怎么办,但我真的不明白为什么这些软件包会丢失。

我记得已经读过,当连接突然丢失时,服务器和客户端之间的流保持打开状态,只有在连接超时后才会销毁。这意味着服务器通过流发送到达的消息,即使断开连接的客户端不再接收这些消息。

我对这个解释感到满意已有一段时间了,但是开始想知道为什么核心XMPP缺乏如此重要的功能。最后我注意到确保XMPP协议中的正确传输是多余的,因为底层TCP应该已经确保了消息的正确传输,但是由于丢失消息引起的各种问题似乎并非如此。 / p>

为什么TCP不足以确保消息正确发送或正确失败,以便服务器知道它必须稍后发送消息?

1 个答案:

答案 0 :(得分:2)

  
    

为什么TCP不足以确保在这种情况下正确传输(或正确的错误处理,以便服务器知道必须再次发送消息)?

  

应用程序提供需要发送到其TCP的数据。 TCP根据需要对数据进行分段,并在已建立的连接上发送出去。应用程序通过确保数据包到达TCP的另一端的负担。 (这并不意味着,应用程序不应该重新传输。如果没有正确的响应,应用程序级协议可以定义重新发送消息)

TCP具有重传机制。发送给对等体的每个数据包都需要得到确认。在确认进入TCP之前,应在其sendQ中包含数据包。一旦收到对发送的数据包的确认,它们就会被删除。

如果丢包,则确认不会到达。 TCP进行重传。最终放弃。通知需要采取行动的应用程序。数据包丢失可能发生在TCP控制之外。因此,TCP提供尽力而为的可靠服务。