TCP连接的可靠性如何?

我已经写了服务器客户端application.Server用c#编写,客户端代码用java编写。通信协议是TCP。

使用tcp传输文件时,可以发送丢失的数据。 换句话说,tcp保证数据正确到达。(我应该发送此文件的头信息以检查错误,如文件大小,哈希等)

tcp传输的包的顺序可靠。

例如,您的tcp消息分为三个包A,B和C.

您的客户端收到A,包B丢失,然后客户端收到C.在流中,您将只获得包A,包C被存储,并且一旦包B被您的客户端重新传输和接收,您将获得包B然后C.

如果包B通过另一种方式路由并且因此在包C之后接收,则完成相同的操作。

此机制需要tcp头中的“序列号”字段。

TCP在协议中提供16位校验和。 它可以检测大多数错误。 错误很可能是在较高级别而不是tcp / ip。 如果您的软件需要高可靠性,则可以考虑采用端到端策略。

有一篇经典文章谈到了这一点:“ 系统设计中的端到端论点 ”。