【问题标题】:Creating a compression tunnel创建压缩隧道
【发布时间】:2011-06-28 10:56:45
【问题描述】:

我正在尝试压缩端口 6999 上的所有流量并将其通过管道传输到端口 7000。我正在考虑为此创建一个隧道。我想使用英特尔的性能原始压缩库而不是 gzip 等。

非常感谢任何想法或想法。

非常感谢,

【问题讨论】:

  • 从未听说过英特尔的性能原语,但我认为(希望)gzip 和其他工具“自动”针对处理器级功能进行了优化。特别是,我希望 gcc 为每个平台输出优化的代码,所以要使用高级指令集(例如,MMX 指令)。
  • 我确信 gzip 做得很好。英特尔的性能原语针对英特尔硬件进行了优化,因此应该做得更好。
  • 我再说一遍:您可以在编译 gzip(或类似的)时激活 IPP 优化。例如,参见encode.ru/threads/476-gzip-Intel-IPP

标签: linux compression tunnel


【解决方案1】:
$ echo 'hello world' > a
$ nc -l 6999 | gzip | nc -l 7000 &
[1] 3004
$ nc localhost 6999 < a
$ nc localhost 7000 > b
[1]+  Done                    nc -l 6999 | gzip | nc -l 7000
$ gzip -d < b > c
$ md5sum a b c
6f5902ac237024bdd0c176cb93063dc4  a
74e8a26018c51612ce9257cff9f75c95  b
6f5902ac237024bdd0c176cb93063dc4  c

【讨论】:

  • 任何基于用户空间的解决方案都不会 100% 透明。例如,源地址会不同。
  • 嗯。那里有非常有趣的命令行体操!但我不太明白下一步该怎么做?!另外,这是否总是写入磁盘?我宁愿在内存中完成所有操作,而不是写入磁盘。非常感谢!
  • 我的意思是,我怎样才能将所有这些都包装到一个脚本中?另外,是否可以只压缩传出流量和解压缩传入流量?
  • @Eamorr:都在内存中。我使用的文件位于端点,它们与管道无关。如果需要,您可以使用 TCP 连接到您自己的代码中的端口。它可以包装在脚本中。您可以通过调用 2 个 gzip 实例和单个 nc 的组合来完成所有压缩/解压缩,并正确连接它们的 stdin/stdout 句柄。请注意,上面的演示受限于如果管道缓冲区填满,它将停止。 a 和 b 的输入和提取需要同时进行以避免这种情况,这完全是另一个问题。
  • @Eamorr:再问一个问题。总是问如何实现你想要的,而不是你认为你需要的。 mywiki.wooledge.org/XyProblem
猜你喜欢
  • 2012-09-16
  • 2012-03-28
  • 2019-05-03
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多