假定你在浏览器上点击一个 URL,但这个 URL 的 IP 地址以前并没有缓存在本地主机上。 因此需要用 DNS 自动查找和解析。假定要解析到所要找的 URL 的 IP 地址共经过 n 个 DNS 服务 器,所经过的时间分别是 RTT1,RTT2,……,RTTn。从本地主机到这个网页所在主机的往返 时间是 RTTw。假定同一台服务器的 HTML 文件中又链接了三个非常小的对象。若忽略这些对 象的发送时间,试分别就以下三种 HTTP 方式计算客户点击读取这些对象所需的时间。
(1)没有并行 TCP 连接的非持续 HTTP;
(2)使用并行 TCP 连接的非持续 HTTP;
(3)流水线方式的持续 HTTP。
答案:
- (1) RTT1+RTT2+…+RTTn+8RTTw
- (2) RTT1+RTT2+…+RTTn+4RTTw
- (3) RTT1+RTT2+…+RTTn+3RTTw
解释:
RTT1+…+RTTn这个好理解,无论是本地DNS服务器的递归查询还是DNS服务器之间的迭代查询,最终都会消耗RTT。
剩下的时间都花在了先下载一个HTML页面,再下载网页内嵌的对象的时间。注意,对象一定在下载完HTML页面之后才能开始下载。要下载一个http文件,要花2个RTT,一个是建立TCP的一个RTT,一个下载http文件的RTT。
对于完全串行的方式,先下载HTML要花2RTT,再下载一个对象要2RTT,再下载第二个对象要2RTT,再下载第三个对象要2RTT,共8RTT。
对于并行、不持续的方式,先下载一个HTML要2RTT,此时获得了三个对象的地址,可以下载它们了,他们三个可以并行,三个共用一次时间,2RTT,共4RTT。
对于流水线、持续的方式,共用同一个TCP连接,不必多次创建TCP连接,则先下载一个HTML要2RTT,此时已经建立了TCP连接。再用这个TCP连接并行下载三个对象,用1RTT,共3RTT。
如下是http使用等待、持续和流水线的示意图:
