2009-05-22 64 views
2

我需要計算總數據傳輸,同時在TCP/IP中將固定大小的數據從客戶端傳輸到服務器。它包括連接到服務器,發送請求,標題,接收響應,接收數據等。如何確定TCP/IP中的總數據上傳+下載

更確切地說,如何在使用POST和GET方法時獲得全部數據傳輸?

這有什麼公式嗎?即使是理論上的一個也會很好(不考慮數據包丟失或連接重試等)

僅供參考我試過RFC2616和RFC1180。但那些都超過了我的腦海。

有什麼建議嗎?

在此先感謝。

+0

您是否在查找特定交易或特定端口上的流量使用情況? – 2009-05-22 05:09:32

+0

用於計算特定交易。我知道從客戶端發送到服務器的數據大小。因爲我知道URI和我將直接使用POST方法,所以我也知道客戶端請求標頭大小。我可以假設響應頭的大小。現在還有什麼其他的東西需要考慮作爲數據傳輸? – fireball003 2009-05-22 05:32:49

回答

0

我平均說,請求和響應每行大約有8行標題和大約30個字符。然後允許將任何上傳的二進制轉換爲Base64的大小增加。

你沒有說,如果你也想算TCP數據包報頭,在這種情況下,你可以承擔約1500 MTU所以每1500個字節的數據加上16個字節(TCP報頭)

最後,你可以總是設置一個數據包嗅探器併爲一個數據樣本計算實際字節數。

噢,你可能還需要考慮deflate/gzip編碼。

3

您無法預先知道總傳輸大小,甚至忽略重傳。有幾件事會阻止你:

  • TCP連接建立時主機之間協商TCP選項。某些選項(例如時間戳)將附加數據添加到TCP標頭
  • 「總數據傳輸尺寸」不清晰。例如,以太網在所使用的IP之上增加了不少的位。 802.11(無線)將增加更多。那麼HDLC或PPP會通過T1。甚至不考慮幀中繼。一些鏈接可能會使用壓縮(這會減少總大小)。總尺寸取決於您測量的位置,即使是單個數據包。
  • 假設您只是對第2層的總八位字節大小感興趣,並且您知道將提前協商的TCP選項,您仍然無法知道路徑MTU。即使連接正在進行中,這可能會改變。或者如果你沒有進行路徑MTU發現(這將會更加糟糕),那麼數據包可能在某處被分割,而遠程端會看到與你不同的數據傳輸量。

我不知道爲什麼你需要知道這一點,但我建議:

  • 如果你只是想的估計,看在Wireshark的一個典型的連接。計算開銷的百分比(與您給TCP的數據大小以及從TCP接收的數據大小)。用這個數字來估計:除了在病理情況下,它會足夠接近。
  • 如果您需要確定您的端看到了多少數據傳輸和接收,請使用libpcap捕獲數據包流並進行檢查。