【问题标题】:Transfer time with socket使用套接字传输时间
【发布时间】:2020-05-25 13:23:50
【问题描述】:

实际上,我正在开发一个嵌入式系统,我通过套接字发送图像。我在双方(客户端和服务器)都使用 linux。

以太网的吞吐量为 1000Mbit/s。我试图弄清楚发送一张图片的时间。它是 32 位图像(浮点),尺寸为:6004*7920。 我希望转移时间:

(6004*7920*4*8)/(1000000000) = 1.52 秒

根据我的代码,这次是 2.1 秒。我不明白这种区别。协议的时间..?

请注意,我已经将巨型帧增加到 9000。 感谢您的帮助!

【问题讨论】:

  • 如果您需要帮助,请分享您的代码。谢谢。

标签: linux image sockets tcp throughput


【解决方案1】:

要记住 1000Mb/秒的传输速率数字是理论上的最大值,而不是您在实践中通常会实际获得的速度。测得的速率很可能是somewhat lower

测量速率可能低于理论速率的一些原因是(无特定顺序):

  1. 由于 TCP 数据包头和以太网帧头造成的开销
  2. 丢弃的数据包(这会导致 TCP 流短暂停止,以便可以重新发送丢弃的数据包)
  3. 发送或接收硬件的 CPU 或内存带宽限制
  4. TCP 的 slow-start 功能可在会话开始时降低传输速率
  5. 竞争相同带宽的其他网络流量
  6. 发送或接收代码的次优实现(例如,接收程序可能花费时间将接收到的数据写入磁盘,延迟其对recv() 的下一次调用,使其 TCP-receive-buffer 溢出)
  7. 由于以太网电缆质量不佳或电缆长度过长而降低了传输速度

附带说明,如果您想减少传输图像所需的时间,您可能会考虑在发送之前压缩数据(例如,通过在发送端转换为 .jpg)。如果您可以显着减少您发送的数据量,您可以相应地减少传输时间。 (您可以通过在服务器端的单独线程中进行压缩来进一步加快速度,以便图像#(N+1) 的压缩可以与图像#N 的传输并行发生)

【讨论】:

  • 您好,非常感谢您的全面回答,现在更清楚了!实际上,我通过以太网使用 ssh。关闭 ssh 会话可减少 200 毫秒的传输时间。我将尝试使用更好的以太网电缆。压缩图像是个好主意,但我做不到,我必须尽量减少噪音。再次感谢您!
  • 无损压缩(例如使用 ZLib)可能值得一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多