舊事重提,今天用微分方程的數值解觀測 tcp aimd 窗口值。
設系統 AI,MD 參數分別為 a = 1,b = 0.5,丟包率由 buffer 大小,red 配置以及線路誤碼率共同決定,設為 p,窗口為 W,則有:
d W d t = ( 1 ? p ) ? a W ? p ? b ? W \dfrac{dW}{dt}=(1-p)*\dfrac{a}{W}-p*b*W dtdW?=(1?p)?Wa??p?b?W
方程第一項為 AI,第二項為 MD。若窗口收斂到穩定點,則 dW / dt = 0,于是:
( 1 ? p ) ? a W = p ? b ? W (1-p)*\dfrac{a}{W}=p*b*W (1?p)?Wa?=p?b?W
解得:
W = 1 ? p 0.5 ? p W=\sqrt{\dfrac{1-p}{0.5*p}} W=0.5?p1?p??
這就是結果,嘗試獲得微分方程的解析解也無妨。如果用數值解驗證一下,遞推式為:
# 不同丟包率(2 倍關系)的 cwnd
x[n] = x[n-1] + dt * ((1-c)*a/x[n-1] - c*b*x[n-1])
y[n] = y[n-1] + dt * ((1-2*c)*a/y[n-1] - 2*c*b*y[n-1])
結果如下:
這就是 tcp aimd 的 cwnd 與丟包率的關系方程。
浙江溫州皮鞋濕,下雨進水不會胖。