使用TCP同时进行上传和下载的吞吐量为什么比单独进行时要低
2017-08-21 15:01
309 查看
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可以“插队”在上传数据之间。而且插队的位置,是在下一个要发送数据之前。也就是说,数据之间产生了“优先权”的机制,所以下载数据可以不受上传数据的影响,继续发送数据给接收端。| ---- ----
****=****|
相关文章推荐
- 使用Loadrunner进行文件的上传和下载
- 使用wininet进行FTP文件上传和下载
- win7使用pscp与linux服务器进行文件上传下载
- TCP/IP模型的一个简单解释(使用telnet进行文本传输,同时用wireshark抓包)
- 使用Struts2框架进行文件的上传与下载
- JSP中使用jspsmartupload组件进行文件的上传和下载
- 使用API进行FTP文件上传和下载
- springmvc Excel文件上传,使用ajaxSubmit方法进行文件上传,使用弹出层弹出一个框(jquery layer),点击进行下载
- linux下如何使用sftp命令进行文件上传和下载
- linux下如何使用sftp命令进行文件上传和下载
- 使用ssh进行远程连接以及远程跳板以及scp远程上传下载文件说明
- Linux使用scp命令进行文件远程的上传或下载
- Java:使用HttpClient进行POST和GET请求以及文件上传和下载
- 使用sun的FtpClient类进行上传下载
- 使用jspSmartUpload组件进行文件上传、下载
- linux 下借助CRT 使用sz rz 进行上传和下载文件
- Linux平台使用lftp进行上传下载
- 关于使用jspsmartupload.jar进行文件的上传与下载
- 搞定使用jspsmartupload 组件进行上传和下载出现的乱码问题。
- 如何使用window自带的远程桌面连接进行远程文件的上传和下载