2017-03-25 31 views
-2

我想從客戶端發送文件到服務器。我想通過將文件分解成每個1000字節的數據包大小並將其逐一發送來發送它。現在,在服務器收到數據包之後,它可能會損壞。那麼,我是否應該使用一個頭文件並將數據包的校驗和與數據包一起發送,並在服務器收到後檢查它們是否匹配?或UDP有一個默認功能來自動檢查校驗和?UDP連接發送後是否負責分組校驗和?

+0

https://en.wikipedia.org/wiki/User_Datagram_Protocol#Checksum_computation – Barmar

+0

UDP校驗和在IPv4上是_optional_,但在IPv6上是_required_。 –

回答

0

是的,UDP有一個校驗和自動檢查數據包。你可以閱讀關於Wikipedia的算法。

許多操作系統都有一個選項,用於控制校驗和是否完成,直到20世紀90年代爲止,出於性能方面的考慮,這是常見的。我認爲現在大部分都已啓用,很可能是由許多NIC自動完成的。

0

UDP有一個16位校驗和,如果有不匹配,你的操作系統可能會丟棄數據包。但是,您可以將此校驗和設置爲0以繞過檢查,並實現您自己的檢查。

但是如果你首先使用UDP,你應該期望某些數據包丟失或丟失。這在傳輸文件時播放不好,所以我建議你使用TCP。

+0

謝謝。我試圖使用UDP並通過ACK手動建立類似TCP的連接。所以,如果操作系統丟棄數據包,服務器應該再次發送它,對吧?假設我不想丟包。 – Manohar

+0

不,如果推送一個小尺寸的對象,請從服務器客戶端快速發送請求的錯過部分。 UDP加速和非塊通信的選擇(如流),爲什麼不推動爲'靜態文件(www_style)? @Manohar – dsgdfg