原始套接字绕过tcp / ip头

时间:2011-08-27 16:54:30

标签: c linux sockets optimization tcp

我有两个程序通过同一台计算机上的套接字进行通信。 目前使用TCP / IP传输160万字节大约需要7秒。 我需要快速。

如果我使用原始套接字而忽略TCP / IP标头,那么这应该提高速度吗?我还能做些什么来提高速度吗? SOCKET_RAW选项是直接副本还是其他任何东西?

4 个答案:

答案 0 :(得分:6)

1.6MB使用“普通”TCP / IP不应该花7秒 - 当然不能在同一台机器上!这表明你在某处有低效的代码。在尝试在网络方面做任何“特殊”之前,我会先解决这个问题。

编辑:我刚刚在上网本上编写了一个简短的C#程序,并在279ms内传输2MB(随机生成数据)。这没有优化。除非你从20世纪80年代开始在机器上运行,否则肯定会获得更好的性能......

答案 1 :(得分:1)

尝试使用Unix域套接字。

答案 2 :(得分:1)

为了获得糟糕的性能,你做的事情非常低效。也许i / o操作是单字节的?

更改为原始套接字是一个坏主意。为了获得可靠的通信,您必须添加某种数据检查,排序等等:TCP为可靠性所做的一切。

如果目的是在同一台计算机上将数据从一个进程传输到另一个进程,请使用共享内存和互斥锁来同步访问。当然,如果程序最终必须在不同的机器上运行,这不是一个好的解决方案。

答案 3 :(得分:0)

不,使用原始IP套接字绝对不是一个好主意。使用unix-domain套接字可能略微更高效,但我怀疑它会解决你的问题。你明显有另一个问题。也许是您的应用程序级协议效率低下?

相关问题