https://m./i6849341986844082692/?app=news_article×tamp=1594807594&use_new_style=1&req_id=2020071518063401013105707729026499&group_id=6849341986844082692 大学计算机专业必修专业课之一,计算机网络不知道你学的怎么样,反正小编是学的一个脑子两个大,差一点就怀疑人生了,但是幸好,也算压分及格,在实习的时候找工作也没有造成什么太大的困难,但是,随着工作年限的增长,接触的东西也越来越多,越发觉得,网络的重要性,尤其是现在比较流行的互联网编程,网络的相关基础知识,更是成为面试的过程中比较重要的一部分(在某些游戏部门,相信大家都明白)。这个时候,在不学习,一定是不行的了 因此,闲来无事,整理了一下自己知识体系中的关于网络的部分知识,形成一套思维导图 最近总结了66条计算机网络相关的知识点,大家一起看一下吧: 1.比较http 0.9和http 1.0
http0.9流程:
http1.0流程:
因为不足缺陷,就有了http1.1。 2.关于http1.1以及http2嗯http1.1中浏览器再也不用为每个请求重新发起TCP连接了,增加内容有:缓存相关首部的扩展,OPTIONS方法,Upgrade首部,Range请求,压缩和传输编码,管道化等。但还是满足不了现在的web发展需求,so,就有了http.2版本。 http2解决了(管道化特性可以让客户端一次发送所有的请求,但是有些问题阻碍了管道化的发展,即使某个请求花了很长时间,那么队头阻塞会影响其他请求。)http中的队头阻塞问题。 使用http2会比http1.1在使用TCP时,用户体验的感知多数延迟的效果有了量化的改善,以及提升了TCP连接的利用率(并行的实现机制不依赖与服务器建立多个连接) 所以需要学习http2,了解更多更多内容来掌握计算机网络。 对于http2,你可以来运行一个http2的服务器,获取并安装一个http2的web服务器,下载并安装一张TLS证书,让浏览器和服务器通过http2来连接。(从数字证书认证机构申请一张证书)。 了解http2的协议,先让我们了解一下web页面的请求,就是用户在浏览器中呈现的效果,发生了些什么呢?
把待请求URL放入队列,判断URL是否已在请求队列,否的话就结束,是的话就判断请求域名是否DNS缓存中,没有的话就解析域名,有的话就到指定域名的TCP连接是否开启,没有的话就开启TCP连接,进行HTTPS请求,初始化并完成TLS协议握手,向页面对应的URL发送请求。
接收请求,判断是否HTML页面,是就解析HTML,对页面引用资源排优先级,添加引用资源到请求队列。(如果页面上的关键资源已经接收到,就开始渲染页面),判断是否有还要继续接收资源,继续解析渲染,直到结束。 3.HTTP的几种请求方法用途第一种GET方法:发送一个请求来获取服务器上的某一些资源。 第二种POST方法:向URL指定的资源提交数据或附加新的数据。 第三种PUT方法:跟POST方法一样,可以向服务器提交数据,但是它们之间也所有不同,PUT指定了资源在服务器的位置,而POST没有哦。 第四种HEAD方法:指请求页面的首部。 第五种DELETE方法:删除服务器上的某资源。 第六种OPTIONS方法:它用于获取当前URL所支持的方法,如果请求成功,在Allow的头包含类似GET,POST等的信息。 第七种TARCE方法:用于激发一个远程的,应用层的请求消息回路。 第八种CONNECT方法:把请求连接转换到TCP/TP通道。 4.从浏览器地址栏输入url到显示页面的步骤简单说说,浏览器根据请求的url交给dns域名解析,查找真正的ip地址,向服务器发起请求;服务器交给后台处理后,返回数据,浏览器会接收到文件数据,比如,html,js,css,图像等;然后浏览器会对加载到的资源进行语法解析,建立相应的内部数据结构;载入解析到的资源文件,渲染页面,完成显示页面效果。 能不够清楚明吗吗吗 那就再次详细一下,咳咳,从浏览器接收url,开始进行网络请求线程,发出一个完整的HTTP请求,从服务器端接收请求到对应的后台接收到请求,然后是后台和前台的http交互;其中的缓存问题(http的缓存),浏览器接收到http数据包后的解析流程,css的可视化格式模型,js引擎解析过程等;其他呈现页面效果。 :这里就需要你对浏览器内核的理解:其中主要的渲染引擎和JS引擎,这里了解一下你对浏览器内核的理解。
5.web的性能优化其中里面的性能关键:
延迟:指IP数据包从一个网络端点到另一个网络端点所花费的时间。(所花费时间在于往返时间时间是延迟的时间的两倍) 带宽:只要带宽没有饱和,两个网络端点的连接会一次处理尽可能多的数据量(所以带宽可能会成为性能的瓶颈) 建立连接时间:在客户端和服务器之间建立连接往返数据(三次握手) TCP三次握手过程:客户端向服务器发起一个SYN包,服务器端返回对应的SYN的ACK响应以及新的SYN包,然后客户端返回对应的ACK。(在客户端和服务器之间建立正常的TCP网络连接时,客户端首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收了这个消息,最后客户端与与与CK消息响应。)
详解三次握手: 第一次握手,建立连接时,客户端发送SYN包到服务器,并进入SYN_SENT状态,等待服务器确认,其中SYN就是同步序列编号。 第二次握手,服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即是SYN+ACK包,此时服务器进入SYN_RECV状态。 第三次握手,客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
TLS协商时间(TLS会造成额外的往返传输)
除了网络,还有页面内容本身或服务器性能,如首字节时间TTFB,内容下载时间,开始渲染时间,文档加载完成的时间等。
5.1web性能优化技术(减少客户端网络延迟和优化页面渲染性能来提升web性能)优化技术:
6. http1.1
对于http1的问题,迎来了http2。其中http1的问题: 队头阻塞,大多数情况下,浏览器会希望同时获取许多资源,但http1未提供机制来同时请求这些资源,如果仅是使用一个连接,需要发起请求,等待响应,然后才能发起下一个请求。 在http1中要给特性为管道化,可以允许一次发送一组请求,但是需要按照发送顺序依次接收响应。所以在请求应答过程中,如发生什么情况,剩下的工作都会被阻塞,这就是“队头阻塞”(阻塞在那次请求应答发生错误),阻碍网络传输和web页面的渲染,指导失去响应。 低效的TCP利用,TCP协议作为最可靠的协议之一,其核心是拥塞窗口。
拥塞窗口指在接收方确认数据包之前,发送方可以发送的TCP包的数据。(如拥塞窗口指定为1的情况,那么发送方就发个个个个数据包后,只有接收方确认了那个发出的数据包,才能发送下一个) 拥塞控制能防止过多的数据注入到网络中,用于避免网络过载,TCP中可以通过慢启动探索当前连接对应拥塞窗口的合适大小。即发送者发送数据的时候并非一开始注入大量数据到网络中,而是发送一个数据包进行测试,当得到确认回复后,额外发送一个未确认包。 这意味着得到一个确认回复,可以发送两个数据包,得到两个确认回复,可以发送四个数据包,以几何形式增长很快到达协议规定的拥塞窗口大小(发包数上限),这时候连接进入拥塞避免阶段,这种机制需要往返几次才能得知最佳拥塞窗口大小,但往返几次所需的时间成本不可忽略。
臃肿的消息首部,HTTP/1.1能压缩请求内容,但是消息首部却不能压缩。它可能占据请求的绝大部分(也可能是全部)也是比较常见了。(在这里如果能压缩请求首部,把请求变得更小,就能够缓解带宽压力了,降低系统的总负载) 受限的优先级设置,即如果浏览器针对指定域名开启多个socket请求,若web页面某些资源会比另外一些资源重要,会加重资源的排队效应,会延迟请求其他的资源,优先级高的资源先获取,优先级低的资源会在资源高的资源处理完成,(在处理过程中,浏览器不会发起新的资源请求)等待高的完成后再发起请求,(这就会让总的页面下载时间延长)。
小结:HTTP1.1慢启动影响资源首次加载速度,TCP建立连接后,会开始请求传输,开始比较慢,然后不断加快,为了防止出现网络拥堵,会让页面的首次渲染时间变长。开始多个tcp,如出现网络下降,无法识别资源的优先级,会静态现竞静态题。 7.如何进行网站性能优化
8.http状态码以及含义
9.http-数据压缩数据压缩,在浏览器中发送请求时会带着Content-Encoding: gzip是里面浏览器浏览器浏览器持的压缩格式列表,有多种如,gzip,deflate,br等。这样服务器就可以从中选择一个压缩算法,放进Content-Encoding响应头里,再把原数据压缩后发给浏览器。 10.http-分块传输分块传输,就是将传输的文件分解成多个小块,然后分发给浏览器,浏览器收到后再重新组装复原。 每个分开包含两个部分,分块长度和分块数据(长度头和数据块),长度头以CRLF结尾的一行明文,数据块紧跟在长度头后面,也是用CRLF结尾,最后用一个长度为0的块表示结束。 在响应报文里用头字段Transfer-Encoding:chunked表示报文里的body部分不是一次性发送过来的,而是分成了许多块逐个发送的。 在Transfer-Encoding:chunked和Content-Length中,这两个字段是互斥的。
Content-Length: 299 11.http-范围请求断点续传
Accept-Ranges:服务器使用http响应头Accept-Ranges标识自身支持范围请求,字段的具体值用于定义范围请求的单位。 语法 Accept-Ranges: bytes,范围请求的单位是 bytes (字节)Accept-Ranges: none,不支持任何范围请求单位 范围请求时用于不需要全部数据,只需要其中的部分请求时,可以使用范围请求,允许客户端在请求头里使用专用字段来表示只获取文件的一部分。 Range的格式,请求头Range是HTTP范围请求的专用字段,格式是“bytes=x-y”,以字节为单位的数据范围。
示例:
上图表示服务器收到Range字段后,检测范围合法性,范围越界,就会返回状态码416,如你的文件只有1000个字节,但请求范围在20000-3000,就会导致这个状态码的出现。 如果成功读取文件,范围正确,返回状态码“206”。服务器要添加一个响应头字段Content-Range,告诉片段的实际偏移量和资源的总大小。 最后是发送数据,直接把片段用TCP发给客户端,一个范围请求就算是处理完了。
Content-Range: bytes 0-4395719/4395720 12.http-多段数据多端数据,就是在Range头里使用多个“x-y',一次性获取多个片段数据。使用一种特殊的MIME类型:“multipart/byteranges”,用来表示响应报文包含了多个范围时多种用。多多种围请求 响应会在头部 Content-Type 表明 multipart-byteranges。 多段数据图:分隔标记boundary来区分不同的分段 13.说一说cookies,sessionStorage 和 localStorage 的区别?
cookie的数据大小不能超过4k;sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或者更大。
14.为什么说利用多个域名来存储网站资源会更有效?因为CDN缓存更方便;突破浏览器并发限制;节约cookie带宽;节约的的名的的接数,优化页面响应速度;的止不必要得的全性问题。 15.http2.0的内容http2是超文本传输协议的第二版,相比http1协议的文本传输格式,http2是以二进制的格式进行数据传输的,具有更小的传输体积以及负载。 http2.0分层,分帧层(http2多路复用能力的核心部分),数据或http层(包含传统上被认为是 HTTP 及其关联数据的部分)。 HTTP2.0:
多路复用的实现: 在单个域名下仍可以建立一个TCP管道,使用一个TCP长连接,下载整个资源页面,只需要一次慢启动,静态且避免了竞静态浏览器发起请求,分帧层会对每个请求进行分割,将同一个请求的分割块打上相同的id编号,然后通过协议栈将所有的分割体发送给服务器,然后通过服务器的分帧层根据id编号进行请求组装,服务器的分帧层将回应数据分割按同一个回应体进行ID分割回应给客户端,客户端拼装回应。 对于http2中的帧(frame),http1不是基于帧(frame)的,是文本分隔的。 GET/HTTP/1.1 <crlf> 这样,对于http1的请求或者是响应可能有的问题:
HTTP/1 的请求和响应报文,是由起始行、首部和正文组成,换行符分隔;HTTP/2是将请求和响应数据分割成更小的帧,采用二进制编码,易于解析的。 参考图片:
帧头: 16.http2-幕后http2作为一个二进制协议,拥有包含轻量型,安全和快速在内的所有优势,保留了原始的http协议语义,对于http2更改了在系统之间传输数据的方式。
HTTP/2 连接的拓扑结构(展示了一个用于建立多个流的连接) 在流 1 中,发送了一条请求消息,并返回了相应的响应消息。 HTTP/2 帧结构
最后 |
|
来自: 山峰云绕 > 《IP地址网络原理》