跟chatGPT一起复习前端 —— 计算机网络

237 阅读14分钟

前言

又到一波面试准备的时刻,整理了一波前端相关要点内容,配合chatGPT完成要点内容的整理输出,有纠正错误和需要补充的小伙伴可以在这里留言,及时更新。

HTTP是什么

HTTP 是 Hyper Text Transfer Protocol 的缩写,是一种能够获取如 HTML 这样的网络资源的协议。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。

HTTP 有哪些请求方法

HTTP 请求方法是指对指定资源的操作方式,常用的 HTTP 请求方法有以下几种:GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS 和 TRACE。

  • GET:用于获取资源,具有幂等性,不应该对服务器上的资源产生任何影响。
  • POST:用于向服务器提交数据,不具有幂等性,可能会对服务器上的资源产生影响。
  • HEAD:与 GET 方法类似,但是只返回报头信息,不返回报文主体。
  • PUT:用于向服务器上传文件,具有幂等性,与 POST 的区别在于 POST 用于向服务器发送数据,而 PUT 用于向服务器储存数据。
  • DELETE:用于删除服务器上的文件,具有幂等性,但是服务器并不是真正的删除文件,而是给需要删除的文件做一个标记。
  • CONNECT:要求客户端与另一个远程服务器建立一个特殊的隧道,这时候 web 服务器充当代理角色。
  • OPTIONS:获取当前 URL 所支持的 HTTP 请求方法。
  • TRACE:回显服务器收到的请求信息。

HTTP 常见的请求头

HTTP 请求头是客户端向服务器发送请求时附加的控制位,告诉服务器本次请求该如何处理。以下是常见的 HTTP 请求头:

  • Accept:指定客户端能够接收的内容类型。
  • Accept-Encoding:指定客户端能够接收的内容编码。
  • Accept-Language:指定客户端当前的语言环境。
  • Connection:表示是否需要持久连接(HTTP 1.1 默认进行持久连接)。
  • Cookie:客户端通过这个头可以向服务器带数据,服务器通过 Set-Cookie 头可以向客户端写入数据。
  • Host:指定请求的服务器的域名和端口号。
  • Referer:表示当前请求是从哪个页面发起的。
  • User-Agent:客户端浏览器的相关信息。

HTTP 状态码

HTTP 状态码是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:信息响应 (100–199),成功响应 (200–299),重定向 (300–399),客户端错误 (400–499)和服务器错误 (500–599)。

常见的 HTTP 状态码有:

  • 200 OK:请求成功。
  • 204 No Content:请求成功,但没有返回任何内容。
  • 206 Partial Content:客户端进行了范围请求,服务器成功执行了这部分的 GET 请求。
  • 301 Moved Permanently:永久性重定向。
  • 302 Found:临时性重定向。
  • 304 Not Modified:客户端发送了一个带条件的 GET 请求,服务器允许访问资源,但因发生请求未满足条件的情况后,直接返回304。
  • 400 Bad Request:请求报文存在语法错误。
  • 401 Unauthorized:表示发送的请求需要有通过 HTTP 认证的认证信息。
  • 403 Forbidden:表示对请求资源的访问被服务器拒绝了。
  • 404 Not Found:表示服务器上没有找到请求的资源。
  • 500 Internal Server Error:表示服务器在执行请求时发生了错误。

HTTP 缓存策略

HTTP 缓存策略分为两种:强缓存和协商缓存,这两种缓存策略都是服务端设置 HTTP Header 来实现的。强缓存是利用 http 头中的 Expires 或 Cache-Control 来控制的,它们都表示资源在客户端的缓存时间,不同的是 Cache-Control 的优先级更高,如果同时设置,则优先使用 Cache-Control。

协商缓存是利用 http 头中的 Last-Modified 和 ETag 来控制的。当浏览器发现本地缓存过期后,它会向服务器发送请求,如果服务器端判断本地缓存仍然可用,则返回 304 状态码,通知浏览器直接使用本地缓存。

HTTP1.0 、HTTP1.1 、HTTP 2.0、HTTP 3.0

HTTP 协议目前有多个版本,其中 HTTP1.0、HTTP1.1、HTTP2 和 HTTP3 是最常见的。这些版本之间的主要区别在于它们的性能和功能。HTTP1.0 是一种无状态、无连接的协议,每次请求都需要与服务器建立一个 TCP 连接,服务器处理完成以后立即断开 TCP 连接。HTTP1.1 引入了持久连接,即 TCP 连接默认不关闭,可以被多个请求复用,不用声明 Connection: keep-alive。HTTP2 引入了二进制分帧,多路复用等新特性,提高了性能。HTTP3 引入了 QUIC 协议,可以更好地解决网络延迟问题。

