TCP的发包机制
TCP的发包一般是由收到TCP ACK触发的,没有收到TCP ACK时TCP发送端一般是不会发包的(超时重传的情况除外)。
下面示意图就是在描述:没有收到接收端发来的TCP ACK包时,发送端停止发送数据包。
左边是接收端,右边是发送端,-号表示发送端待发的数据包,=号是TCP ACK。
| ---- ----
|假设有8个包要发送
---- | ----
=|
后面4个等待ack再继续发送
同时上传和下载引发的问题
在同时进行上传和下载时,如果不提高TCP ACK的优先权,下载数据的TCP ACK会排在上传数据的后面而被延迟送出,从而造成下载吞吐量低于单独下载时的吞吐量。如下,-为下载数据,*为下上传据,=为ack,很可能ack会一直排在上传数据的后面,导致下载一致等待ack而时不时阻塞| ---- ----
=*******|
怎么解决呢?
有一个软件cFosSpeed,可以提高TCP ACK的发送优先权,启动这个软件后,可以很明显的发现:ACK可以“插队”在上传数据之间。而且插队的位置,是在下一个要发送数据之前。也就是说,数据之间产生了“优先权”的机制,所以下载数据可以不受上传数据的影响,继续发送数据给接收端。
| ---- ----
****=****|