版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/julian_draxler/article/details/86675487

前端面试–计算机网络总结
一、TCP/IP

  ISO制定了国际标准OSI(开放式系统互联网通信参考模型),将复杂的协议分为7层。TCP/IP将通信的过程抽象为4层,被视为简化的OSI模型,由IETF负责维护。

应用层  (应用层):SMTP、FTP、HTTP
表示层  (应用层)
会话层  (应用层)
传输层  (传输层):TCP、UDP
网络层  (互联网层):IP
数据链路层(网络接口层):以太网
物理层  (网络接口层)

  发送的数据会在分层模型内传递,每到一层,就会附加该层的包首部–包含该层的协议的相关信息,包括MAC地址、IP地址和端口号。
二、HTTP(HTTP1.1)

HTTP即超文本传输协议,是一种获取网络资源(如图像、HTML、文档)的应用层协议,由请求和响应构成。
1、URI和URL

  URI:统一资源标识符,由URL(统一资源定位符)和URN(统一资源名称,URI过去的名字)组成。URL:包括绝对和相对两种表示方式,相对URL请求的资源必须在同一台服务器中。

协议方案scheme(HTTP/FTP)
登录信息user/password
主机host(用域名或IP地址表示)
端口port
路径path
查询字符串query
片段frag

2、HTTP协议

  HTTP协议有三个特征:持久连接、管道化以及无状态。

持久连接:通信两端的任意一端没有明确提出断开,就保持连接状态。
管道化:将队列顺序迁移到服务器,可以同时发送多个请求。
状态管理:HTTP是无状态协议,请求和响应一一对应,每个请求都是独立的。为了能够管理状态,引入了Cookie技术。

3、HTTP报文

  HTTP报文就是HTTP协议通信的内容,是一种简单的格式化数据块,由带语义的纯文本组成。

请求报文:请求方法、请求URL、HTTP协议版本、可选的请求首部和内容
响应报文:HTTP协议版本、状态码、原因短语、可选的响应首部和内容

  请求方法:GET获取数据、POST提交数据、PUT上传文件、DELETE删除文件、HEAD获取除了内容以外的资源信息。
  状态码:1xx信息、2xx成功、3xx重定向、4xx客户端错误、5xx服务器错误。
4、HTTP首部

通用首部:既可以存在于请求中,也可以存在于响应中。
请求首部:只存在于请求报文中,提供客户端的信息及对服务器的要求。accept首部表示可接受的MIME类型,MIME类型就是媒体类型,accept首部能同时制定多种媒体类型并分别增加权重。
响应首部:只存在于响应报文中,提供服务器的信息及对客户端的要求。
实体首部:请求和响应都可能包含实体首部,提供大量的实体信息。
扩展首部

5、缓存

缓存的处理过程:
(1)在缓存中搜索制定资源的副本,如果命中就执行第二步。
(2)对资源副本进行新鲜度检测,如果不新鲜就执行第三步。
(3)与服务器进行再验证。验证通过就更新资源副本的新鲜度,再返回这个资源副本;不通过就从服务器返回资源,再讲最新资源的副本放入缓存中。

新鲜度检测:通用首部Cache-Control和实体首部Expires会为每一个资源附加一个过期日期。实体首部会指定具体地过期日期,但由于服务器的时钟不同步会导致误差;通用首部能制定资源处于新鲜状态的秒数。Cache-Control中no-cache可以将资源缓存,no-store禁止资源被缓存。
日期比对法进行再验证:在响应报文中附加实体首部Last-Modified指明资源最后修改日期。验证时,在请求报文中附加If-Modified-Since首部,携带最后修改日期,与服务器上的日期进行对比。依赖服务器上日期准确。
实体标记法进行再验证:服务器会为每个资源生成唯一的字符串形式的标记,保存在实体首部ETag中。验证时,在请求报文中附加If-None-Match首部,只有当携带的标记与服务器上的资源一致时,才能说明缓存没有过期。

三、TCP

  TCP是一种面向连接、可靠的字节流通信协议,位于传输层中,具有顺序控制、重发控制、流量控制和拥塞控制等功能。

  TCP进行数据传输的通信过程:

通过三次握手建立连接。
把发送窗口调整到合适的大小(避免网络拥塞,提高传输效率)。
发出的每个包都会得到对面的确认。包丢失时可以执行超时重发;包乱序时可以根据序号按顺序排列;同时也能丢弃重复的包。
根据端口号将数据准确传送至通信中的应用程序。
待所有数据安全到达后,执行四次挥手断开连接。

1、连接管理

三次握手(二次握手不可靠,因为延迟等原因会建立无效的连接):

客户端发送一个携带SYN标志位的包,请求建立连接。
服务器响应一个携带SYN和ACK标志位的包,同意建立连接。
客户端再发送一个携带ACK标志位的包,表示连接成功,开始进行数据传输。

四次挥手:

客户端发送一个携带FIN标志位的包,请求断开连接。
服务器响应一个携带ACK标志位的包,同意客户断开连接。
服务器再发送一个携带FIN标志位的包,请求断开连接。
客户端最后发送一个携带ACK标志位的包,同意服务器断开连接。

2、确认应答

字段:Seq表示每个包的序号,用于排列乱序的包;Len表示数据的长度,不包括TCP头信息;Ack表示确认号,用于确认已经收到的字节。Seq等于上一个包中的Seq和Len的和;Ack等于对面发送过来的包中Seq和Len之和。通信两端会维护各自的Seq。
延迟确认:在一段时间内如果没有数据发送,就将几个确认信息合并成一个包再一起确认。
Nagle算法:发出的数据没有得到确认之前,又有几块小数据要发送,就把它们合并成一个包,再一起发送。

