前言
计算机网络常识,是面试常考的内容,在理论工作中也经常会波及到。
最近总结了 66 条计算机网络相干的知识点,大家一起看一下吧:
1. 比拟 http 0.9 和 http 1.0????
- http0.9 只是一个简略的协定,只有一个 GET 办法,没有首部,指标用来获取 HTML。
- HTTP1.0 协定大量内容:首部,响应码,重定向,谬误,条件申请,内容编码等。
http0.9 流程:
客户端,构建申请,通过 DNS 查问 IP 地址,三次握手建设 TCP 连贯,客户端发动申请,服务器响应,四次挥手,断开 TCP 连贯。(与服务器只有一个来回)
http1.0 流程:
客户端,构建申请,通过 DNS 查问 IP 地址,三次握手建设 TCP 连贯,客户端发动申请,服务器响应,四次挥手,断开 TCP 连贯。(与服务器有两个来回)
因为有余缺点,就有了 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 引擎,这里理解一下你对浏览器内核的了解。
- 渲染引擎,是负责获得网页的内容,整顿信息,以及计算网页的显示方式,而后输入到显示器上。
- JS 引擎是用于解析和执行 javascript 来实现网页的动态效果。
浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的成果也不雷同。其实最开始渲染引擎和 JS 引擎是没有辨别明确的,不过起初 JS 引擎越来越独立,so,内核就偏向于渲染引擎。
对于资源申请 / 获取, 资源响应 / 页面渲染,会给网络带宽和设施资源带来压力,这个时候就会思考到 web 的性能优化。
5.web 的性能优化????
其中外面的 性能要害:
什么是数据包
数据包(IP 数据包),指封装在固定构造的一系列字节,它定义了数据包的长度,传输的细节,以及其余与 TCP 相干的信息。
提早:指 IP 数据包从一个网络端点到另一个网络端点所破费的工夫。(所破费工夫在于往返时延,是提早的工夫的两倍)
带宽:只有带宽没有饱和,两个网络端点的连贯会一次解决尽可能多的数据量(所以带宽可能会成为性能的瓶颈)
建设连接时间:在客户端和服务器之间建设连贯往返数据(三次握手)
TCP 三次握手过程:客户端向服务器发动一个 SYN 包,服务器端返回对应的 SYN 的 ACK 响应以及新的 SYN 包,而后客户端返回对应的 ACK。(在客户端和服务器之间建设失常的 TCP 网络连接时,客户端首先收回一个 SYN 音讯,服务器应用 SYN+ACK 应答示意接管了这个音讯,最初客户端再以 ACK 音讯响应。)
SYN 是同步序列编号,是 TCP/IP 建设连贯时应用的握手信息。
ACK 是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。示意发来的数据已确认接管无误。在 TCP/IP 协定中,如果接管方胜利的接管到数据,那么会回复一个 ACK 数据。通过 ACK 信号有本人固定的格局,长度大小,由接管方回复给发送方。
详解三次握手:
第一次握手,建设连贯时,客户端发送 SYN 包到服务器,并进入 SYN_SENT 状态,期待服务器确认,其中 SYN 就是同步序列编号。
第二次握手,服务器收到 SYN 包,必须确认客户的 SYN,同时本人也发送一个 SYN 包,即是 SYN+ACK 包,此时服务器进入 SYN_RECV 状态。
第三次握手,客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK,此包发送结束,客户端和服务器进入 ESTABLISHED(TCP 连贯胜利)状态,实现三次握手。
实现三次握手,客户端与服务器开始传送数据。
TLS 协商工夫(TLS 会造成额定的往返传输)
- 客户端发动 https 连贯,须要进行传输层平安协定协商
- TLS 用来取代安全套接层 SSL
除了网络,还有 页面内容自身或服务器性能,如首字节工夫 TTFB,内容下载工夫,开始渲染工夫,文档加载实现的工夫等。
那么什么是 TTFB,它是指客户端从开始定位到 web 页面,至接管到主体页面响应的第一字节所消耗的工夫。它是测量:从浏览器发动申请至收到其第一字节之间的耗时。
内容下载工夫是等同于被申请资源的最初字节达到工夫。
开始渲染工夫,从客户看到空白页面的时长。
5.1web 性能优化技术(缩小客户端网络提早和优化页面渲染性能来晋升 web 性能)
优化技术:
- DNS 查问优化
- 客户端缓存
- 优化 TCP 连贯
- 防止重定向
- 网络边缘的缓存
- 条件缓存
- 压缩和代码极简化
- 图片优化
6. http1.1????
- 改良长久连贯和 CDN 域名的分片机制
- 不成熟的 http 管道化
- 提供虚拟主机反对
- 对动静生成的内容完满反对
- 引入 cookie 以及平安机制
对于 http1 的问题,迎来了 http2。其中 http1 的问题:
队头阻塞,大多数状况下,浏览器会心愿同时获取许多资源,但 http1 未提供机制来同时申请这些资源,如果仅是应用一个连贯,须要发动申请,期待响应,而后能力发动下一个申请。
在 http1 中要给个性为管道化,能够容许一次发送一组申请,然而须要依照发送程序顺次接管响应。所以在申请应答过程中,如产生什么状况,剩下的工作都会被阻塞,这就是“队头阻塞”(阻塞在那次申请应答产生谬误),妨碍网络传输和 web 页面的渲染,领导失去响应。
低效的 TCP 利用,TCP 协定作为最牢靠的协定之一,其外围是拥塞窗口。
拥塞窗口,是卫星通信在因特网中避免通信拥塞的一种措施,它是在发端采纳了一种“拥塞防止”算法和“慢速启动”算法相结合的机制。“拥塞窗口”就是“拥塞防止”的窗口,它是一个装在发送端的可滑动窗口,窗口的大小是不超过接收端确认告诉的窗口。
拥塞窗口指在接管方确认数据包之前,发送方能够发送的 TCP 包的数据。(如拥塞窗口指定为 1 的状况,那么发送方就收回 1 哥数据包之后,只有接管方确认了那个收回的数据包,能力发送下一个)
拥塞管制能避免过多的数据注入到网络中,用于防止网络过载,TCP 中能够通过 慢启动 摸索以后连贯对应拥塞窗口的适合大小。即发送者发送数据的时候并非一开始注入大量数据到网络中,而是发送一个数据包进行测试,当失去确认回复后,额定发送一个未确认包。
这意味着失去一个确认回复,能够发送两个数据包,失去两个确认回复,能够发送四个数据包,以几何模式增长很快达到协定规定的拥塞窗口大小(发包数下限),这时候连贯进入 拥塞防止阶段,这种机制须要往返几次能力得悉最佳拥塞窗口大小,但往返几次所需的工夫老本不可疏忽。
- 拥塞窗口的大小取决于网络的拥塞水平,并且动静地在变动。发送方让本人的发送窗口等于拥塞窗口。如果再思考到接管方的接管能力,那么发送窗口还可能小于拥塞窗口。
- 发送方管制拥塞窗口的准则是:只有网络没有呈现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送进来。但只有网络呈现拥塞,拥塞窗口就缩小一些,以缩小注入到网络中的分组数。
tcp 中的慢启动概念,是用来摸索以后连贯对应拥塞窗口的适合大小。用来弄清楚新连贯以后的网络状况。“慢速启动”是在连贯建设后,每收到一个来自收端的确认,就管制窗口减少一个段值大小,当窗口值达到“慢速启动”的限值后,慢速启动便进行工作,防止了网络产生拥塞。
TCP 传输控制协议的设计思路是,对假如状况很激进状况下,可能偏心看待同一网络的不同流量的利用,它的防止拥塞机制被设计城即便在最差的网络状况下也能够起作用。
臃肿的音讯首部,HTTP/1.1 能压缩申请内容,然而音讯首部却不能压缩。它可能占据申请的绝大部分(也可能是全副)也是比拟常见了。(在这里如果能压缩申请首部,把???? 申请变得更小,就可能缓解带宽压力了,升高零碎的总负载)
受限的优先级设置,即如果浏览器针对指定域名开启多个 socket 申请,若 web 页面某些资源会比另外一些资源重要,会减轻资源的排队效应,会提早申请其余的资源,优先级高的资源先获取,优先级低的资源会在资源高的资源解决实现,(在处理过程中,浏览器不会发动新的资源申请)期待高的实现后再发动申请,(这就会让总的页面下载工夫缩短)。
在申请优先级高的资源的工夫区间内浏览器并不会发动优先级较低的新申请
小结:HTTP1.1 慢启动影响资源首次加载速度,TCP 建设连贯后,会开始申请传输,开始比较慢,而后一直放慢,为了防止出现网络拥挤,会让页面的首次渲染工夫变长。开始多个 tcp,如呈现网络降落,无奈辨认资源的优先级,会呈现竞态问题。
7. 如何进行网站性能优化????
- 内容方面,缩小 Http 申请(合并文件,css 精灵,inline Image),缩小 DNS 查问(DNS 缓存,将资源散布到适合的数量的主机名),缩小 DOM 元素的数量。
- Cookie 方面,能够缩小 Cookie 的大小。
- css 方面,将样式表放到页面顶部;不应用 css 表达式;应用
<link>
不应用@import
;可将 css 从内部引入;压缩 css。 - JavaScript 方面,将脚本放到页面底部;将 JavaScript 从内部引入;压缩 JavaScript,删除不须要的脚本,缩小 DOM 的拜访。
- 图片方面,可优化 css 精灵,不要再 HTML 中拉伸图片,优化图片(压缩)。
8.http 状态码以及含意????
- 对于 1xx 的状态码,为信息状态码,100 为持续,示意确认,胜利返回具体参数信息。
- 对于 2xx 的状态码,200 示意失常返回信息,201 示意申请胜利并且服务器创立了新的资源,202 示意服务器已承受申请,但尚未解决。
- 对于 3xx,重定向,301 示意,申请的网页已永恒挪动到新地位,302 示意,临时性重定向,303 示意临时性重定向,且总是应用 GET 申请新的 URI。304 示意,自从上次申请后,申请的网页未修改过。
- 对于 4xx,客户端谬误,404,服务器无奈了解申请的格局,客户端不该当尝试再次应用雷同的内容发动申请,401,申请未受权,403,禁止拜访,404,找不到如何与 URI 相匹配的资源。
- 对于 5xx,服务器谬误,500,最常见的服务器端谬误,503,服务器端临时无奈解决申请,可能是过载或保护。
9.http- 数据压缩????
数据压缩,在浏览器中发送申请时会带着 Content-Encoding: gzip
,外面时浏览器反对的压缩格局列表,有多种如,gzip,deflate,br 等。这样服务器就能够从中抉择一个压缩算法,放进Content-Encoding
响应头里,再把原数据压缩后发给浏览器。
10.http- 分块传输????
分块传输,就是将传输的文件分解成多个小块,而后分发给浏览器,浏览器收到后再从新组装还原。
每个离开蕴含两个局部,分块长度和分块数据(长度头和数据块),长度头以 CRLF 结尾的一行明文,数据块紧跟在长度头前面,也是用 CRLF 结尾,最初用一个长度为 0 的块示意完结。
在响应报文里用头字段 Transfer-Encoding:chunked 示意报文里的 body 局部不是一次性发送过去的,而是分成了许多块一一发送的。
在 Transfer-Encoding:chunked 和 Content-Length 中,这两个字段是互斥的。
一个响应报文的传输长度要么已知,要么长度未知(chunked)。
Content-Length: 299
11.http- 范畴申请????
断点续传
要实现该性能须要制订下载的实体范畴,这种制订范畴发送申请叫做范畴申请。
Accept-Ranges:服务器应用 http 响应头 Accept-Ranges 标识本身反对范畴申请,字段的具体值用于定义范畴申请的单位。
语法
Accept-Ranges: bytes, 范畴申请的单位是 bytes(字节)Accept-Ranges: none, 不反对任何范畴申请单位
范畴申请时用于不须要全副数据,只须要其中的局部申请时,能够应用范畴申请,容许客户端在申请头里应用专用字段来示意只获取文件的一部分。
Range 的格局,申请头 Range 是 HTTP 范畴申请的专用字段,格局是“bytes=x-y”, 以字节为单位的数据范畴。
- “0-”示意从文档终点开始到文档完结的整个文件。
- “100-”示意从第 100 哥字节开始到文档开端。
- “-10”示意从文档开端倒数的第 10 个字节开始。
示例:
执行范畴时会应用头部字段 Range 来指定资源 byte 的范畴。Range 格局:5001-10000 字节
Range : byte = 5001-10000
5000 之后的
Range : byte = 5001-
0-3000 字节,5001-10000 字节
Range : byte=-3000,5001-10000
上图示意服务器收到 Range 字段后,检测范畴合法性,范畴越界,就会返回状态码 416,如你的文件只有 1000 个字节,但申请范畴在 20000-3000,就会导致这个状态码的呈现。
如果胜利读取文件,范畴正确,返回状态码“206”。服务器要增加一个响应头字段 Content-Range, 通知片段的理论偏移量和资源的总大小。
最初是发送数据,间接把片段用 TCP 发给客户端,一个范畴申请就算是解决完了。
格局是“bytes x-y/length”, 与 Range 头区别在没有“=”
Content-Range: bytes 0-4395719/4395720
12.http- 多段数据????
多端数据,就是在 Range 头里应用多个“x-y”,一次性获取多个片段数据。应用一种非凡的 MIME 类型:“multipart/byteranges”,用来示意响应报文蕴含了多个范畴时应用。多重范畴申请 响应会在头部 Content-Type 表明 multipart-byteranges。
多段数据图:分隔标记 boundary 来辨别不同的分段
13. 说一说 cookies,sessionStorage 和 localStorage 的区别?????
- cookie 是网站用来标识用户身份而存储在用户本地终端上的数据
- cookie 数据始终在同源的 http 申请中携带,即便是不须要的状况,so,会在浏览器和服务器间来回传递
- sessionStorage 和 localStorage 不会主动把数据发送给服务器,仅仅在本地保留
存储的大小
cookie 的数据大小不能超过 4k;sessionStorage 和 localStorage 尽管也有存储大小的限度,但比 cookie 大得多,能够达到 5M 或者更大。
有限期工夫
- localStorage 存储持久数据,浏览器敞开后数据不会失落,除了被动删除数据
- sessionStorage 数据在以后浏览器窗口敞开后主动删除
- 设置得 cookie 过期工夫之前都无效,就算窗口或者是浏览器敞开
14. 为什么说利用多个域名来存储网站资源会更无效?????
因为 CDN 缓存更不便;冲破浏览器并发限度;节约 cookie 带宽;节约主域名得连接数,优化页面响应速度;避免不必要得安全性问题。
15.http2.0 的内容????
http2 是超文本传输协定的第二版,相比 http1 协定的文本传输格局,http2 是以二进制的格局进行数据传输的,具备更小的传输体积以及负载。
http2.0 分层,分帧层(http2 多路复用能力的外围局部), 数据或 http 层(蕴含传统上被认为是 HTTP 及其关联数据的局部)。
HTTP2.0:
- 多路复用机制,引入了二进制的分帧层机制来实现多路复用。(分帧层是基于帧的二进制协定。这不便了机器解析。申请和响应交错在一起。)
- 能够设置申请的优先级(客户端的分帧层对宰割块标上申请的优先级)。
- 头部压缩 申请头压缩,减少传输效率。
HTTP/ 2 较 HTTP/1.1 优化亮点
- 多路复用的流
- 头部压缩
- 资源优先级和依赖设置
- 服务器推送
- 流量管制
- 重置音讯
多路复用的实现:
在单个域名下仍能够建设一个 TCP 管道,应用一个 TCP 长连贯,下载整个资源页面,只须要一次慢启动,并且防止了竞态,浏览器发动申请,分帧层会对每个申请进行宰割,将同一个申请的宰割块打上雷同的 id 编号,而后通过协定栈将所有的宰割体发送给服务器,而后通过服务器的分帧层依据 id 编号进行申请组装,服务器的分帧层将回应数据宰割按同一个回应体进行 ID 宰割回应给客户端,客户端拼装回应。
对于 http2 中的帧(frame),http1 不是基于帧(frame)的,是文本分隔的。
GET/HTTP/1.1 <crlf>
这样,对于 http1 的申请或者是响应可能有的问题:
- 一次只能解决一个申请或者是响应,实现之前是不能进行解析的。
- 无奈预判解析须要多少内层。
HTTP/1 的申请和响应报文,是由起始行、首部和注释组成,换行符分隔;HTTP/ 2 是将申请和响应数据宰割成更小的帧,采纳二进制编码,易于解析的。
参考图片:
帧构造总结
所有的帧都蕴含一个 9 byte 的帧头 + 可边长的注释不同。依据帧的类型不同,注释局部的构造也不一样。
帧头:
16.http2- 幕后????
http2 作为一个二进制协定,领有蕴含轻量型,平安和疾速在内的所有劣势,保留了原始的 http 协定语义,对于 http2 更改了在零碎之间传输数据的形式。
二进制分帧层(binary framing layer),所有通信都在单个 TCP 连贯上执行,该连贯在整个对话期间始终处于关上状态,次要是二进制协定将通信合成为帧的形式,这些帧交错在客户端与服务器之间的双向逻辑流中。
HTTP/2 连贯的拓扑构造(展现了一个用于建设多个流的连贯)
在流 1 中,发送了一条申请音讯,并返回了相应的响应音讯。
HTTP/2 帧构造
前 9 个字节对于每个帧是统一的。解析时只须要读取这些字节,就能够精确地晓得在整个帧中冀望的字节数。
帧首部字段表格:
名称 | 长度 | 形容 |
---|---|---|
length | 3 字节 | 示意帧负载的长度 |
type | 1 字节 | 以后帧类型 |
Flags | 1 字节 | 具体帧类型的标识 |
R | 1 位 | 保留位,不要设置,否则会带来严重后果 |
Stream Identifier | 31 位 | 每个流的惟一 ID |
Frame Payload | 长度可变 | 实在的帧内容, 长度是在 length 字段中设置的 |
备注:流 Id 是用来标识帧所属的流。流看作在连贯上的一系列帧,它们形成了独自的 HTTP 申请和响应。
对于 http1 的申请和响应都分成音讯首部和音讯体两局部;http2 从下面一张图能够晓得,http2 的申请和响应分成 HEADERS 帧和 DATA 帧。
比拟一下:????
http2 的一个重要个性是基于流的流量管制。提供了客户端调整传输速度的能力。其中 WINDOW_UPDATE 帧用来批示流量管制信息。
有了多路复用,客户端能够一次收回多有资源的申请,不必像 http1 那样,收回对新对象申请之前,须要期待前一个响应实现。所以浏览器失去了在 Http1 中的默认资源申请优先级策略。
17. 浏览器生成 http 申请音讯????
http 的头字段
头字段类型 | 含意 |
---|---|
Date | 示意申请和响应生成的日期 |
Pragma | 示意数据是否容许缓存的通信选项 |
Cache-Control | 管制缓存的相干信息 |
Connection | 设置发送响应之后 TCP 连贯是否持续放弃的通信选项 |
Transfer-Encoding | 示意音讯主体的编码格局 |
Via | 记录途中通过的代理和网关 |
Authorization | 身份认证数据 |
From | 申请发送者的邮件地址 |
Referer | 当通过点击超级链接进入下一个页面时,在这里会记录下上一个页面的 URI |
User-Agent | 客户端软件的名称和版本号等相干信息 |
Accept | 客户端可反对的数据类型,以 MIME 类型来示意 |
Accept-Charset | 客户端可反对的字符集 |
Accept-Language | 客户端可反对的语言 |
Host | 接管申请的服务器 ip 地址和端口号 |
Range | 当须要只获取局部数据而不是全副数据时,可通过这个字段指定要获取的数据范畴 |
Location | 示意信息的精确地位 |
Server | 服务器程序的名称和版本号等相干信息 |
Allow | 示意指定的 URI 反对 |
Content-Encoding | 当音讯体通过压缩等编码解决时,示意其编码格局 |
Content-Length | 示意音讯体的长度 |
Content-Type | 示意音讯体的数据类型,以 MIME 规格定义的数据类型来示意 |
Expires | 示意音讯体的有效期 |
Last-Modified | 数据的最初更新日期 |
Content-Language | 示意音讯体的语言 |
Content-Location | 示意音讯体在服务器上的地位 |
Content-Range | 当仅申请局部数据时,示意音讯体蕴含的数据范畴 |
HTTP 音讯示例:
- HTTP, 超文本传送协定。
- 协定,通信操作的规定定义称为协定。
- URI,对立资源标识符。
- 1 条申请音讯中只能写 1 个 URI。如果须要获取多个文件,必须
对每个文件独自发送 1 条申请。
IP 的基本思路
Ip 地址的示意办法
IP 地址的构造 - 子网掩码示意网络号与主机号之间的边界。
解析器的调用办法
DNS 服务器的根本工作
DNS 服务器之间的查问操作
数据通过相似管道的构造来流动
18. 理解网络基础知识????
- 物理层
- 数据链路层
- 网络层
- 传输层
- 会话层
- 表示层
- 应用层
计算机网络,能够将规模分 WAN,Wide Area Network 广域网,和 LAN 局域网。通过电脑连贯交换机再到路由器的连贯。
你晓得计算机与网络都经验了怎么样的一个倒退过程吗?
- 批处理就是指当时将用户程序和数据装入卡带或磁带,由计算机依照肯定的程序读取,使用户所要执行的这些程序和数据可能一并批量失去解决的形式。
- 分时系统,是指多个终端与同一个计算机连贯,容许多个用户同时应用一台计算机的零碎。
- 计算机网络
TCP/IP 的机制是什么,TCP/IP 通信协议的统称,学习这个有人肯定???? 不理解什么是协定。
但咱们在接触到程序时,经常听到协定如 IP,TCP,HTTP 等协定。记住 TCP/IP 就是 IP,TCP,HTTP 等协定的汇合。协定就是计算机与计算机之间通过网络实现通信时须要达成的一种的“约定”。这些协定就是让不同厂商的设施,不同的 CPU 和不同的操作系统组成的计算机之间进行通信。
就是两台计算机之间都能反对雷同的协定,并遵循能力实现互相通信。
分组替换协定
分组替换就是将大数据宰割成一个一个叫做包的较小单位进行传输的办法。
分层模块
理解 OSI 参考模型
OSI 将分为易于了解的 7 层:
1. 物理层,2. 数据链路层,3. 网络层,4. 传输层,5. 会话层,6. 表示层,7. 应用层。
应用层:是对特定利用的协定。
表示层:设施固有数据格式和网络规范数据格式的转换。
会话层:通信治理。负责建设和断开通信连贯。
传输层:治理两个节点之间的数据传输。
网络层:地址治理与路由抉择。
数据链路层:互连设施之间传送和辨认数据帧。
物理层:以“0”,“1”代表电压的高下,灯光的闪灭。
如何模块化通信传输
网络形成因素
网卡:
什么是网关,它是 OSI 参考模型中负责将从传输层到应用层的数据进行转换和转发的设施。
代理服务:
19. 有哪些渲染优化呢?????
第一,咱们能够禁止应用 iframe,第二,能够禁止应用 gif 图片来实现 loading 成果,升高 CPU 的耗费,来晋升渲染性能,第三,应用 CSS3 代码来代替 JS 动画。
对于一些小图标,能够应用 base64 位编码,以缩小网络申请,但不倡议大图应用,因为比拟消耗 CPU,小图标劣势在于,能够缩小 HTTP 申请,防止文件跨域,批改及时失效。
页面头部的 style 和 script 会阻塞页面,在 Renderer 过程中的 JS 线程和渲染线程是互斥的。
20. 学习 TCP 和 IP 的基础知识????
TCP/IP 协定族市一组协定的汇合,也称为互联网协议族。
20 世纪 60 年代后半叶,应 DoD 要求,美国开始进行通信技术相干的演技,ARPANET 的诞生,开发分组交互技术,在 1975 年,TCP/IP 的诞生。1983 年,ARPANET 决定正式启用 TCP/IP 为通信协议。
TCP/IP 与 OSI 参考模型
对于 OSI 七层模型太细了,而互联网协议族 TCP/IP 模型划分为四层。
TCP/IP 模型(应用层,传输层,互联网层,网络接口层)- 应用层,传输层,网络层,链路层。
传输层就是能够让应用程序之间实现通信。
在其中 TCP 是一种面向有连贯的传输层协定,保障两端通信主机之间的通信可达。UDP 是一种面向无连贯的传输层协定,so,UDP 用于分组数据较少或者多播,播送通信以及视频通信等畛域。
应用层
21. 面试题:TCP/IP 市如何在媒介上进行传输的呢?????
在不同档次的协定✍
数据包首部:
以太网包首部:IP 包首部,TCP 包首部,数据
IP 包首部:TCP 包首部,数据
TCP 包首部:数据
每个分层中,都会对所发送的数据附加一个首部,它蕴含了该层中必要的信息。(发送的指标地址,协定相干的信息等)
- 包是全能性术语
- 帧是数据链路层中包的单位
- 数据包,IP 和 UDP 等网络层以上的分层中包的单位
- 段,示意 TCP 数据流中的信息
- 音讯,利用协定中数据的单位
数据包的首部,明确表明了协定应该如何读取数据。把握数据包首部,通常,为协定提供的信息为包首部,所要发送的内容为数据。
发送数据包,TCP/IP 通信流程:????
- 利用程序处理,发送通信开始 TCP/IP 通信,应用程序会进行编码解决,编码相当于 OSI 中的表示层性能。
- TCP 模块的解决,TCP 负责建设连贯,发送数据以及断开连接,TCP 提供将应用层发来的数据顺利发送至对端的牢靠传输。在应用层数据的前端附加一个 TCP 首部,它蕴含源端口号和指标端口号,序号以及校验和(用来判断数据是否被毁坏)而后附加一个 TCP 首部的包再发给 IP。
- IP 模块的解决,在 TCP 首部的前端加上本人的 IP 首部,它蕴含接收端 IP 地址和发送端 IP 地址。若不晓得接收端的 MAC 地址,能够用 ARP 查找,只有晓得对端 MAC 地址,就能够将 MAC 以及 IP 地址交给以太网的驱动程序,来实现数据传输。
- 网络接口的解决,从 IP 传过来的 IP 包,而后附加上以太网首部并进行发送解决,以太网首部蕴含接收端的 MAC 地址,发送端的 MAC 的地址,以及标记以太网类型的以太网数据的协定。
数据包,通过以太网的数据链路时,大抵上附加了以太网包首部,IP 包首部,TCP 包首部或者 UDP 包,以及利用本人的包首部和数据,最初包追加了包尾。
分层中包的构造
数据包接管流程????
- 网络接口的解决,主机收到以太网包后,从以太网的包首部找到 MAC 地址判断是否为发给本人的,若不是就抛弃,如果是,就查找以太网包首部中的类型域从而确定以太网协定所传送过去的数据类型。
- 通过 IP 模块解决,而后 TCP 模块解决(须要判断是否被毁坏),查看是否依照序号接收数据。当数据接管结束后,会发送“确认回执”给发送端。留神,这里的回执信息未能达到发送端,那么发送端会认为没有收到而始终重复发送。
- 应用程序的解决,接收端应用程序会间接接管发送端发送的数据信息。
22. 理解一下 http-http3.0????
在 http2.0 中,TCP 管道传输途中也会导致丢包问题,造成队头阻塞(在 http2.0 中的 TCP 建设连贯三次握手,和 HTTPS 的 TSL 连贯也会消耗较多工夫)
其实多路复用技术能够只通过一个 TCP 连贯就能够传输所有的申请数据。
http3 中弄了一个基于 UDP 协定的 QUIC 协定,QUIC 虽说基于 UDP,然而在根底上增加了很多性能。QUIC(疾速 UDP 网络连接)是一种实验性的网络传输协定,由 Google 开发,该协定旨在使网页传输更快。
对于在 http 中的毛病就是提早,浏览器的阻塞,在对同一域名,同时只能连贯 4 个,超过了浏览器的最大连贯限数时,前面的申请就会被阻塞;DNS 的查问就是将域名解析为 IP,来向指标服务器的 IP 建设连贯,其中通过 DNS 缓存能够达到缩小工夫的作用;建设连贯,HTTP 是基于 tcp 协定的,三次握手,每次连贯都无奈复用,so,会每次申请都要三次握手和慢启动,都会影响导致提早。(慢启动对大量小文件申请影响较大)
http 处于计算机网络中的应用层,建设在 TCP 协定之上。(把握理解 tcp 建设连贯的 3 次握手和断开连接的 4 次挥手和每次建设连贯带来的 RTT 延迟时间)。
绝对于 HTTP1.0 应用了 header 里的 if-modified-since,expires 来做缓存判断,在 HTTP1.1 中引入了 entity tag,if-unmodified-since,if-match,if-none-match 等更多可供选择的缓存头来管制缓存策略。
http1.0 传输数据时,每次都要从新建设连贯,减少提早,http1.1 退出了 keep-alive 能够复用局部连贯,但在域名分片等状况下仍要连贯夺冠时连贯,消耗资源,以及给服务器带来性能压力。
http1.1 尝试应用 pipeling 来解决问题,就是浏览器能够一次性收回多个申请,在同一个域名下,同一条 TCP 连贯,但对于 pipeling 要求返回是依照程序的,即(如果后面有个申请很耗时的话,前面的申请即便服务器曾经解决完,任会期待后面的申请解决完才开始按序返回。)
在 http1.x 中,Header 携带内容过大,减少了传输的老本,在传输的内容都是明文,在肯定水平上无奈保障其数据的安全性。(在 http1.x 问题的呈现,有了 SPDY 协定,用于解决 http/1.1 效率不高的问题,升高提早,压缩 Header 等)
HTTP2 次要解决用户和网站只用一个连贯(同域名下所有通信都只用单个连贯实现,单个连贯能够承载任意数量的双向数据流,数据流是以音讯的模式发送,音讯由一个或多个帧组成)。
so,http 采纳二进制格局传输数据,不像 http1.x 的文本格式。(二进制:http2 将申请和响应数据宰割成帧,并且它们采纳二进制的编码),对于 HTTP2 的概念:(流,音讯,帧)
- 流,它是连贯中的一个虚构信道;
- 音讯,它是 HTTP 音讯,申请,以及响应;
- 帧,它是 HTTP2.0 通信的最小单位。
多个帧能够乱序发送,可依据帧首部的标识流进行从新组装。
对于 http2, 同一域名下只须要应用一个 TCP 连贯,那么当呈现丢包时,会导致整个 TCP 都要开始期待重传。对于 http1.1 来说,能够开启多个 TCP 连贯,呈现这种状况指挥影响一个连贯(或者局部),其余的 TCP 连贯失常传输。
HTTP/2 对首部采取了压缩策略,为了缩小资源耗费并晋升性能。(因为在 http1 中,在 header 携带 cookie 下,可能每次都要反复传输数据)
so,有了 QUIC 协定,整合了 TCP,TLS,和 HTTP/ 2 的长处,并加以优化。那么 QUIC 是啥,它是用来代替 TCP,SSL/TLS 的传输层协定,在传输层之上还有应用层。
留神,它是一个基于 UDP 协定的 QUIC 协定,应用在 http3 上。
QUIC 新性能
HTTPS 的一次齐全握手的连贯过程
QUIC 能够解决传输单个数据流能够保障有序的交付,并且不会影响其余的数据流。(解决 http2 问题)
示意在 QUIC 连贯中,一个连贯上的多个 stream,如其中 stream1,stream2,stream3,stream4,其中 stream2 失落(quic packet),其余 UDP 达到,应用层间接读取。— 无需期待,不存在 TCP 队头阻塞,失落的包须要从新传即可。
补充:
- TCP 是基于 IP 和端口去辨认连贯的;
- QUIC 是通过 ID 的形式去辨认连贯的
对于 QUIC 的包都是通过认证的,除了个别,so,这样,通过加密认证的报文,就能够升高平安危险。
HTTP2-TLS,TCP,IP
小结 QUIC 特点:(基于 UDP)— http3-QUIC,UDP,IP
- 多路数据流
- TLS
- 有序交付
- 疾速握手
- 可靠性
23. 网络中的 UDP????
UPD 面向报文的协定,就是 UDP 只是报文的搬运工,不会对报文进行任何拆分和拼接操作,在发送端,应用层将数据传给传输层的 UDP 协定,UDP 会给数据加一个 UDP 头标识下是 UUDP 协定,而后传给网络层。
接收端,网络层将数据传给传输层,UDP 只去除 IP 报文头就传给应用层,不会任何拼接操作。
UDP 是无连贯,通信不须要建设和断开连接,UDP 是不牢靠的,不关怀数据的平安等问题,UDP 是没有拥塞管制,在网络条件不好的状况下可能会导致丢包。
传输:UDP 反对一对一,一对多,多对多,多对一的的传输方式,UDP 提供了单播,多播,播送的性能。
24. 网络中的 TCP????
UDP 没有 TCP 那么简单,UDP 头部开销小,然而 TCP 头部比 UDP 头部简单得多,UDP 头部只有 8 字节,相比 TCP 的至多 20 字节要少很多。
Sequence number
这个序号保障了 TCP 传输的报文都是有序的,对端能够通过序号程序的拼接报文
Window Size
示意窗口大小,还能接管多少字节的数据
Acknowledgement Number
示意上一个序号的数据曾经接管到,接收端冀望接管的下一个字节的编号是多少
标识符
当 ACK=1,示意确认号字段无效
当 SYN=1,ACK= 0 时,示意以后报文段是一个连贯申请报文
当 SYN=1,ACK= 1 时,示意以后报文段是一个批准建设连贯的应答报文
当 FIN=1,示意此报文段是一个开释连贯的申请报文
性能指标 RTT
示意发送端发送数据到接管到对端数据所需的往返工夫
小结
- TCP(Transmission Control Protocol,传输控制协议)是基于连贯的协定
- UDP(User Data Protocol,用户数据报协定)是面向非连贯的协定。
25. 建设连贯三次握手????
建设连贯开始时,两端都是 CLOSED 状态,通信开始前,单方都会创立 TCB,后进入 LISTEN 状态,开始期待客户端发送数据。
第一次握手
客户端向服务器端发送连贯申请报文段,申请发送后,客户端进入 SYN-SENT 状态。
第二次握手
服务端收到连贯申请报文段后,发送实现后便进入 SYN-RECEIVED 状态。
第三次握手
客户端收到连贯批准的应答后,要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连贯建设胜利。
有人问了,两次握手就能够建设连贯了,为啥要第三次呢?
因为避免生效的连贯申请报文段被服务器端接管,从而导致谬误。
26.http 申请码有哪些?????
100 为持续,个别发送 post 申请时,曾经发送了 http header 之后服务端将返回此信息,示意确认,之后发送具体参数信息;201,申请胜利并且服务器创立了新的资源;202,服务器已承受申请,但未解决。
301,申请的网页曾经永恒挪动到新的地位;302,临时性重定向;303,临时性重定向,且总是应用 GET 申请新的 URI;304,自从上次申请后,申请的网页未修改过。
404,服务器无奈了解申请;401,申请未受权;403,禁止拜访。
27. 面试时,简略说说 TCP 传输的三次握手四次挥手????
传输,为了准确无误地把数据传输给指标,TCP 协定采纳了三次握手策略,用 TCP 协定把数据包送出去后,会向对方确认是否胜利达到,发送端发送一个带 SYN 标记的数据包给到对方,接收端收到后,会回传一个带有 SYN/ACK 标记的数据包示意传送达到的确认信息,而后发送端也再次回传一个带有 ACK 标记的数据包,示意“握手”完结了。
握手过程中应用的标记:SYN 和 ACK
断开一个 TCP 连贯须要四次挥手:
第一次挥手
被动敞开的一方,发送一个 FIN(上述讲过 — 当 FIN=1,示意此报文段是一个开释连贯的申请报文),传送数据,用来通知对方(被动敞开方),说不会再给你发送数据了。— 被动敞开的一方能够承受数据。
第二次挥手
被动敞开方 收到 FIN 包,发送 ACK 给对方,确认序号。
第三次挥手
被动敞开方 发送一个 FIN,敞开方,说我不会再给你发数据了。(你不给我发送数据,我也不给你发送数据了)
第四次挥手
被动敞开一方收到 FIN,发送要给 ACK,用来确认序号
28. 常说的 HTTPS????
其实 HTTP 协定时承载于 TCP 协定之上的,再 HTTP 和 TCP 之间增加一个平安协定层,SSL 或者 TSL(ssl/tls 协定传输,蕴含证书,卸载,流量转发,负载平衡,页面适配,浏览器适配,refer 传递等),则就是常说的 HTTPS。
29.GET 和 POST 的区别,何时应用 POST?????
- GET 是用于信息获取,应用 URL 传递参数,发送信息的数量无限;
- POST 是用于批改服务器上的资源;
- 个别应用 POST,当无奈应用缓存文件,向服务器发送大量的数据,发送未知的字符
30. 面试问,HTTP 协定的次要特点????
- 简略疾速
- 灵便
- 无连贯
- 无状态
31. 面试问,说说 HTTP 报文的组成部分????
HTTP 报文的组成部分蕴含:申请报文和响应报文
申请报文:有申请行,申请头,空行,申请体
响应报文:有状态行,响应头,空行,响应体
申请报文蕴含:
1. 申请办法,2. 申请 URL,3.HTTP 协定以及版本,4. 报文头,5. 报文体
- 申请行,有申请办法,申请 URL,http 协定以及版本;
- 申请头,一堆键值对
- 空行,当服务器在解析申请头的时候,遇到了空行,表明前面的内容是申请体
- 申请体,申请数据
响应报文蕴含:
1. 报文协定以及版本,2,状态码以及状态形容,3,响应头,4,响应体
- 状态行:http 协定和版本,状态码以及状态形容
- 响应头
- 空行
- 响应体
32. 面试时问,晓得哪些 HTTP 办法????
- GET 办法获取资源
- POST 办法传输资源
- PUT 办法更新资源
- DELETE 办法删除资源
- HEAD 办法取得报文首部
33. 长久链接????
在 http1.0 中,客户端每隔很短时间会对服务器发出请求,查看是否有新的数据,只有轮询足够快,就能够造成交互实时进行,但这个做法,会对两端造成大量的性能节约。
对于 http1.1 中的长连贯,应用 connection:keep-alive 进行长连贯,客户端只申请一次,然而服务器会将持续放弃连贯,再次申请时,防止了从新建设连贯。
留神,keep-alive 不会永恒放弃连贯,只有放弃一个时间段。
34. 平安问题:CSRF 和 XSS????
CSRF 的基本概念,攻打原理,进攻措施
CSRF(Cross-site request forgery):跨站申请伪造
了解 CSRF 攻打:攻击者盗用了你的身份,以你的名义发送歹意申请。
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚构货币转账……造成的问题包含:个人隐私泄露以及财产平安。
CSRF 的原理:(要实现一次 CSRF 攻打)
- 登录受信赖网站 A,并在本地生成 Cookie。
- 在不登出 A 的状况下,拜访危险网站 B。
XSS 的基本概念, 跨域脚本攻打。
xss 是一种产生在 web 前端的破绽,所以其危害的对象也次要是前端用户。
跨域脚本攻打是,歹意攻击者往 web 页面里插入歹意的 script 代码,在浏览器中运行 script 代码,达到歹意攻打用户的目标。
so,实现 xss 攻打具备 2 个条件,第一须要向 web 页面注入歹意的代码,第二,这些恶意代码被浏览器胜利的执行。
CSRF 和 XSS 的区别:
- CSRF 须要登录,获取 COOKIE,利用网站自身的破绽,去申请网站的 api
- XSS, 不须要登录,向网站注入 JS 代码,执行 JS 里的代码,篡改网站的内容
35. 从一个 HTTP 申请来看网络分层原理
一个 HTTP 申请的分层解析流程:
TCP,它是面向连贯的,牢靠的,基于字节流的传输层通信协议。
特点:
- 基于连贯,数据传输之前须要建设连贯
- 全双工的,双向传输
- 字节流,不限度数据大小,打包成报文段,保障有序接管,反复报文主动抛弃
- 流量缓冲,解决单方解决能力的不匹配
- 牢靠的传输服务,保障可达,丢包时通过重发机制实现可靠性
- 拥塞管制,防止网络呈现恶性拥塞
TCP 连贯,源地址,源端口,目标地址,目标端口
从 TCP-IP 协定底层
滑动窗口协定与累计确认(延时 ACK)
滑动窗口大小同通过 tcp 三次握手和对端协商,且受网络情况影响
36.HTTPS 平安加密通道原理剖析
什么是 HTTPS 协定,因为 HTTP 天生“明文”的特点,整个传输过程齐全通明,任何人都可能在链路中截获,批改或者伪造申请、响应报文,数据不具备可信性。
应用 HTTPS 时,所有的 HTTP 申请和响应发送到网络前,都要进行加密。
https = http + ssl/tls
对称加密:加密 解密应用同一密钥
非对称加密:公钥 - 随便散发,私钥 - 服务器本人放弃
公钥加密的数据,只能通过私钥解密
私钥加密的数据,只能公钥能解密
加密算法:
对称密钥加密算法,编,解码应用雷同密钥的算法
非对称密钥加密算法,一个公钥,一个私钥,两个密钥是不同的,公钥能够公开给如何人应用,私钥是严格窃密的。
加密通道的建设:
数字证书的申请和验证
如何申请:
- 生成本人的公钥和私钥,服务器本人保留私钥
- 向 CA 机构提交公钥,公司,域名信息期待认证
- CA 机构通过线上,线下多种路径验证你提交信息的真实性,合法性
- 信息审核通过,CA 机构则会向你签发认证的数字证书,蕴含了公钥,组织信息,CA 信息,无效工夫,证书序列号,同时生成了一个签名
- 签名步骤:hash(用于申请证书所提交的明文信息)= 信息摘要
- CA 再应用 CA 机构的私钥对信息摘要进行加密,密文就是证书的数字签名
37.https 的对称加密,非对称加密,混合加密,CA 认证????
HTTPS,超文本传输平安协定,指标是平安的 HTTP 通道,利用是平安数据传输。HTTP 协定尽管应用广,然而存在不小的平安缺点,次要是数据的 明文传送 和音讯完整性 检测的不足。
HTTPS 协定是由 HTTP 加上 TLS/SSL 协定构建的可进行加密传输,身份认证的网络协议。
通过,数字证书,加密算法,非对称密钥 等技术实现互联网数据传输加密,实现互联网传输平安爱护。
HTTPS 次要个性:
- 数据保密性
- 数据完整性
- 身份校验安全性
客户端和服务器端在传输数据之前,会通过基于证书对单方进行身份认证。客户端发动 SSL 握手音讯给服务端要求连贯,服务端将证书发送给客户端。客户端查看服务器端证书,确认是否由本人信赖的证书签发机构签发,如果不是,将是否持续通信的决定权交给用户抉择,如果查看无误或者用户抉择持续,则客户端认可服务端的身份。
服务端要求客户端发送证书,并查看是否通过验证,失败则敞开连贯,认证胜利,从客户端证书中取得客户端的公钥。
HTTP 原理
客户端的浏览器首先要通过网络与服务器建设连贯,该连贯时通过 TCP 来实现的,个别 TCP 连贯的端口号是 80,建设连贯后,客户端发送一个申请给服务器端;服务器端接管到申请后,给予相应的响应信息。
HTTPS 原理
客户端将它所反对的算法列表和一个用作产生密钥的随机数发送给服务器,服务器从算法列表中抉择一种加密算法,并将它和一份蕴含服务器专用密钥的证书发送给客户端,该证书还蕴含了用于认证目标的服务器标识,服务器同时还提供了一个用作产生密钥的随机数。
客户端对服务器的证书进行验证,并抽取服务器的专用密钥,再产生一个称作 pre_master_secret 的随机明码串,并应用服务器的专用密钥对其进行加密,并将加密后的信息发送给服务器。
客户端与服务器端依据 pre_master_secret 以及客户端与服务器的随机数独立计算出加密和 MAC 密钥。
混合加密
在传输数据中应用对称加密,但对称加密的密钥采纳非对称加密来传输,混合加密比拟平安,但无奈晓得数据是否被篡改
CA 认证
CA 认证, 即是电子认证服务,指电子签名相干各方提供真实性,可靠性验证的流动。
个性:参阅百度百科—简介,点击进入
38.https 比照 http????
http 传输方式:明文传输,网站或相干服务与用户之间的数据交互无加密,容易被监听,篡改。
https 传输方式:在 HTTP 退出了 SSL 层,用于数据传输加密。
http 身份认证:无任何身份认证,用户无奈通过 http 辨认出网站的实在身份。
https 身份认证:通过 CA 多重认证,蕴含域名管理权限认证等。
http 老本:无任何应用老本,所有网站默认是 http 模式。
https 须要老本,须要申请 SSL 证书来实现 https。
http 连贯端口:80 端口。
https 连贯端口:443 端口。
39. 证书如何平安传输,被掉包了怎么办?????
40.http3 中 QUIC????
QUIC 是谷歌制订的一种基于 UDP 的低时延的互联网传输层协定。
1、防止前序包阻塞;2、零 RTT 建连;3、FEC 前向纠错
HTTP 的历史
HTTP/2 和 HTTP/3 建设连贯的差异
TCP/ 建设连贯与 QUIC 建设连贯
队头阻塞 / 多路复用
HTTP/1.1 提出了 Pipelining 技术,容许一个 TCP 连贯同时发送多个申请
申请与响应,与,Pipelining
http/1.1 队头阻塞
HTTP/2 的多路复用解决了队头阻塞问题
拥塞管制:
- 慢启动
- 拥塞防止
- 疾速重传
- 疾速复原
41.HTTP 协定入门
HTTP 基于 TCP/IP 协定的应用层协定,不波及数据包 packet 传输,次要客户端和服务器之间的通信格局,默认应用 80 端口。TCP 连贯建设后,客户端向服务器申请网页,协定规定,服务器只能回应 HTML 格局的字符串,不能回应别的格局。
http1.0 能够传输文字,传输图像,视频,二进制文件;除了 GET 办法,还有 POST,HEAD 等;每次通信都须要 头信息 HTTP header,状态码,多字符集反对,缓存,权限等。
字段:ontent-Type 字段
头信息必须是 ASCII 码,前面的数据能够是任何格局,字段值:
text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml
客户端申请的时候,应用 Accept 字段,示意能够承受哪些数据格式。
Accept: */*
Content-Encoding 字段, 示意数据的压缩形式
Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate
客户端在申请时,用 Accept-Encoding 字段阐明承受哪些压缩办法。
Accept-Encoding: gzip, deflate
http1.0 就是每个 TCP 连贯只能发送一个申请,发送结束后就敞开,so,为解决问题,用了一个非标准 Connection 字段,Connection:keep-alive。
HTTP/1.1 引入了长久连贯(persistent connection),TCP 连贯默认不敞开,能够被多个申请复用,不必申明 Connection: keep-alive。
也不是永久性不敞开的,只有有一段时间没有流动,就会敞开 TCP 连贯,个别对于同一个域名,大多数浏览器容许同时建设 6 个长久连贯。
1.1 版引入了管道机制(pipelining),同一个 TCP 连贯里,能够同时发送多个申请。然而还是依照程序,一个申请回应后,再回应另一个申请。(但也缩小不小的耗费工夫)。
应用 分块传输编码 ,只有申请或回应的头信息 有 Transfer-Encoding 字段
Transfer-Encoding: chunked
什么是多工?双向,实时的通信就叫 多工。
HTTP2 复用 TCP 连贯,在一个连贯里,两端都能够同时发送多个申请或响应,而且不必依照程序一一对应,防止了“队头梗塞”。
http2 引入了头信息压缩机,头信息应用 gzip 或 compress 压缩后再发送,客户端和服务器同时保护一张头信息表,所有字段存在这个表里,生成一个索引号,当前就只发送索引号,这样就进步速度了。
HTTP/ 2 容许服务器未经请求,被动向客户端发送资源(服务器推送)
42. 什么是 cookie 呢????
cookie 是某网站为了分别用户身份,进行 session 跟踪而存储在用户本地终端的数据(通常通过加密),由用户客户端计算机临时或永恒保留的信息。
- 存储在用户本地终端上的数据
- 用来分别用户身份
- 保留在用户本地终端
cookie 是一些数据,存储在你电脑上的文本文件中,当 web 服务器向浏览器发送 web 页面时,在连贯敞开后,服务端不会记录用户的信息,cookie 的作用就是解决如何记录客户端的用户信息。
场景:当用户拜访 web 页面,用户信息记录在 cookie 中,当用户下一次拜访页面后,能够在 cookie 中读取用户拜访记录。
cookie 是以键值对模式存储的,当浏览器从服务器上申请 web 页面,该页面的 cookie 会被增加到申请中,服务端通过这种形式用来获取用户信息。
能够应用 JavaScript 来创立,读取,批改,删除 cookie
应用 document.cookie 属性来创立,读取以及删除 cookie
创立:
document.cookie = "username = dadaqianduan";
给 cookie 增加一个过期工夫:
document.cookie = "username = dadaqianduan; expires=xxxxxx";
默认状况下,cookie 属于以后页面:
document.cookie = "username = dadaqianduan; expires= ; path=/";
读取 cookie
var x = document.cookie;
批改 cookie
document.cookie = "username = dada; expires=xxx; path=/";
删除 cookie,把设置工夫的 expires 参数改为以前的工夫即可。
document.cookie = "username = ; expires= xxx";
为什么会有 cookie 呢?因为 http 申请时无协定的,http1.x,无状态协定,客户端同一个申请发送屡次,服务端并不能辨认是不是同一个客户端发送,为了解决无状态,就有了 cookie。
cookies 是服务器暂存放在你的电脑里的材料,以.txt 格局的文本文件,好让服务器用来识别你的计算机,当你在浏览网站时,web 服务器会发送一个小小的材料放在你的计算机上。
当你下一次拜访同一个网站,web 浏览器会先看看有没有它上次留下来的 cookies 材料,有的话就输入特定的内容给你。
cookie 原理
浏览器第一次申请服务器,服务器响应申请中携带 cookie,给浏览器,浏览器第二次申请,携带 cookie,给服务器,服务器依据 cookie 分别用户,也能够批改 cookie 内容。
domain 时.baidu.com 的 cookie 绑定到了域名商。跨域的域名不能写入在 cookies 文件里
cookie 的属性有哪些
Name, Value, Domain, Path, Expires/Max-Age, Size, HttpOnly, Secure, SameSite
把握面试中的 HttpOnly, 这个属性设置为 true,就不能通过 js 脚本获取 cookie 的指,能无效避免 xss 的攻打。
Cookie 中的 HttpOnly 和 Secure 中:
标记为 Secure 的 Cookie 只能被 https 协定加密过的申请发送给服务端。但也无奈保障其平安保障。
如果 cookie 中设置了 HttpOnly 属性,通过 js 脚本将无奈读取到 cookie 信息,无效避免 xss 的攻打,窃取 cookie 内容,减少了 cookie 的安全性,然而重要信息还是不要存储在 cookie 中。
因为 xss 为跨站脚本攻打,是 web 程序常见的破绽,属于被动式且用于客户端的攻击方式
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
SameSite
SameSite Cookie 容许服务器要求某个 cookie 在跨站申请时不会被发送,从而能够阻止跨站申请伪造攻打(CSRF)。
示例:
Set-Cookie: key=value; SameSite=Strict
SameSite 有三个值:
None: 浏览器在同站申请,跨站申请下持续发送 cookies,不辨别大小写。(所有三方的申请都会携带 cookie)
Strict: 浏览器将只在拜访雷同站点时发送 cookie。(所有三方的链接都不会携带 cookie)
Lax: Same-site cookies 将会为一些跨站子申请保留,如图片加载或者 frames 的调用,但只有当用户从内部站点导航到 URL 时才会发送。(只有同步且是 get 申请才可携带 cookie)
在 https 协定中,能力通过 js 去设置 secure 类型的 cookie, 在 http 协定的网页中是无奈设置 secure 类型 cookie 的。默认状况,https 协定还是 http 协定的申请,cookie 都会被发送到服务端。
43. 什么是 token 呢?????
token 的呈现,是在客户端频繁向服务端申请数据,服务端频繁的去数据库查问用户名和明码并进行比照,判断用户名和明码正确与否,并作出相应提醒。token 是服务端生成的一串字符串,以作客户端进行申请的一个令牌,第一登录时,服务器生成一个 token,将此 token 返回给客户端,客户端带上这个 token,无需再次带上用户名和明码了。
token 的呈现加重了服务器的压力,缩小频繁地数据库查问。
token 的长处
- 无状态,可扩大
- 安全性
- 多平台跨域
- 基于规范
基于 Token 的身份验证的过程
浏览器,输出 userName, Password,到 mysql,校验胜利 生成 token,将 token 返回给客户端,当客户端发动申请时,每次拜访 api 都携带 token 到服务器端,通过过滤器,校验 token,校验胜利后返回申请数据,校验失败后返回错误码。
44.cookie,session,token????
cookie,记录拜访过的网站或正在拜访的网站,对于 HTTP 协定是无状态的,服务器不晓得浏览器上一次拜访做了什么,也无奈对用户会话进行跟踪连贯,所以,cookie 是由服务器发送到客户端浏览器的一段文本文件,蕴含了网站拜访流动信息。Cookie 寄存在客户端,用来保留客户端会话信息;因为存储在客户端,它的安全性不能齐全保障。
session 示意是 c / s 架构中服务器和客户端一次会话的过程,用来保留认证用户信息。session 是一种 HTTP 存储机制,提供长久机制。Session 寄存在服务器端,用户验证客户端信息。因为存储在服务器,安全性有肯定的保障。
token 是一种认证形式(是“令牌”的意思,次要是用于身份的验证形式。)
45. 跨域????
网页的 URL 的协定、域名、端口有一个不同,就算是跨域了
跨域:JSONP
46. 思维导图 http 小结
47.http 中的字段????
- accept,数据格式,申请 accept,响应,content-type,示意收到的数据格式
- accept,压缩形式,申请 accept-encoding,响应,content-encoding,采纳什么样的压缩形式
- accept,反对语言,申请 accept-language,响应 content-language
- accept,字符集,申请 accept-charset,响应 content-type,指定字符集
- accept,范畴申请,申请 if-range 和 range,响应 accept-anges 和 content-range
- cookie,申请时传递给服务端的 cookie 信息
- set-cookie,响应报文首部设置要传递给客户端的 cookie 信息
- allow,反对什么 HTTP 办法
- last-modified,资源的最初批改工夫
- expires, 设置资源缓存的失败日期
- content-language,实体的资源语言
- content-encoding,实体的编码格局
- content-length,实体主体局部的大小单位是字节
- content-range,返回的实体的哪些范畴
- content-type,哪些类型
- accept-ranges,解决的范畴申请
- age,通知客户端服务器在多久前创立了响应
- vary,代理服务器的缓存信息
- location,用于指定重定向后的 URI
- If-Match,值是资源的惟一标识
- User-Agent,将创立申请的浏览器和用户代理名称等信息传递给服务器
- Transfer-Encoding,传输报文的主体编码方式
- connection,治理长久连贯,keep-alive , close
- Cache-Control,管制浏览器的强缓存
48. 如果面试问 HTTP 报文构造是什么,你能答复上来不?
对于 TCP 而言
起始行 + 头部 + 空行 + 实体
- 申请报文
GET /home HTTP/1.1
- 响应报文
HTTP/1.1 200 OK
空行是用来离开头部和实体。
49. 如果面试问 HTTP 申请办法有哪些,你能答复上来不?????
- GET 办法,用来获取资源
- POST 办法,用来提交数据
- PUT 办法,用来批改数据
- DELETE 办法,用来删除资源
- OPTIONS 办法,用来跨域申请
- HEAD 办法,用来获取资源的元信息
- CONNECT 办法,用来建设连贯,用于代理服务器
50. 如果面试问,你对 URI 是如何了解的,你能答复上来不?????
URL 对立资源定位符,URI,对立资源标识符。URI 用于辨别网络上不同的资源。
URI 蕴含了 URN 和 URL。
URL 的构造:
协定名,登录主机的用户信息,主机名和端口,申请门路,查问参数,URI 上定位资源内的一个锚点。
51. 如果面试问,你对 HTTP 状态码的理解有多少,你能答复上来不?
理解一些特定的 HTTP 状态码:
52. 如果面试问,说说 HTTP 特点以及毛病,你能答复上来不?
特点是:
- 灵便可扩大
- 牢靠传输
- 无状态等
毛病是:
- 无状态
- 明文传输
- 队头阻塞问题
53. 如果面试问,说说你对 Accept 字段的了解,你能答复上来不?
- 数据格式
- 压缩形式
- 反对语言
- 字符集
54. 如果面试问,什么是队头阻塞问题,你能答复上来不?????
TCP 中是报文,HTTP 是申请。
对于解决 HTTP 的队头阻塞问题是:并发连贯和域名分片。
55. 如果面试问,说说你对 HTTP 代理的了解,你能答复上来不?????
代理服务器性能:1,负载平衡,2,保障平安(利用心跳机制监控服务器,一旦发现故障机就将其踢出集群。),3,缓存代理。
了解代理缓存:
- 由一个代理服务器下载的页面存储;
- 一个代理服务器为多个用户提供一条通道;
- 缓冲的代理容许一个代理服务器缩小对同一个网站的同样页面的申请次数
- 一旦代理服务器的一个用户申请了某个页面,代理服务器就保留该页面以服务于它的其余用户的同样的申请
- 代理缓存,这种解决缩小了用户期待页面显示的工夫
缓存的作用:
代理服务器或客户端本地磁盘内保留的资源正本,利用缓存可缩小对源服务器的拜访,能够节俭通信流量和通信工夫。
示例:
Cache-Control: max-age=300;
示意工夫距离,再次申请的工夫距离 300s 内,就在缓存中获取,否则就在服务器中
Cache-Control:
- public 示意响应可被任何两头节点缓存
- private 示意两头节点不容许缓存
- no-cache 示意不应用 Cache-Control 的缓存管制形式做前置验证
- no-store 示意真正的不缓存任何货色
- max-age 示意以后资源的无效工夫
强缓存:浏览器间接从本地存储中获取数据,不与服务器进行交互
协商缓存:浏览器发送申请到服务器,浏览器判断是否可应用本地缓存
学习理解强缓存????:
强缓存次要学习 expires 和 cache-control
cache-control 该字段:max-age,s-maxage,public,private,no-cache,no-store。
cache-control: public, max-age=3600, s-maxage=3600
- 示意资源过了多少秒之后变为有效
- s-maxage 的优先级高于 max-age
- 在代理服务器中,只有 s-maxage 起作用
public 和 private
- public 示意该资源能够被所有客户端和代理服务器缓存
- private 示意该资源仅能客户端缓存
当浏览器去申请某个文件的时候,服务端就在 response header 里做了缓存的配置:
体现为:respone header 的 cache-control
学习理解✍协商缓存:
response header 外面的设置
etag: 'xxxx-xxx
last-modified: xx, 24 Dec xxx xxx:xx:xx GMT
56. 如果面试问,HTTP/2,你能答复上来不?????
HTTP/ 2 采纳哈夫曼编码来压缩整数和字符串,能够达到 50%~90% 的高压缩率。
服务器推送
57.B/S 构造定义????
浏览器 - 服务器构造,B/ S 构造,客户端不须要装置专门的软件,只须要浏览器即可,浏览器通过 web 服务器与数据库进行交互,能够不便的在不同平台下工作。
B/ S 构造简化了客户端的工作,它是随着 Internet 技术衰亡而产生的,对 C / S 技术的改良,但该构造下服务器端的工作较重,对服务器的性能要求更高。
58.URI 对立资源标识符????
对立资源标识符是一个用于标识某一互联网资源名称的字符串。该标识容许用户对网络中的资源通过特定的协定进行交互操作。URI 常见模式为对立资源定位符(URL),URN 为对立资源名称。用于在特定的命令空间资源的标识,以补充网址。
59.HTTP 协定????
HTTP 超文本传输协定是互联网上利用最为宽泛的一种网络协议。设计 HTTP 最后的目标是为了提供一种公布和接管 HTML 页面的办法。通过 HTTP 或者 HTTPS 协定申请的资源由对立资源标识符来标识
HTTP 协定次要特点
60. 数据链路????- 数据链路层
数据链路层:以太网,无线 LAN,PPP。。。(无线,光纤。。。)
- 数据链路的常识对理解 TCP/IP 与网络起到重要的作用
- 数据链路层的协定定义了通过通信媒介互连的设施传输的标准
- 物理层面是将理论的通信媒介如电压的高下,电波的强弱等信号与二进制 01 进行转换
- 数据链路层解决的数据是一种汇合为“帧”的块
- WLAN,无线局域网
- PPP,点对点协定,即是 1 对 1 连贯计算机的协定
- ATM,异步传输方式
数据链路是让互联网计算机之间互相通信的一种协定,通信伎俩
- MAC 地址用于辨认数据链路中互连的节点
- 无线通信是应用电磁波,红外线,激光等形式进行流传数据。个别在办公室的局域网范畴内组成的较高速的连贯称为无线局域网。
- IP-x-x-x,在 IP 网络上建设 x -x-x, 网络服务商提供一种在 IP 网络商应用 MPLS 技术构建 x -x- x 的服务。
61.TCP 和 UDP 的区别
TCP 是一个 面向连贯,牢靠,基于字节流 的传输层协定。
UDP 是一个 面向无连贯 的传输层协定。
TCP 是面向连贯的,客户端和服务器端的连贯,单方相互通信之前,TCP 须要三次握手建设连贯,而 UDP 没有建设连贯的过程
tcp 是面向字节流,udp 是面向报文的。UDP 的数据传输是基于数据报的,TCP 继承了 IP 层的个性,TCP 为了保护状态,将一个个 IP 包变成了字节流。
TCP 报文格式图:
- 序号:Seq 序号,占 32 位,标识从 TCP 源端口向目标端口发送的字节流,发起方发送数据时,对此进行标记
- 确认序号:Ack 序号,占 32 位,只有 ACK 标记位为 1 时,确认序号字段才无效,Ack=Seq+1
- 标记位:共 6 个,即 URG、ACK、PSH、RST、SYN、FIN 等
- URG,紧急指无效
- ACK,确认序号无效
- RST,重置连贯
- SYN,发动一个新连贯
- FIN,开释一个连贯
- PSH,接管方应该尽快将这个报文交给应用层
62. 三次握手建设连贯
TCP 的三次握手的过程:
有图可知都处于 closed 状态,服务器开始监听某个端口进入 listen 状态,客户端发动申请,发送 SYN,seq=x,而后状态变为 syn-sent 状态。
服务器端接管到返回 syn 和 ack,seq=x,ack =x+1, 而后状态变成 syn-rcvd 状态。
客户端收到后,发送 ack,seq=x+1,ack=y+ 1 给服务器端,状态变为 established,服务器收到后,状态变成 established。
在连贯过程中,须要对端确认的,须要耗费 TCP 报文的序列号。SYN 耗费一个序列号而 ACK 不须要。
对于连贯四次握手多余,二次握手,会带来资源的节约,当遇到丢包,重传,连贯敞开后,丢包达到服务端,就默认建设连贯,可客户端以及敞开,所以三次握手就能够了。
63. 四次挥手断开连接
TCP 四次挥手的过程
三次挥手,当服务器将 ack 和 fin 合并为一次挥手,会导致长时间的提早,以至于客户端误认为 fin 没有达到客户端,让客户端一直重发 fin。
64.TCP 滑动窗口
TCP 滑动窗口:
- 发送窗口
- 接管窗口
65.TCP 的拥塞管制?
TCP 连贯,拥塞管制:
- 拥塞窗口(Congestion Window,cwnd)
- 慢启动阈值(Slow Start Threshold,ssthresh)
TCP/IP 协定四层
- 应用层决定了向用户提供应用服务时通信的流动。
- 传输层对下层应用层,提供处于网络连接中两台计算机之间的数据传输。
- 网络层用来解决在网络上流动的数据包。
- 链路层,用来解决连贯网络的硬件局部。
- HTTP 协定的职责,生成对指标 web 服务器的 HTTP 申请报文
- tcp 协定的职责,为了不便通信,将 HTTP 申请报文宰割成报文段
- IP 协定的职责,搜寻对方的地址,一边直达一边传送
- TCP 协定的职责,从对方那里接管到的报文段,重组达到的报文段,按序号以原来的程序重组申请报文
66. 理解一下 DNS
DNS 是域名解析零碎,它的作用非常简单,就是依据域名查出对应的 IP 地址。
- 从根域名服务器查到顶级域名服务器的 NS 记录和 A 记录,IP 地址
- 从顶级域名服务器查到次级域名服务器的 NS 记录和 A 记录,IP 地址
- 从次级域名服务器查出主机名的 IP 地址
参考文献
- 详解浏览器分段申请根底——Range,助你理解断点续传根底
- HTTP/ 2 协定“多路复用”实现原理
- 协定学习——HTTP2 帧构造总结
- HTTP/2 幕后原理
- (倡议珍藏)TCP 协定灵魂之问,坚固你的网路底层根底
- https
- HTTP 协定入门
- HTTP cookies
- 【2】ShutdownHTTP 系列 -HTTP 报文篇
- 《网络是怎么连贯的》
- 《图解 TCP/IP》
- (倡议精读)HTTP 灵魂之问,坚固你的 HTTP 常识体系
点关注,不迷路
愿你遇到那个疼爱你付出的人~
囊括前端 Vue、JavaScript、数据结构与算法、实战演练、Node 全栈一线技术,紧跟业界倒退步调,一个酷爱前端的达达程序员。
好了各位,以上就是这篇文章的全部内容,能看到这里的人都是人才。我前面会不断更新网络技术相干的文章,如果感觉文章对你有用,欢送给个“赞”,也欢送分享,感激大家!!
喜爱本文的敌人们,欢送长按下图关注公众号达达前端,收看更多精彩内容