我是靠谱客的博主 聪明乌龟,最近开发中收集的这篇文章主要介绍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:%dn", d1_var, i, delta1);
	}
}

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

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

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

最后

以上就是聪明乌龟为你收集整理的TCP 拥塞识别的全部内容,希望文章能够帮你解决TCP 拥塞识别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部