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。 如果您的软件需要高可靠性,则可以考虑采用端到端策略。
有一篇经典文章谈到了这一点:“ 系统设计中的端到端论点 ”。