延迟确认和Nagle都能够降低网络负担,提升传输效率,但不能结合使用。
3、窗口控制

  数据包所能携带的最大数据量称为MSS。当TCP传送大块数据的时候,会先将其分割为多个MSS再进行传输。MSS是发送数据包的单位,重发时也是以MSS为单位。在建立连接时,两端都会告诉对方自己所能接受的MSS的大小,然后选择一个较小的值投入使用。

发送窗口:控制一次能发的字节量,即一次能发MSS数量。阈值被称为拥塞点。
拥塞窗口:开始时通过慢启动对拥塞窗口进行控制;拥塞窗口的大小超过慢启动阈值时,改用拥塞避免方法。

4、重传控制

超时重传:TCP会设定一个超时重传计数器(RTO),定义数据包从发出到失效的时间间隔。在这段时间内没有收到确认,就会重传这个包。超时重传严重降低传输性能,重传后还需要调整拥塞窗口。
快速重传:当发送方连续收到3个或3个以上对相同数据包的重复确认时,就会认为数据包丢失了并立即重发。

四、HTTPS

  HTTPS是一种构建在SSL或TLS上的HTTP协议,是HTTP的安全版本。

TTP不安全的原因:

数据以明文传递,有被窃听的风险。
接收到的报文无法证明是发送时的报文,不能保障完整性,有被篡改的风险。
不验证通信两端的身份,请求或相应有被伪造的风险。

1、加密

  HTTPS采用混合加密机制,将对称加密和非对称加密算法组合使用。交换公钥阶段使用非对称加密,传输报文阶段使用对称加密。
2、数字签名

  数字签名由发送者生成的特殊加密校验码,用于确认报文的完整性,包括非对称加密和数字摘要(将变长的报文提取成定长的摘要,常用MD5和SHA)。

签名和校验的过程:

发送方用摘要算法对报文进行提取,生成一段摘要。
用私钥对摘要进行加密作为数字签名附在报文上,一起发送给接收方。
接收方收到报文后,用同样的摘要算法提取出摘要。
再用接收到的公钥对报文中的数字签名进行解密。
如果两个摘要相同,就证明报文没被篡改。

3、数字证书

  数字证书相当于网络上的身份证,用于身份识别,内容包括有效期、颁发机构、颁发机构的签名、证书所有者的名称、证书所有者的公开密钥、版本号和唯一序列号等信息。
4、安全通信机制

客户端发送Client Hello报文开始SSL通信,报文中还包括协议版本号、加密算法等信息。
服务器发送Server Hello报文作为应答,在报文中也会包括协议版本号、加密算法等信息。
服务器发送数字证书,数字证书中包含服务器的公开密钥。
客户端解开并验证数字证书,验证通过后,生成一个随机密码串,在用收到的服务器公钥加密,发送给服务器。
客户端再发送Change Cipher Spec报文,提示服务器在此条报文之后,采用刚刚生成的随机密码串进行数据加密。
服务器也发送Change Cipher Spec报文。
SSL连接建立完成,可以开始数据传输。

五、HTTP2.0

  HTTP2.0是HTTP1.1的拓展版本,主要基于Google发布的SPDY协议,引入了全新的二进制分帧层。HTTP2.0的目标是优化应用,突破性能限制,改善用户在浏览Web页面时的速度体验。

HTTP1.1中5个有代表性的不足:

在传输中会出现首阻塞问题。
响应不分轻重缓急只会按先来后到的顺序执行。
并行通信需要建立多个TCP连接。
服务器不能主动推送客户端想要的资源,只能被动的等待客户端发起的请求。
由于HTTP是无状态的,所以每次请求和响应会携带大量冗余信息。

1、二进制分帧层

  二进制分帧层是HTTP2.0性能增强的关键,先对数据进行二进制编码,再把数据分成一个一个的帧,接着把帧送到数据流中,最后对接收帧拼成一条消息再处理请求。在HTTP2.0中,通信最小的单位为帧,若干帧组成一条消息,若干条消息在数据流中传输,一个TCP连接可以分出若干条数据流,因此只建立一次TCP连接就能完成所有传输。
2、多路通信

  队首阻塞:TCP中途出现丢包,发送方会根据重发机制再发一次丢失的包,由于通信两端都是串行处理请求的,所以接收端在等待这个包到达之前,不会再处理后面的请求。
  HTTP2.0不仅解决了队首阻塞问题,还将TCP建立次数降低到一次。通信两端只需将消息分解为独立的帧,然后在多条数据中乱序发送,最后在接收端把帧重新组合成消息,并且各条消息的组合互不干扰,实现真正意义上的并行通信,达到多路复用的效果。
3、请求优先级

  在HTTP2.0中,每条数据流都有一个31位的优先值,值越小优先级越大,0的优先级最高。
4、服务器推送

  HTTP2.0支持服务器主动推送,一次请求返回多个响应,处理最初的请求外,还会额外推送客户端想要的资源。主动推送的资源可以缓存和压缩,客户端可以主动拒绝推送过来的资源。
5、首部压缩

  HTTP2.0利用HPACK算法,让通信两端各自维护一张首部字典表(表中包含了首部名和首部值),对首部进行压缩,再进行传输。每次请求都会记住已发的首部,下一次只需传输不同的数据,相同的数据传索引即可。
以上内容源自《前端程序员面试笔试宝典》
————————————————
版权声明:本文为CSDN博主「buptlinchunyu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/julian_draxler/article/details/86675487

Last modification:October 3rd, 2019 at 02:08 am
如果觉得我的文章对你有用,请随意赞赏