使用 HTTP 协议,并行下载快还是串行下载快?
firefox吧
全部回复
仅看楼主
level 13
709922234 楼主
我如果把带宽想象成水管,那么水管里面不管是有多个流(并下下载)还是一个流,下载的总时间不是一样吗?
2019年01月06日 07点01分 1
level 14
你管子再粗,水龙头就一滴一滴的给你放水也没用,所以要开多个水龙头
2019年01月06日 07点01分 2
忘了说了,服务器是我的,没有限速
2019年01月06日 09点01分
level 12
你管子粗没用,现在网站都给你连个小水管
2019年01月06日 07点01分 3
忘了说了,服务器是我的,没有限速
2019年01月06日 09点01分
@709922234 你要的资源所在的服务器可不是你的
2019年01月06日 09点01分
level 13
如果下载的数据量大,一般是多线程/并发下载快,无论你的服务器是否限速。
http协议基于TCP协议,要解释论题,首先你得理解TCP协议的流程:
1、TCP协议是面向数据流/stream的传输协议,会自动将你发送的数据分割为很多【小数据包】,以自动协调防火墙、网卡、路由器、物理线路对最大数据包的限制;
2、为了保证数据的可靠性,每发送一次【TCP窗口】大小的数据包群后,接收端会对这部分数据包进行排序和检查,发送端必须等待接收端的确认数据无误后,才能继续发送;
3、如上图所示,除了最初的三次握手和四次挥手外,中间的传输过程实则包含很多次的【DATA包/ACK包】的相互通讯;
4、比如你用单线程下载一个1GB的文件,也许其在TCP层面就包含了10000次的这种相互通讯,如果单次网络通讯的延时为30ms,那么你的下载就会由于网络延时而被浪费300s;
5、反之,如果你开了10条线程来下载,那么理论上网络延时就会被削减到30s。
注:关于TCP窗口大小如何确定和优化,有兴趣可以百度搜索【TCP Window Size】。
2019年01月09日 14点01分 4
TCP 窗口中多个数据包是动态变化的呀。好像并不是说一个 TCP 窗口内的所有数据包得到确认才换啊
2019年01月24日 15点01分
@709922234 你说得对。在极其理想的情况下,DATA包的传输确实能够掩盖【回传ACK包】导致的额外延时。假设网络带宽20Mbps=2.5MB/s,单向延时30ms,那么最优TCP窗口大小=2.5*0.03*2=0.15MB≈150KB:
2019年01月25日 02点01分
@709922234 当你先发送1/2窗口大小的DATA包(0KB-75KB)到对端后,经历30ms;对端开始回传1号ACK包,此时你继续发送窗口中剩余的部分(76KB-150KB),发送完毕后又经历30ms,1号ACK包也回传到你这里;ACK包确认掉多少字节,窗口才能向后滑动多少字节。
2019年01月25日 02点01分
level 11
最好是并行,数据丢失严重,单线程搞个毛
2019年01月09日 15点01分 5
1