2013-11-21 122 views
2

我已經寫了服務器端客戶端應用程序。服務器用c#編寫,用java寫的客戶端代碼。通信協議是TCP。TCP連接有多可靠?

使用tcp傳輸文件時可以發送缺少的數據。換句話說,tcp保證數據到達正確(我應該發送這個文件的頭信息以檢查錯誤,如文件大小,散列等)。

+1

TCP偶爾會有錯誤。這就是爲什麼你有時會看到帶有文件的校驗和。 –

+2

TCP是[可靠的](http://en.wikipedia.org/wiki/Transmission_Control_Protocol) –

+0

Sriram我知道tcp是可靠packages.I的意思是檢查錯誤,包丟失等,但我不確定可靠性也就是說假設你通過tcp發送一個大文件。當把文件傳輸給客戶端時,一個包丟失了,當然它會再次發送tcp的原因。但是在客戶端你打開了一個流並寫入了傳入的數據到文件,然後發生了什麼事情,它不是它應該的順序。背景發生了什麼?如果我直接將傳入流寫入文件,它是否正確寫入? –

回答

3

tcp傳輸包的可靠排序。

例如您的TCP報文被分成三個包A,B和C

你的客戶端接收,程序包B丟失,然後在客戶端收到C.在你將只能得到一包流,包C被存儲,並且一旦包B被客戶端重新傳輸和接收,在流中,你將得到包B,然後C.然後,如果包B通過另一種方式被路由並且因此在接收到軟件包C.

此機制需要tcp頭中的字段「序列號」。

3

TCP在協議中提供了一個16位校驗和。它可以檢測大部分錯誤。錯誤更可能發生在上層而非tcp/ip。如果您的軟件需要高可靠性,則可考慮採用端到端策略。

有一篇經典文章談到這個:「end to end arguments in system design」。