转帖-基于TCP的通信程序的吞吐率如何能够达到网络带宽的90%以上
时间:2010-07-04
来源:互联网
最近写了一个最基于的文件传输程序,基于TCP实现。网络拓扑非常简单:即一台服务器与一台客户机通过一个交换机直接连接。服务器与客户端的网上速率均为 1Gbps,交换机的速率也是1Gbps。使用阻塞式的socket,网络吞吐率能够达到700Mbps。通过设定较大的发送/接收缓存、禁用Nagle 算法等进行了优化,吞吐率仍然为700Mbps左右。
但一些发表的论文在考虑这种简单的拓扑,而且网络中只考虑一条流的情况下,基于 TCP的通信程序的吞吐率能够达到90%以上。
在这里我就请问各位是否关注过这方面的内容,如何能够实现基于TCP的通信程序的吞吐率如何能够达到网络带宽的90%以上?在我所列出的拓扑环境下,即达到900Mbps以上的吞吐率。
谢谢!
作者: cskyrain 发布时间: 2010-07-04
sysctl -w net.inet.tcp.sendspace=10485760
GE 铜线到达 112 兆字节/秒就差不多了。别忘记,以太网头部 + IP 头部 + TCP 头部 + TCP flow control + HTTP chunked transfer,这都是开销。
作者: langue 发布时间: 2010-07-04
作者: 没本 发布时间: 2010-07-04

作者: linuxlixk 发布时间: 2010-07-04
sysctl -w net.inet.tcp.sendspace=10485760
GE 铜线到达 ...
langue 发表于 2010-07-04 15:16
HTTP chunked transfer 是什么? http头么?
作者: xinglp 发布时间: 2010-07-04
最近写了一个最基于的文件传输程序,基于 ...
cskyrain 发表于 2010-07-04 14:35
1. 大包发送,每包至少4K以上,如果可能就1M-10M的包。
2。 发送后不求回执,连续发多包才清点回执。
作者: yulihua49 发布时间: 2010-07-04
作者: smalloc 发布时间: 2010-07-04
2. 禁用不用禁用尼格尔跟这没关系
3. 不知道你是怎么统计的,你可以看一下 /proc/net/dev 中实际服务器的流量
4. 如果客户端收的效率低,那么服务器也发不出去
作者: cookis 发布时间: 2010-07-04
作者: langue 发布时间: 2010-07-04
2. 禁 ...
cookis 发表于 2010-07-04 18:56
同意楼上的说法,最好使用非堵塞模式。
使用非阻塞模式,也可以实现传统的同步收发。
对收发数据可以稍稍优化,以发送为例:
while (还有数据要发送)
{
直接尝试发送,如果成功,continue;
否则使用 select或poll堵塞住,直到可以发送或者超时。如果可以发送,continue; 如果超时,直接返回错误
}
同理,接收也是类似的做法。
我做过测试,这样的收发方式,比传统的select后再收发的做法,效率能提高差不多20%。
LZ可以试一下,相信会有惊喜。
作者: happy_fish100 发布时间: 2010-07-04

作者: coac 发布时间: 2010-07-04
作者: ^^ 发布时间: 2010-07-04
这个极小了, 而且搂住用http的话,应改用静态文件测试吧, 一般只有php一类的东西才会出chunck
作者: xinglp 发布时间: 2010-07-04
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28