计算BDP值和wnd值

背景

优化网络,需要调节wnd窗口值的最佳值.但是找来找去却没有特别好理解的算法.给出的示例和自己计算的结果完整对不上.爆肝了几晚,终于把​​BDP​​​和​​窗口值​​​的计算方法搞明白了,配之后网络效率确实得到了提升.
发此博文希望能帮助小白理解计算过程,帮助到有需要的人.



BDP值算法

参考: ​​https://docs.oracle.com/cd/E56344_01/html/E53803/gnkor.html​​​ BDP简介:
带宽延迟乘积 (bandwidth delay product, BDP)

计算方法:
​​​Bandwidth-Delay Product​​​ = ​​delay​​​ * ​​bandwidth​

​带宽延迟乘积​​​ = ​​延时​​​ * ​​带宽​

​BDP​​​ = ​​宽带_字节_B​​​ * ​​延时_s​



sndwnd和rcvwnd算法

​sndwnd​​​是发送窗口,对应上传;
​​​rcvwnd​​是接收窗口,对应下载.

计算方法:
​​​窗口值_字节_B​​​ = ​​BDP​​​ / ​​MTU​



使用python计算窗口值

即使给出计算方法,第一次算也会绕的头晕,干脆直接写了python脚本,有需要的拿去直接计算吧.我个人认为注释写的还算清楚,希望需要的人能看懂哈.

"""
参考公式:
BDP = 宽带_字节_B * 延时_s
窗口值_字节_B = BDP / MTU
"""

def wnd(带宽_兆比特_Mbit, 延时_s, MTU):
"""
# 计算窗口值_字节_B
:param 带宽_兆比特_Mbit: 传入带宽值(小b)
:param 延时_s: 传入延时(s)
:param MTU: 掺入mtu值(一般是1400)
:return: 返回计算出的窗口值_字节_B
"""
# 128 = 1024 / 8 # kBtye换算Mbit的值是128
# 宽带_千字节_kBtye = 带宽_兆比特_Mbit * 128
宽带_千字节_kBtye = 带宽_兆比特_Mbit * 1024 / 8

# 宽带_字节_B 和 宽带_千字节_kBtye 的换算单位是1024
宽带_字节_B = 宽带_千字节_kBtye * 1024
BDP = 宽带_字节_B * 延时_s
# 窗口值_字节_B的单位是字节_B
窗口值_字节_B = BDP / MTU
print(f"BDP值是:{int(BDP)}")
print(f"窗口值是:{int(窗口值_字节_B)}")


if __name__ == '__main__':
带宽_兆比特_Mbit = 500
延时_s = 0.125
MTU = 1500
# 打印窗口值_字节_B
wnd(带宽_兆比特_Mbit, 延时_s, MTU)