标签:
TCP是一个连续不断的涓涓细流或者滚滚长江,但这只是理想情况!经过诸多中间网络设备,最终一个TCP流到达接收端的时候,将可能不再保持一个流的形式,而变成了一阵阵的突发...这些突发产生的ACK反过来反馈到发送端,进而对发送端的发送时序产生影响,也就是说对发送端的数据流进行整形,这真是一个典型的涡轮增压反馈系统,根本不是通常认为的那样不可控或者说另一个极端,仅仅是端到端!想驾驭它其实不是那么难,如果有人说仅仅可以靠感觉就可以驾驭它,倒不如说它本来就是1+1=2那般有条有理。如果觉得TCP的行为很难理解,可能只是因为你在试图破坏网络的规则,网络的规则只有两点:效率和公平。真的,杀一个人很容易,却代价高昂,与人相处,很难,却可以细水长流终一生!如果你读过Linux的TCP协议实现的代码,我想你应该知道,收到ACK后,可发送的数据量大于一个可承受突发后将不会执行拥塞避免逻辑,由于窗口是缓慢增加的,一旦增加到超过一个突发的节奏,就会马上被拉回来,拉回到in flight的位置。如果你没读过,就看看RFC,然后...算了,请记住这个结论。我本来想把这个反馈系统按照控制论的机理画个图出来,但还是觉得多此一举,还是直接看数据包吧。且看下节。
可是缩放以后近看,它可能是这个样子:
或者说是这个样子:
然后再结合不发送数据的那一部分:
具体可以看一下流量整形的细节,本文不再描述。最简单的就是统一设置一个延时,由于TCP是由慢启动开始的,因此一开始数据量只是初始窗口大小的一小段,然后等待这段数据的ACK,再发送另外的段,这种阵发模式将会由于统一延时而被保持下去,即便是数据已经塞满了网络,也还是会保持下去。事实上由于统一延时也是一堵时间墙,因此仅仅设置一个统一的延时,并无法真正模拟“长肥管道”,虽然长肥管道里的数据包也是统一延时的,但这些延时是时间展开的,tc设置的统一延时则是时间阻滞的,因此,设置统一延时后,除了你会看到窗口大增之外,和长肥管道一点也不像。
标签:
原文地址:http://blog.csdn.net/dog250/article/details/51704521