2012-12-28 46 views
3

我正在編寫一個協議,通過使用TCP的網絡傳輸千兆字節的數據,嘗試自我介紹一些關於協議編程的知識。我不確定如何設計此傳輸協議,以便以最快和最有效的方式傳輸數據。數據傳輸協議設計

我在Windows上使用Qt。

此刻,我的我的應用協議(傳輸數據的部分)的設計如下:

  1. 首先拍攝的登錄信息。
  2. 寫入4千字節的第一個數據包(套接字),然後等待服務器確認它已獲得數據包。
  3. 當服務器確認接收到數據包時(通過寫入int「1」),寫入接下來的4千字節。
  4. 當所有數據傳輸完畢後,發送傳輸到服務器的數據的md5sum。
  5. 如果服務器再次用int 8確認,數據傳輸完成。

目前,當通過127.0.0.1進行傳輸時,我無法在同一臺計算機上獲得高於166KB /秒的速度。我一直在嘗試閱讀其他協議設計,但幾乎沒有任何關於數據傳輸協議的文檔可以爲他們的應用程序編寫。

協議設計是否發佈錯誤或者遇到一些嚴重問題? 協議是否應等待每個數據包由服務器確認,還是應該連續寫入?

+3

TCP已經處理了確認(ACK),校驗和,並且通常是有效負載大小的自適應算法。所以你所做的一切似乎都是多餘的。儘管如此,在本地主機上,166KB/s似乎非常慢。 –

+0

因此,我應該不等待服務器發送確認而不斷寫入SOCKET? – user1066991

+1

絕對如此。 TCP/IP堆棧將負責發送,確認,重試,排序等。您只需要考慮[套接字讀/寫](http://beej.us/guide/bgnet/output/html /singlepage/bgnet.html)電話。 –

回答

0

首先,我會建議花一些時間閱讀約TCP,和約Sliding Window Protocol

我認爲你的實現如此緩慢有兩個原因:首先,你等待每個數據包的確認 - 非常慢,你應該使用滑動窗口。 其次,您使用MD5校驗和。這沒有什麼錯,但TCP已經實現了一些基本的校驗和,並且您使用的MD5實現可能非常緩慢。

最後,找出原因很慢的原因的典型方法是使用分析。