计算机网络面试知识点

计算机网络

计算机网络太难?了解这一篇就够了

OSI 七层模型

img

TCP 和 UDP 的区别

  • tcp 面向连接,发送数据之前必须两端连接,建立可靠连接,仅支持点对点,面向字节流,有拥塞控制
  • udp 无连接,不需要三次握手,想法数据直接发,能单播,多播,广播,面向报文,不可靠,高效

gpt

  1. 连接导向 vs 无连接:
    1. TCP 是面向连接的协议,建立连接后才能传输数据,数据传输前需要进行三次握手建立连接。
    2. UDP 则是无连接的协议,不需要建立连接即可直接传输数据。
  2. 可靠性:
    1. TCP 提供可靠的数据传输,通过 TCP 建立的连接可以保证数据的有序性、不丢失、不重复,同时还提供拥塞控制和流量控制机制。
    2. UDP 则没有可靠性保证,数据传输时可能会发生丢失、重复等情况,但是由于没有连接建立和拥塞控制等机制,UDP 传输速度较快
  3. 基于字节流 vs 基于数据包:
    1. TCP 是基于字节流的协议,应用层传输的数据被分割成 TCP 报文段进行传输,而 TCP 对于传输数据的大小并没有限制,能够保证数据的可靠性和有序性。
    2. UDP 则是基于数据包的协议,应用层传输的数据被封装成 UDP 数据包进行传输,每个 UDP 数据包的大小有限制,大数据量的数据传输需要进行分包。
  4. 适用场景:
    1. TCP 适合要求数据传输可靠、不允许数据丢失和重复的场景,如文件传输、电子邮件等;
    2. UDP 适合对数据传输速度要求较高、对数据可靠性要求不高的场景,如视频、音频等。

总之,TCP 是一种面向连接、可靠的、基于字节流的协议,UDP 是一种无连接、不可靠、基于数据包的协议。

输入 url 地址到浏览器完成渲染的过程

这个问题属于老生常谈的经典问题了 下面给出面试简单版作答

  1. 浏览器地址栏输入 URL 并回车
  2. 浏览器查找当前 URL 是否存在缓存,并比较缓存是否过期
  3. DNS 解析 URL 对应的 IP
  4. 根据 IP 建立 TCP 连接(三次握手)
  5. 发送 http 请求
  6. 服务器处理请求,浏览器接受 HTTP 响应
  7. 浏览器解析并渲染页面
  8. 关闭 TCP 连接(四次挥手)

史上最详细的经典面试题 从输入 URL 到看到页面发生了什么?

【offer 收割机之面试必备】一篇非常全面的 从 URL 输入到页面展现的全过程 精华梳理 - 掘金 (juejin.cn)

http1.1 和 http2 的区别

HTTP/1.1 和 HTTP/2 是 HTTP 协议的两个主要版本。下面是它们之间的一些主要区别:

  1. 多路复用
    1. HTTP/1.1 在同一时间只能传输一个请求/响应,因此需要建立多个 TCP 连接来处理多个请求/响应。
    2. HTTP/2 通过“多路复用”技术,可以在一个连接上同时传输多个请求/响应。
  2. 头部压缩
    1. HTTP/2 使用头部压缩技术,减少了 HTTP 头部的大小,从而减少了带宽的使用和延迟。
  3. 服务器推送
    1. HTTP/2 允许服务器在客户端请求之前主动推送资源,这样可以加速页面加载。
  4. 二进制分帧
    1. HTTP/2 在应用层和传输层之间引入了一个二进制分帧层,将请求和响应分成多个帧,每个帧都有自己的帧头,可以在一个连接中同时传输多个帧,从而实现多路复用。

总的来说,HTTP/2 相比 HTTP/1.1 在性能方面有了很大的提升,特别是对于复杂的 Web 应用程序和高负载的网站,HTTP/2 可以显著减少延迟和带宽消耗,提高用户体验。

三次握手

第一次握手:客户端向服务器发送 SYN,seq

  • SYN 报文
  • 客户端初始化随机序列号(seq)

第二次握手:服务器收到请求后,向客户端发送 SYN,ACK,seq,ack

  • SYN 报文,ACK 报文
  • 服务端的初始化随机序列号 seq
  • ack(=客户端发来的序列号+1,表示收到了)

第三次握手:客户端收到了服务器的确认应答后,向服务器发送 ACK,seq,ack

  • 确认应答 ACK 报文
  • seq,值为二次握手客户端发来的 ack 的值
  • ack,值为服务端的序列号+1,表示收到了

三次握手建立连接

