浅谈SOCK_STRAM SOCKET 的缓冲区 和 传送速度的相互关系

最近留意到一个想象,以前觉得飞鸽传输的速度在100Mbps 网卡上能够跑7 8M/s的样子感觉很神奇,看了一下源代码貌似没有发现很大特别地方,只是觉得那个日本人写的代码比较正规,学生很少看见漂亮代码,只会写垃圾代码。以前写过传送文件代码,发现速度只有飞鸽传送一般的速度并且貌似传送的速度还不稳定。想好了好久没有想明白,后来想貌似网上好多说什么多线程下载,p2p下载。我就想弄个多线程就OK就应该可以提高速度。后面经过自己测试发现这个不是很对,在某种程度上速度稍微有一点点提高。后来,知道网卡是数据传送不是并行,所以多线程根本不解决本质。(为什么多线程下载可以提高下载速度,你是不是看到过一些浏览器的下载管理器 下载一个文件时候都开启几个线程,显然他们开启多线程是为提高下载速度。。。想知道原理请看下面分解)。我想了好久,想到IP协议是以最大速度传送数据,那么TCP 和 UDP 都是在IP基础上出来,显然他们也基础IP这个特性,所以可见SOCKET 没有提高网卡传送的方法,这就说明速度是一个定值。我们所说网速其实就是 每秒网卡进过数据流量。这里我就要举一个例子,否则越说越糊涂了。一个可以装20吨的货车装满了沙子,一个可以装10吨的小货车装满了沙子。 但他们最大速度都相同,他们都以最大速度在2条一样的条路上行驶,并且都要经过个完全一样收费站。货车长度是一样。汽车速度就是我们网卡物理最大速度100Mbps == 货车的速度以为长度一样 速度一样 我们假设经过的时间为1s收费站速度(以沙子为对象) :大货车的:20吨/s 小货车:10吨/s ====== 我们所说的网速说到这里我也明白,我以前学习网络课程不明白的地方,以前网卡最大速度 和 网速 为什么不是一样。网卡100Mbps : 类似如 一个汽车 一秒 可以跑 多少米我们所说网速:类似 收费站 一秒 经过的沙子量这个2个是不同概念。这就好像 长度 和 面积差别。。看来以前学习数学还是有一点用的。所以这里就可说: 货车装载量就是套接字(字节流)缓存区大小。我们只要增加缓冲区大小就可以提高我们传送文件的速度。经过测试确实验证这个说话,测试结果就不贴出来了。后面看steven 的tcp/ip详解 里面也写了一段话,也说明这个观点。插口A P I允许进程设置发送和接收缓存的大小。接收缓存的大小是该连接上所能够通告的最大窗口大小。有一些应用程序通过修改插口缓存大小来增加性能。[Mogul 1993]显示了在改变发送和接收缓存大小(在单向数据流的应用中,如文件传输,只需改变发送方的发送缓存和接收方的接收缓存大小)的情况下,位于以太网上的两个工作站之间进行文件传输时的一些结果。它表明对以太网而言,默认的 4 0 9 6字节并不是最理想的大小,将两个缓存增加到 1 6 3 8 4个字节可以增加约 4 0 %左右的吞吐量。秦时明月小说网

     在 [ P a p a d o p o u l o s和Parulkar 1993]中也有相似的结果。他这里插口API 就是套接字(我就单纯认为套接字)windows 缓存区默认大小是8k。为什么多线程可以稍微提高网络速度?其实我们想想 一张网卡只要不停跑满流量就可以达到最高速度。多线程就是使缓存区数据保持被填满,但这里只是稍微提高。其实单线程就足够做到这点,我们 send 传入一个Buf 参数时候 只要这个Buf一个合适的值,就足够使网卡保持繁忙。这里就好像怎么是cpu 效率最高就是不要cpu停下来,同理怎么是网卡效率最高,也就是不要它停下来。为什么多线程下载可以提高网速?我们知道带宽速度比起网卡速度那完全是皮毛,说实在网卡I/O设备是中断读取数据,它读取数据也不能并行读取(不知道这么说对不对),所以多线程不是使网卡并行读取数据,而是增加服务器对你服务器时间(因为你使用多线程),自然传送速度会快些。p2p 我认为无非也是增加服务器对你服务器时间(这里不是指特定服务器,而是能够给你传送数据我就叫着服务器,貌似p2p叫对等方)。(我没有写过p2p,只是通过一些书籍介绍,凭自己感觉思考的)。因为网卡的读取速度比起带宽要快很多,所以p2p 在很大范围来说 给你上传数据的对等方越多你的速度越快,但超过一定的值,其实就不可能提高了。上面都是本人通过以有知识推测,有些经过验证,有些没有进过验证。如果有错误,那就错了吧!!注:错别字不算错误。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值