How reliable is a TCP connection?

2019-05-29 19:55发布

问题:

I have been writen server-client application.Server is coded in c# and the client code writen using java.The communication protocol is TCP.

While transfering a file using tcp is it possible to send missing data. In other words does tcp guarantee that data arrives correctly.(Should I send header information for this file in order to check errors , like file size , hash etc.)

回答1:

The ordering of the packages of a tcp transmission os reliable.

For example your tcp message is split in three packages A, B and C.

Your client receives A, package B gets lost and then the client receives C. In the stream you will get only package A, package C is stored and as soon package B is retransmitted and received by your client, in the stream you will get package B and then C.

The same is done if package B is routed throug another way and is therefor received after package C.

The field 'Sequence Number' in the tcp header is needed for this mechanism.



回答2:

TCP provides a 16-bit checksum in protocol. It can detect most of the errors. Mistakes are more likely made at upper levels rather than tcp/ip. If you need high reliability in your software, an end-to-end strategy could be considered.

There is a classic article which talks about this: "end to end arguments in system design".