四次挥手

服务端和客户端都可以发起

第一次挥手:A 发起回收请求,发送 FIN,seq

第二次挥手:B 收到了 FIN,返回 ACK,ack=seq+1

第三次挥手:B 发送 FIN

**第四次挥手:**A 收到了 FIN,发送 ACK

四次挥手关闭连接

http 和 https 的区别

HTTP:超文本传输协议 HTTPS:在 HTTP 下加入SSL 协议,即安全版的 HTTP

HTTPS 的 SSL 加密是在传输层实现的

HTTPS 协议的主要作用:建立一个信息安全通道,来确保数组的传输,确保网站的真实性。

  • 加密: HTTPS 是 HTTP 协议的更加安全的版本,通过使用 SSL/TLS 进行加密传输的数据;
  • 连接方式: HTTP(三次握手)和 HTTPS (三次握手+数字证书)连接方式不一样;
  • 端口: HTTP 默认的端口是 80 和 HTTPS 默认端口是 443
  1. 开销:HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费;

  2. 资源消耗:HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 ssl 加密传输协议,需要消耗更多的 CPU 和内存资源;

  3. 端口不同:HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443;

  4. 安全性:HTTP 的连接很简单,是无状态的;HTTPS 协议是由 TSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

https 的优缺点

  • 优点:
  1. 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
  2. HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性;
  3. HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
  • 缺点:
  1. HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;

  2. HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

  3. SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用;

  4. SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗;

  5. HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

https 加密过程

https 通信的过程氛围两个阶段:握手和数据传输

握手阶段:

  • 客户端向服务器发送 SSL/TLS 版本,加密算法列表,随机数等信息

  • 服务器返回整数,写上加密算法,生成随机数等,并且通过数字签名确保证书的正确

  • 客户端更具证书验证服务器身份,生成随机数,用公钥加密传输数据

  • 服务器用私钥解密拿到随机数

  • 然后生成会话密钥

  • 客户端使用 https url 访问服务器,则要求 web 服务器建立 ssl 连接

  • web 服务器收到客户端请求之后,会将网站的证书传输给客户端

  • 客户端和服务器协商 SSL 连接的安全等级

  • 通过双方确立的安全等级建立会话密钥,然后通过网站的公钥加密会话密钥,并传送给网站

  • web 服务器通过自己的私钥解密出会话密钥

  • web 服务器通过会话密钥与客户端之间通信

  1. 客户端发起 HTTPS 请求,连接到服务器的 443 端口。
  2. 服务器将自己的数字证书(包含公钥)发送给客户端。
  3. 客户端收到数字证书后,验证证书的合法性,包括验证证书的颁发机构和有效期。
  4. 客户端生成一个随机的对称加密密钥,并使用服务器的公钥对其进行加密,发送给服务器。
  5. 服务器使用自己的私钥解密客户端发送的密钥,获取到对称加密密钥。
  6. 服务器和客户端都拥有了相同的对称加密密钥,之后的通信将使用该密钥进行加密和解密。

http 状态码

1xx:指示信息–表示请求已接收,继续处理。

2xx:成功–表示请求已被成功接收、理解、接受。

3xx:重定向–要完成请求必须进行更进一步的操作。

4xx:客户端错误–请求有语法错误或请求无法实现。

5xx:服务器端错误–服务器未能实现合法的请求。 平时遇到比较常见的状态码有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500

常见状态码区别

200 成功

请求成功,通常服务器提供了需要的资源。

204 无内容

服务器成功处理了请求,但没有返回任何内容。

301 永久移动

请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302 临时移动

服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

304 未修改

自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

400 错误请求

服务器不理解请求的语法。

401 未授权

请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

403 禁止

服务器拒绝请求。

404 未找到

服务器找不到请求的网页。

422 无法处理

请求格式正确,但是由于含有语义错误,无法响应

500 服务器内部错误

服务器遇到错误,无法完成请求。

WebSocket 建立过程

  1. 客户端发送一个 HTTP 请求,其中包含 Upgrade 头部,指定要升级的协议为 WebSocket。
  2. 服务器收到请求后,进行协议升级的处理,验证是否支持 WebSocket 协议。
  3. 如果服务器支持 WebSocket 协议,它将返回一个 HTTP 响应,其中包含 Upgrade 头部,表示同意升级为 WebSocket 协议。
  4. 客户端收到服务器的响应后,也会发送一个 HTTP 响应,表示同意升级为 WebSocket 协议。
  5. 客户端和服务器之间建立了 WebSocket 连接,后续的通信将使用 WebSocket 协议进行。