TCP 拥塞识别

先看下面文章:
TCP 时间戳妙用
用时间戳优化 TCP 实践

文中的“算法”太简陋以至于不能称之为算法,所以我加了引号。

但态度是鲜明的。

新注入一个信息,拥塞判断肯定会更精确,这绝对毋庸置疑。质疑者不是在怼我,而是怼克劳德香农。

我已可排除 ACK 半程抖动影响,现在只考虑 Data 半程。观察 T = ACK.tsvar - ACK.tsecr 的方差 Var。

几乎可以肯定,当下面的条件满足时,一定是随机丢包而不是发生了拥塞:

V a r < δ 且 T e n d − T s t a r t < α 且 ( T m i d − T s t a r t ) − ( T e n d − T m i d ) < β Var < \delta 且 T_{end}-T_{start} < \alpha 且 (T_{mid}-T_{start}) -(T_{end}-T_{mid} )<\beta Var<δTendTstart<α(TmidTstart)(TendTmid)<β

其中 T m i d T_{mid} Tmid随机间隔采样即可。我这只是一个例子而已,不算数。

时间戳差值的抖动要比绝对值更重要,也更真实。现网环境是不可能出现等差数列延时的,若差值抖动持续为0,几乎一定是没有发生拥塞。

虽无法精确识别真拥塞,但却可排除假拥塞,辅助此手段,当 CUBIC 检测到丢包时,假拥塞便不必降窗了。

AQM 很复杂,不能观察排队时间单调递增而判定发生了拥塞,但可训练下面的数据:

int main(int argc, char **argv)
{
	static int iter = 0;
	int loop = atoi(argv[1]), i;
	static unsigned long d1_var = 0;
	static unsigned long d1_last = 0;
	long delta1 = 0;
	int a = rand() % 10;

	for (i = 0; i < loop; i += a) {
		a = rand() % 10;
		if (d1_last == 0)
			d1_last = i;
		if (i > d1_last)
			delta1 = i - d1_last;
		else
			delta1 = d1_last - i;
		d1_last = i;
		d1_var = (d1_var*1000*4/10 + delta1*1000*6/10)/1000;

		printf("%d  %d  delta:%d\n", d1_var, i, delta1);
	}
}

我的意思不是说这是个算法或者这个算法多厉害,我的意思是,这可以辅助 CUBIC 更加精确判定拥塞,从而影响决策。

有个现象,周三下午三点找人,不回应,周六那人回复“不好意思,周三到周五一直忙,现在空了,请问什么事”…我 X ,你空了,我休假耶… 导数的导数,方差的方差,经理的皮鞋,经理的牵挂。

浙江温州皮鞋湿,下雨进水不会胖。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值