开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情
在学校计算机网络的时候,经常遇到的问题就是,这个ip怎么求啊,怎么计算响应时间啊?等等问题,因为快期末了,好吧,其实是我要考计网了,所以写一些小文章来记录记录吧。
这个是今天的问题
首先提取关键词:点击超连接访问某个页面,ip没有缓存,页面有八个小图,域名解析一次记作RTTD,请求对象一次往返时间RTTh。
那么说一点题外话:当我们点击了超连接后,浏览器干了啥?
最简单的理解是基于客户端服务端模式的:
即:点击超链接后,向服务器发送请求,提高服务器传来后,再把响应返回客户端。
那么学过springmvc我们会对他有新的理解:
即:先用户点击请求,发起http request,提交到我们的前端控制器;然后前端控制器请求我们处理器映射,返回执行链;前端控制器,把执行链的头部传给处理器,处理器按照执行链的头部信息找到我们需要的controller,controller处理完毕后,把modelandview对象返回给视图解析器,提高视图解析得到我们view界面,通过response传递给浏览器。
唔看上去有点麻烦
从计算机网络角度:
不同http版本区别
http1.0 每次请求一个文档,需要两倍RTT开销,并且每次请求都需要重新建立连接
在1.0协议中,任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。
其次,除了GET命令,还引入了POST命令和HEAD命令,还有PUT、PATCH、 OPTIONS、DELETE命令。
HTTP请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。
http1.1 连接可以持续使用,分两类,流水形和非流水。流水:客户端访问所有对象只需要一个Rtt;非流水:每次访问对象需要一个Rtt。
头信息是二进制,数据可以是文本,也可以是二进制。
优点有:持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码。
允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为"队头堵塞"
http2.0 一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"。
举例来说,在一个TCP连接里面,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。
“语义”层不做改动,与HTTP/1完全一致(即RFC7231)。比如请求方法、URI、状态码、头字段等概念都保留不变,这样就消除了再学习的成本,基于HTTP的上层应用也不需要做任何修改,可以无缝转换到HTTP/2。
对于HTTP的头部header的字段(user-agent、charset等)进行压缩。
DNS查询
DNS查询有两种方式:迭代形和递归形
迭代
递归:
题目分析
问1:dns查询最快时间和最慢时间
最快:那就是在本地浏览器有,那么需要一个Rttd,最慢就是在权限域名服务器里面,需要5个Rttd
问2:http1.0获取,需要 连接+2文档数量+释放 =Rtth+28Rtth+Rtth
问3:5个并行,http1.0:并行每次可以处理无关,花费Rtth+2*Rtth+Rtth,一共8个,需要两趟
问4:非流水1.1 客户端访问所有对象只需要一个Rtt 和 流水1.1 每次访问对象需要一个Rtt。
答案: