带宽时延乘积的含义

来源:互联网 发布:a算法解决八数码问题 编辑:程序博客网 时间:2024/06/03 05:53
带宽时延乘积指的是链路的带宽(单位比特每秒)与来回通信延迟(RTT,单位秒)的乘积。结果为比特的数据量,表示在特定时间该网络上的最大数据量--已发送但尚未确认的数据。

带宽时延乘积对网络性能的影响
     举一个好理解的例子,开了100Mb的电信宽带,但由于中间一些路由器以及链路的瓶颈,导致ping对端主机的RTT为1s,对端的窗口大小为64kB,那么你的发包速度很快会占满窗口,必须等待ACK回来才能重新发包,所以你的速度大概只能有64KB/S。
     假设两台电脑百兆网口接在一起用Chariot跑TCP流量,电脑的窗口大小为64KB(窗口不自动扩大)。它们之间线路速度为100Mb/s,RTT稳定为1ms,那么带宽时延乘积为100Kb (12.5KB), 小于窗口大小,那么跑出来的速度是接近线速(100Mb/s)的。如果RTT稳定为10ms,那么理论速度为64*8/10=51.2Mb/s。

在实验室测试电信的百兆光纤专线时,使用www.speedtest.net网站测速,下载测试速度大概85Mb/s,以64KB的窗口大小计算可以得出RTT大概等于6ms。而自己搭PPPOE服务器,测试性能,下载速度可以到93Mb/s。说明中间路由器的转发,链路速度这些会使RTT时间增大,从而影响下载性能。

如果开通百兆网,并不意味着你真正有百兆的使用体验,这还得需要运营商优化线路,使用性能更好的中间路由器,努力降低往返时延才行。

http://blog.csdn.net/u013401853/article/details/53930932


应用程序通过socket系统调用和远程主机进行通讯,每一个socket都有一个读写缓冲区。读缓冲区保存了远程主机发送过来的数据,如果缓冲区已满,则数据会被丢弃,写缓冲期保存了要发送到远程主机的数据,如果写缓冲区已慢,则系统的应用程序在写入数据时会阻塞。可知,缓冲区是有大小的。
   BDP 给出了一种简单的方法来计算理论上最优的 TCP socket 缓冲区大小(其中保存了排队等待传输和等待应用程序接收的数据)。如果缓冲区太小,那么 TCP 窗口就不能完全打开,这会对性能造成限制。如果缓冲区太大,那么宝贵的内存资源就会造成浪费。如果您设置的缓冲区大小正好合适,那么就可以完全利用可用的带宽
BDP = 带宽 * 延迟 (单位: 字节)
    带宽*延时/8*2^20 = ***B
    带宽: Mebibites     延时:s (RTT)

注意:调整tcp前,必须调整core,对于tcp,udp来说不能超出core的限制

默认值:
net.core.rmem_max = 131071128K
net.core.rmem_default = 124928
net.core.wmem_max = 131071
net.core.wmem_default = 124928

net.ipv4.tcp_rmem = 4096873802691072
net.ipv4.tcp_wmem = 4096163842691072

示例: 
带宽:1.5M   100M
延时:500ms  3000ms
1.5 * 0.5 / 8 * 2^20         ======= net.ipv4.tcp_wmem
100 * 3 / 8 * 2^20           ======= net.ipv4.tcp_wmem


一般设置socket的sendbuf和recvbuf等于带宽时延乘积。