HTTP 与 HTTPS 的区别 、HTTPS的握手过程

HTTP和HTTPS的区别在于,HTTP是明文传输,数据都是未加密的,安全性较差;而HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好。使用HTTPS协议需要到CA(数字证书认证机构)申请证书。HTTP页面响应速度比HTTPS快,主要是因为HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包,而HTTPS除了TCP的三个包,还要加上SSL握手需要的9个包,所以一共是12个包。

HTTPS握手过程如下:

  1. 客户端向服务器端发送一个SSL版本号、加密算法种类、随机数等信息。
  2. 服务器端向客户端返回一个SSL版本号、加密算法种类、随机数等信息,并将自己的证书信息发给客户端。
  3. 客户端验证服务器端证书的合法性,并向服务器端发送一个随机数。
  4. 服务器端验证客户端证书的合法性,并使用客户端发来的随机数、自己生成的随机数以及预共享密钥生成对称加密密钥。
  5. 客户端和服务器端都已经拥有了对称加密密钥,可以开始进行数据传输了。

HTTPS中的三个随机数是如何生成会话密钥的

预共享密钥是一种身份验证方法,要求在协商密钥前预先把参与通讯的各方安全网关对应的密钥先保存在安全网关上。在IP地址不固定的情况下只能采取所有的安全网关都用相同的密钥,这显然只能适合小型且对安全性要求不高的网络。

什么是预共享密钥?

预共享密钥是一种身份验证方法,要求在协商密钥前预先把参与通讯的各方安全网关对应的密钥先保存在安全网关上。在IP地址不固定的情况下只能采取所有的安全网关都用相同的密钥,这显然只能适合小型且对安全性要求不高的网络。

什么是对称加密?

对称加密是一种加密方式,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密。

TCP/IP 四层模型 、OSI七层模型、每一层的有哪些常见的协议

TCP/IP 四层模型和OSI七层模型都是计算机网络体系结构的标准模型。其中,TCP/IP 四层模型包括:应用层、传输层、网络层和数据链路层。而 OSI 七层模型包括:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。

常见的协议有:

  • 应用层:HTTP、FTP、SMTP、POP3 等。
  • 传输层:TCP、UDP 等。
  • 网络层:IP、ICMP 等。
  • 数据链路层:ARP 等。

TCP 的 三次握手与四次挥手(为什么是三次? 为什么是四次?)

TCP 的三次握手和四次挥手是 TCP 协议中的两个重要概念。三次握手是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。四次挥手是指断开一个 TCP 连接时,需要客户端和服务器总共发送4个包。

为什么是三次握手?因为TCP 是通过程序实现的,可靠的,面向连接的协议。而程序是严谨的,每一次建立连接都会进行“三次握手”这样的步骤。

详细流程:

  1. 客户端向服务器发送一个SYN包,并等待服务器确认。
  2. 服务器收到SYN包后,回复一个SYN+ACK包给客户端。
  3. 客户端收到SYN+ACK包后,回复一个ACK包给服务器。

为什么是四次挥手?因为TCP 是全双工模式,所以在断开连接时,需要双方都发送 FIN 包来告诉对方要断开连接。

详细流程:

  1. 客户端向服务器发送一个FIN包,表示客户端没有数据要发送了。
  2. 服务器收到FIN包后,回复一个ACK包给客户端,表示已经收到了客户端的FIN包。
  3. 服务器向客户端发送一个FIN包,表示服务器没有数据要发送了。
  4. 客户端收到FIN包后,回复一个ACK包给服务器,表示已经收到了服务器的FIN包。

TCP 的 流量控制与拥塞控制

TCP流量控制和拥塞控制是TCP协议用来解决传输数据中产生的一些问题的两种优化方法。流量控制是为了解决发送方和接收方速度不同而导致的数据丢失问题,当发送方发送的太快,接收方来不及接受就会导致数据丢失,流量控制用滑动窗口的形式解决问题。拥塞控制是为了解决过多的数据注入到网络,导致网络崩溃,超过负荷。当发送方发送数据过快,网络拥塞时,拥塞控制通过减少发送方的发送速率来避免网络资源被耗尽。

