如何确定TCP / IP中的总数据上传+下载

时间:2009-05-22 04:41:50

标签: post get tcp

我需要计算总数据传输,同时在TCP / IP中将固定大小的数据从客户端传输到服务器。它包括连接到服务器,发送请求,标题,接收响应,接收数据等。

更准确地说,如何在使用POST和GET方法时获得总数据传输?

那有什么公式吗?即使理论上也可以做得很好(不考虑数据包丢失或连接重试等)

仅供参考我尝试了RFC2616和RFC1180。但这些都是我的头脑。

有什么建议吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您无法提前知道总传输大小,甚至无法重新传输。有几件事会阻止你:

  • 建立连接时,在主机之间协商TCP选项。某些选项(例如,时间戳)将附加数据添加到TCP标头
  • “总数据传输大小”尚不清楚。例如,以太网在所使用的IP之上增加了不少比特。 802.11(无线)将增加更多。通过T1进行HDLC或PPP也是如此。甚至不要考虑帧中继。某些链接可能使用压缩(这将减少总大小)。总大小取决于您测量它的位置,即使对于单个数据包也是如此。
  • 假设您只对第2层的八位字节总大小感兴趣,并且您知道将提前协商的TCP选项,您仍然无法知道路径MTU。即使连接正在进行,也可能会发生变化。或者,如果您没有进行路径MTU发现(这将是奇怪的),那么数据包可能会在某处碎片化,并且远程端将看到与您不同的数据传输量。

我不确定你为什么需要知道这一点,但我建议:

  • 如果您只想估算一下,请观看Wireshark中的典型连接。计算开销百分比(相对于您为TCP提供的数据的大小,以及从TCP接收的数据)。使用该数字进行估计:除病理情况外,它将足够接近。
  • 如果您需要确定您的终端传输和接收的数据量,请使用libpcap捕获数据包流并进行检查。

答案 1 :(得分:0)

我平均说请求和响应每个大约有8行标题,每行大约有30个字符。然后允许将任何上传的二进制文件转换为Base64的大小增加。

你没有说你是否也想要计算TCP包头,在这种情况下你可以假设MTU大约为1500,所以每1500个数据字节添加16个字节(tcp头)

最后,您始终可以设置数据包嗅探器并计算数据样本的实际字节数。

哦是的,你可能还需要允许deflate / gzip编码。