2013-11-26 60 views
2

注:我主要關心的是數據有效性,而不是真實性,即我不在乎,如果數據被損壞,由於傳輸錯誤,但不太關心,如果惡意用戶試圖改變並重新發送包到原來的預期黨(像MITM攻擊)。使用java套接字時是否保證數據有效性?

我最近在構建基於TCP(特別是使用Java的SocketServerSocket)的網絡協議,我遇到了一個小問題,關於如何可靠的數據可以從A點使用TCP傳輸到B點。

我現在主要關心的是在自定義數據包結構的有效負載(可能是標頭)數據中是否包含SHA-2散列。通過一些研究,我看到TCP確實有自己的ECC,但我也聽說它不是特別「強」。

由於Java的Socket基於掀起了TCP的建築,我的問題是:

  1. 是否Socket類保證有效的(未損壞/丟失)的數據(至少我不確定性需要包含我自己的數據校驗和)?

  2. 難道Java本身(無論通過java代碼基礎設施)提供額外的驗證(通過純老TCP)數據其通過TCP連接發送的時候?

回答

2

TCP protocol contains checksums and retransmit machanisms確保您的數據在路上不會損壞。如果包損壞(即接收端的校驗和不匹配),TCP/IP堆棧將自動要求服務器再次發送該幀。

無需在Socket或Java應用程序層進行任何操作。

+0

所以你說它完全不需要添加校驗和到我的協議規範? (我讀過以前鏈接的文章的那一部分...) – initramfs

+0

是的,更多校驗和是浪費時間和帶寬。 –

4
  1. TCP做到這一點。與Socket類無關。

  2. Java不會爲TCP所做的任何事情添加任何東西。

相關問題