TCP 可靠传输

TCP协议的可靠传输是通过以下几种机制实现的:

  • 差错控制:确认和重传机制(超时重传,累积确认)
  • 流量控制:滑动窗口(平衡双方的发送接收速度)
  • 拥塞控制:慢启动、拥塞避免、快速恢复

TCP 滑动窗口是什么

TCP 滑动窗口是一种流量控制机制,用于网络数据传输时的流量控制,以避免拥塞的发生。

TCP 滑动窗口是通过发送方和接收方之间的协商来实现的。发送方维护一个发送窗口,接收方维护一个接收窗口。发送方根据接收方返回的确认信息来调整发送窗口的大小,以达到平衡双方的发送和接收速度的目的。

UDP和TCP区别

TCP和UDP是两种不同的传输协议。TCP是面向连接的、可靠的、有序的传输层协议,而UDP是面向数据包的、不可靠的、无序的传输协议。

TCP协议适用于对可靠性要求比较高的场合,如文件传输、电子邮件等。而UDP协议适用于对实时性有要求的场合,如视频会议、网络游戏等。

websocket协议是什么

WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层。WebSocket协议在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范。

WebSocket协议是一种双向的、在客户端-服务器通信的场景中使用的全双工协议,与HTTP不同,它以ws://wss://开头。

WebSocket 和 HTTP 的区别是什么?

WebSocket和HTTP的区别主要有以下几点:

  1. WebSocket是双向的,在客户端-服务器通信的场景中使用的全双工协议,与HTTP不同,它以ws://wss://开头。
  2. WebSocket是需要浏览器和服务器握手进行建立连接的,而HTTP是浏览器发起向服务器的连接。
  3. WebSocket是一种有状态协议,这意味着客户端和服务器之间的连接将保持活动状态,直到被任何一方(客户端或服务器)终止。
  4. HTTP是一种无状态协议,每个请求都是独立的,不会保留任何上下文信息。

DNS是如何解析的

DNS解析过程如下:

  1. 用户在浏览器中输入要访问的网址,比如www.example.com
  2. 浏览器向本地DNS服务器发送一个查询请求,询问“www.example.com”对应的IP地址是什么。
  3. 如果本地DNS服务器已经缓存了这个域名的IP地址,则直接返回给浏览器;否则,它会向其他DNS服务器发出查询请求,以找到该域名的IP地址。
  4. DNS服务器通过一个分层的体系结构进行查询,最终找到包含该域名的IP地址的顶级DNS服务器,并把结果返回给本地DNS服务器。
  5. 本地DNS服务器将该结果返回给浏览器,并将结果缓存起来,以备下次查询时使用。

CDN网络是如何分发的

CDN网络分发过程如下:

  1. 用户在浏览器中输入要访问的网址,比如www.example.com
  2. 浏览器向本地DNS服务器发送一个查询请求,询问“www.example.com”对应的IP地址是什么。
  3. 如果本地DNS服务器已经缓存了这个域名的IP地址,则直接返回给浏览器;否则,它会向其他DNS服务器发出查询请求,以找到该域名的IP地址。
  4. DNS服务器通过一个分层的体系结构进行查询,最终找到包含该域名的IP地址的顶级DNS服务器,并把结果返回给本地DNS服务器。
  5. 本地DNS服务器将该结果返回给浏览器,并将结果缓存起来,以备下次查询时使用。
  6. 浏览器向CDN边缘节点发送请求,CDN边缘节点根据用户的物理位置、网络状况等因素,选择最优的源站服务器,并将内容缓存到边缘节点上。
  7. CDN边缘节点将内容返回给用户,同时将内容缓存到本地,以备下次请求时使用。

CDN网络快的原因是什么?

CDN网络快的原因有以下几点:

  1. CDN可以覆盖全球的线路,通过和运营商合作,部署IDC资源,实现跨运营商、跨地域的全网覆盖,从而加速网站的访问。
  2. CDN可以缓存静态资源,如图片、视频等,将这些资源缓存在CDN边缘节点上,用户访问时可以直接从最近的边缘节点获取资源,避免了请求源站服务器的过程,从而提高了访问速度。
  3. CDN可以对动态内容进行加速,如动态页面、API等。CDN会将用户请求转发到源站服务器上,源站服务器返回数据后,CDN会将数据缓存到边缘节点上,并在下一次请求时直接返回缓存数据。