前端面试的计算机网络部分(2)每天10个小知识点

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 前端面试的计算机网络部分(2)每天10个小知识点

知识点

11. DNS 完整的查询过程

DNS(Domain Name System)是一种用于将域名转换为IP地址的系统,使我们能够通过易记的域名访问互联网资源。DNS查询过程可以分为递归查询和迭代查询两种方式,下面我将详细解释这两种查询过程,并提供相应的代码示例。

递归查询过程:

  1. 客户端发起查询请求: 当用户在浏览器中输入一个域名时,操作系统的DNS解析库将会向本地DNS服务器发起一个递归查询请求。
  2. 本地DNS服务器查询根域名服务器: 本地DNS服务器收到查询请求后,首先会向根域名服务器发送查询请求,以获取顶级域名服务器的IP地址。
  3. 根域名服务器返回顶级域名服务器IP地址: 根域名服务器返回包含顶级域名服务器IP地址的响应。
  4. 本地DNS服务器查询顶级域名服务器: 本地DNS服务器接收到根域名服务器的响应后,会向顶级域名服务器发送查询请求,以获取目标域名的权威域名服务器的IP地址。
  5. 顶级域名服务器返回权威域名服务器IP地址: 顶级域名服务器返回包含权威域名服务器IP地址的响应。
  6. 本地DNS服务器查询权威域名服务器: 本地DNS服务器接收到顶级域名服务器的响应后,会向权威域名服务器发送查询请求,以获取目标域名对应的IP地址。
  7. 权威域名服务器返回IP地址: 权威域名服务器返回目标域名对应的IP地址。
  8. 本地DNS服务器缓存结果: 本地DNS服务器将获取的IP地址缓存起来,以备将来的查询。
  9. 本地DNS服务器将IP地址返回给客户端: 本地DNS服务器将获取的IP地址返回给客户端的DNS解析库。
  10. 客户端发起连接请求: 客户端使用获取到的IP地址发起与目标服务器的连接请求。

下面是一个简化的Node.js代码示例,演示了如何进行递归查询过程:

const dns = require('dns');
const domainName = 'www.example.com';
dns.resolve(domainName, (err, addresses) => {
  if (err) {
    console.error('DNS resolution error:', err);
    return;
  }
  console.log(`IP addresses for ${domainName}:`, addresses);
});

迭代查询过程:

  1. 客户端发起查询请求: 同样,当用户在浏览器中输入一个域名时,操作系统的DNS解析库将会向本地DNS服务器发起一个迭代查询请求。
  2. 本地DNS服务器查询根域名服务器: 本地DNS服务器向根域名服务器发送查询请求。
  3. 根域名服务器返回顶级域名服务器IP地址: 根域名服务器返回包含顶级域名服务器IP地址的响应。
  4. 本地DNS服务器查询顶级域名服务器: 本地DNS服务器向顶级域名服务器发送查询请求。
  5. 顶级域名服务器返回权威域名服务器IP地址: 顶级域名服务器返回包含权威域名服务器IP地址的响应。
  6. 本地DNS服务器查询权威域名服务器: 本地DNS服务器向权威域名服务器发送查询请求。
  7. 权威域名服务器返回IP地址: 权威域名服务器返回目标域名对应的IP地址。
  8. 本地DNS服务器将IP地址返回给客户端: 本地DNS服务器将获取的IP地址返回给客户端的DNS解析库。
  9. 客户端发起连接请求: 客户端使用获取到的IP地址发起与目标服务器的连接请求。

迭代查询过程中,每次查询都是在上一级的DNS服务器中进行,直到获得目标域名对应的IP地址。

请注意,实际的DNS查询过程可能会更加复杂,涉及到缓存、负载均衡等因素。上述示例只是一个简化的描述和代码演示。

12. OSI 七层模型

OSI(Open Systems Interconnection)七层模型是计算机网络领域中的一种概念性框架,用于描述计算机网络中不同层次的通信协议和功能。每一层都负责不同的任务,从底层的物理传输到顶层的应用。以下是OSI七层模型的每一层及其功能的详细说明:

  1. 物理层(Physical Layer):
  • 功能:处理物理连接、电压、比特流等硬件层面的细节,负责数据的传输和接收。
  • 示例:传输介质、网线、光纤、信号编码。
  1. 数据链路层(Data Link Layer):
  • 功能:在直接相连的两个节点之间提供可靠的数据传输,通过帧(Frame)管理错误控制和流控。
  • 示例:以太网、无线局域网(WiFi)等。
  1. 网络层(Network Layer):
  • 功能:实现不同网络之间的数据路由和转发,提供跨网络的数据传输。
  • 示例:IP(Internet Protocol)、路由器。
  1. 传输层(Transport Layer):
  • 功能:为端到端通信提供可靠性和数据分割/重组,处理数据传输的错误恢复和流量控制。
  • 示例:TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)。
  1. 会话层(Session Layer):
  • 功能:管理会话的建立、维护和终止,控制数据交换的方式和顺序。
  • 示例:会话控制、同步和管理。
  1. 表示层(Presentation Layer):
  • 功能:处理数据的格式转换、加密解密和压缩解压缩等,确保不同系统的数据格式兼容性。
  • 示例:数据格式转换、加密、压缩。
  1. 应用层(Application Layer):
  • 功能:提供用户应用程序与网络通信的接口,包括应用协议(如HTTP、SMTP、FTP)。
  • 示例:Web浏览器、电子邮件客户端、文件传输客户端等。

这些七层共同构成了一个分层的通信协议框架,使不同的网络设备和应用能够通过特定的协议进行通信,各层之间的分离也使得网络协议的开发、维护和升级更加灵活和可扩展。需要注意的是,实际网络协议可能并不都严格遵循七层模型,一些协议可能会涵盖多个层次的功能。

13. TCP 的三次握手和四次挥手

TCP(Transmission Control Protocol)是一种可靠的传输协议,用于在计算机网络中实现可靠的数据传输。在建立和终止TCP连接时,涉及到三次握手和四次挥手的过程。

三次握手(Three-Way Handshake):

三次握手是用于建立TCP连接的过程,确保双方都能够通信。

  1. 第一次握手(SYN): 客户端发送一个带有 SYN(同步序列号)标志的包,请求建立连接。
  2. 第二次握手(SYN + ACK): 服务器接收到客户端的请求后,发送一个带有 SYN 和 ACK 标志的包,表示同意建立连接。
  3. 第三次握手(ACK): 客户端收到服务器的确认后,发送一个带有 ACK 标志的包,确认连接已建立。

此时,TCP连接已建立,双方可以开始进行数据传输。

四次挥手(Four-Way Handshake):

四次挥手是用于终止TCP连接的过程,确保双方都完成了数据传输。

  1. 第一次挥手(FIN): 客户端或服务器其中一方发送一个带有 FIN(结束)标志的包,表示想要终止连接,但仍然可以接收数据。
  2. 第二次挥手(ACK): 接收到终止请求的一方发送一个带有 ACK 标志的包,确认收到了终止请求。
  3. 第三次挥手(FIN): 接收到确认的一方在完成了所有数据发送后,发送一个带有 FIN 标志的包,表示它已经没有数据要发送了。
  4. 第四次挥手(ACK): 另一方收到终止请求后,发送一个带有 ACK 标志的包,确认收到终止请求。

此时,TCP连接已经终止,双方都不再能够进行数据传输。

下面是一个简化的文本示例,演示了三次握手和四次挥手的过程:

三次握手:
客户端 -> 服务器: SYN
服务器 -> 客户端: SYN + ACK
客户端 -> 服务器: ACK
数据传输阶段...
四次挥手:
客户端 -> 服务器: FIN
服务器 -> 客户端: ACK
服务器 -> 客户端: FIN
客户端 -> 服务器: ACK

这些握手和挥手过程确保了双方在建立和终止连接时的可靠通信。实际应用中,网络延迟和异常情况可能会影响握手和挥手的细节。

14. DNS解析过程

DNS解析是将域名转换为IP地址的过程,使得我们可以通过易于记忆的域名访问互联网资源。DNS解析涉及多个步骤,下面是DNS解析过程的详细说明:

  1. 浏览器发起解析请求: 当用户在浏览器中输入一个网址(域名)时,浏览器会向操作系统的DNS解析库发起解析请求。
  2. 本地DNS缓存查询: 解析库首先会在本地缓存中查找是否已经解析过该域名。如果找到了,解析过程将会结束,直接使用缓存中的IP地址。
  3. 本地DNS服务器查询: 如果本地缓存中没有找到对应的IP地址,解析库会将解析请求发送给本地DNS服务器,通常由ISP(互联网服务提供商)提供。
  4. 根域名服务器查询: 如果本地DNS服务器也没有缓存该域名的IP地址,它会向根域名服务器发起查询请求,询问顶级域名服务器的地址。
  5. 顶级域名服务器查询: 根域名服务器返回顶级域名服务器的地址,本地DNS服务器随即向顶级域名服务器发起查询请求。
  6. 权威域名服务器查询: 顶级域名服务器返回权威域名服务器的地址,本地DNS服务器再次向权威域名服务器发起查询请求。
  7. 权威域名服务器返回IP地址: 权威域名服务器返回包含目标域名对应IP地址的响应。
  8. 本地DNS服务器缓存结果: 本地DNS服务器将获取到的IP地址缓存起来,以备将来的查询。
  9. 本地DNS服务器将IP地址返回给解析库: 本地DNS服务器将获取到的IP地址返回给操作系统的DNS解析库。
  10. 解析库将IP地址返回给浏览器: 操作系统的DNS解析库将获取到的IP地址返回给浏览器,浏览器可以使用这个IP地址与目标服务器建立连接。
  11. 浏览器发起连接请求: 浏览器使用获取到的IP地址向目标服务器发起连接请求,开始进行数据传输。

需要注意的是,DNS解析过程可能会因网络延迟、缓存、DNS服务器性能等因素而有所不同。但总体来说,上述步骤描述了DNS解析的一般流程。

15. 什么是协议缓存和预连接吗?它们如何影响网络性能?

协议缓存(也称为HSTS)和预连接是两种前端网络优化技术,它们可以显著影响网络性能和安全性。

  1. 协议缓存(HTTP Strict Transport Security - HSTS): HSTS是一种安全性机制,旨在强制客户端在与服务器通信时始终使用加密的HTTPS连接,而不是明文的HTTP连接。当服务器发送HSTS头部给浏览器后,浏览器会在一定时间内(称为"最大年龄")强制使用HTTPS,即使用户尝试使用HTTP也会被自动转到HTTPS连接。
    影响网络性能: HSTS能够提升安全性,避免中间人攻击和数据劫持。但是,HSTS可能会导致初始的HTTPS连接延迟,因为浏览器在第一次访问时需要获取服务器的HSTS策略。一旦获取到策略后,后续的连接会直接使用HTTPS,提高了访问速度。
  2. 预连接(Preconnect): 预连接是一种浏览器优化技术,通过在浏览器渲染过程中提前建立DNS解析、TCP握手和TLS握手连接,来预加载将来可能需要的域名。这对于第三方域名、CDN等资源域名特别有用,因为它们通常需要额外的网络往返时间。
    影响网络性能: 预连接可以显著减少请求的网络延迟,因为当浏览器准备发起实际的请求时,DNS解析、TCP握手和TLS握手已经完成。这可以提高页面加载速度,特别是对于使用外部资源的页面。

综合来看,协议缓存和预连接都是前端网络优化技术,它们对网络性能有积极影响。协议缓存提高了安全性,虽然可能在初始连接上产生一些延迟。预连接则减少了网络往返时间,提高了资源加载速度。根据具体的应用场景,可以合理应用这些技术来提升网站的性能和安全性。

16. 服务器处理请求并返回HTTP报文过程

服务器处理请求并返回HTTP报文是Web应用程序的基本交互过程。以下是服务器处理请求并返回HTTP报文的详细步骤:

  1. 客户端发送HTTP请求: 当用户在浏览器中输入URL或点击链接时,浏览器会生成一个HTTP请求,将其发送到目标服务器。
  2. 服务器接收请求: 服务器接收到客户端发送的HTTP请求。
  3. 解析HTTP请求: 服务器解析HTTP请求中的各个部分,如请求方法、请求路径、请求头、请求体等。
  4. 处理请求: 服务器根据请求的内容和服务器端的逻辑,执行相应的处理。这可能涉及数据库查询、计算、生成内容等。
  5. 生成HTTP响应: 服务器生成一个HTTP响应,包括响应状态码、响应头和响应体。
  6. 设置响应头: 服务器设置HTTP响应的头部信息,包括内容类型、缓存策略等。
  7. 生成响应体: 服务器生成HTTP响应的主体部分,包括HTML内容、JSON数据等。
  8. 发送HTTP响应: 服务器将生成的HTTP响应发送回客户端。
  9. 客户端接收响应: 客户端(通常是浏览器)接收服务器发送的HTTP响应。
  10. 解析HTTP响应: 客户端解析HTTP响应中的状态码、响应头和响应体。
  11. 渲染响应内容: 浏览器根据响应头中的内容类型以及响应体中的数据,进行页面渲染或数据展示。
  12. 显示页面内容: 浏览器将渲染后的内容显示给用户,用户可以看到网页内容或应用程序界面。

这个过程中涉及到HTTP请求和响应,其中HTTP请求包含HTTP方法(GET、POST等)、URL路径、请求头和请求体,而HTTP响应包括响应状态码、响应头和响应体。这种交互模式使得客户端和服务器能够进行有效的通信,实现Web页面和应用的展示与交互。

17.TCP、UDP和HTTP的区别

TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)和HTTP(Hypertext Transfer Protocol)是计算机网络中常用的三种协议,它们在不同层面上具有不同的特点和用途。以下是它们之间的区别:

  1. TCP(传输控制协议):
  • 特点: TCP是一种可靠的、面向连接的协议,它保证数据的可靠传输,确保数据按顺序到达目标。TCP提供了错误检测、流量控制和拥塞控制等功能,以保证数据传输的稳定性和可靠性。
  • 用途: 适用于需要可靠数据传输的场景,如网页浏览、文件下载、电子邮件等。
  1. UDP(用户数据报协议):
  • 特点: UDP是一种无连接的协议,不保证数据的可靠传输,也没有拥塞控制等机制。UDP更加轻量级,传输速度较快,但可能会丢失部分数据包。
  • 用途: 适用于对传输速度要求较高、但数据丢失不会对应用造成重大影响的场景,如实时音视频传输、在线游戏等。
  1. HTTP(超文本传输协议):
  • 特点: HTTP是一种应用层协议,用于在Web浏览器和服务器之间传输超文本数据。它是无状态的,每个请求都是独立的,不保留之前请求的信息。HTTP有两种主要版本:HTTP/1.1和HTTP/2,后者引入了多路复用等优化特性。
  • 用途: 用于浏览器和服务器之间传输网页内容、图像、视频等,支持与服务器交互,包括GET请求(获取数据)、POST请求(提交数据)等。

总结:

  • TCP提供可靠的连接和数据传输,适用于需要确保数据完整性和顺序的应用。
  • UDP提供更快的传输速度,适用于实时性要求高且能容忍少量数据丢失的应用。
  • HTTP是应用层协议,用于在浏览器和服务器之间传输数据,支持网页浏览、数据交互等。HTTP本身可以基于TCP或UDP实现。

不同的协议根据应用需求选择合适的通信方式,以满足性能、可靠性和实时性等要求。

18. 说一下你对http状态码的了解多少?

HTTP状态码是在HTTP协议中用来表示服务器对请求的响应结果的数字代码。它们提供了关于请求的处理情况的信息,帮助客户端了解服务器端的操作状态。HTTP状态码由三位数字组成,分为五个类别,每个类别代表不同类型的响应。以下是对HTTP状态码的一些常见了解:

  1. 1xx - 信息性响应:表示请求已经被接收,继续处理。
  • 100 Continue:服务器已收到请求的初始部分,客户端应该继续发送其余部分。
  1. 2xx - 成功:表示请求已成功被服务器理解、接受和处理。
  • 200 OK:请求成功,正常返回结果。
  • 201 Created:请求成功,服务器创建了新的资源。
  • 204 No Content:请求成功,但响应中不包含实体主体内容。
  1. 3xx - 重定向:表示需要客户端进一步操作以完成请求。
  • 301 Moved Permanently:永久性重定向,请求的资源已经被永久移动到新的URL。
  • 302 Found:临时性重定向,请求的资源暂时被移动到新的URL。
  1. 4xx - 客户端错误:表示客户端发起的请求有误或无法被服务器处理。
  • 400 Bad Request:请求错误,服务器无法理解请求。
  • 401 Unauthorized:未授权,需要用户认证或登录。
  • 403 Forbidden:禁止访问,服务器拒绝请求。
  • 404 Not Found:未找到,请求的资源不存在。
  1. 5xx - 服务器错误:表示服务器在处理请求时出现错误。
  • 500 Internal Server Error:服务器内部错误。
  • 502 Bad Gateway:网关错误,服务器充当网关或代理,从上游服务器接收到无效响应。
  • 503 Service Unavailable:服务不可用,服务器当前无法处理请求。
  • 504 Gateway Timeout:网关超时,上游服务器在规定时间内未响应。

每个状态码都有特定的含义,客户端根据状态码来判断请求是否成功以及如何进一步处理。在编写Web应用程序时,了解HTTP状态码能够帮助你更好地处理不同情况下的请求和响应。

19.在优化网络性能的同时,如何确保用户的数据隐私和安全?

在优化网络性能的同时确保用户数据隐私和安全是至关重要的。以下是一些方法和策略,可以在网络性能优化的前提下保护用户的数据隐私和安全:

  1. 使用加密通信: 使用HTTPS(基于SSL/TLS)来加密用户与服务器之间的通信,确保数据在传输过程中不容易被窃取或篡改。HTTPS协议通过数字证书验证服务器的身份,保护数据的机密性和完整性。
  2. 数据最小化原则: 采用数据最小化的原则,只收集、存储和处理必要的用户数据。减少不必要的数据收集可以降低隐私风险。
  3. 合规性和法律法规遵循: 遵循适用的隐私法律法规,如欧洲的GDPR、美国的CCPA等。确保在收集、存储和处理用户数据时遵循相关合规性要求。
  4. 数据加密存储: 除了在传输过程中加密数据,还应该在存储时对敏感数据进行加密。这可以防止数据泄露,即使服务器被入侵也能保护用户信息。
  5. 强化身份验证: 对用户进行强化身份验证,使用多因素认证(MFA)等方式,以确保只有授权的用户可以访问敏感信息。
  6. 安全开发实践: 在开发过程中采用安全的编码实践,避免常见的安全漏洞,如SQL注入、跨站脚本攻击等。
  7. 安全审计和监控: 定期对系统进行安全审计和监控,及时检测异常活动并采取措施防范潜在的安全威胁。
  8. 隐私政策和透明度: 提供清晰的隐私政策,告知用户数据如何收集、使用和保护。让用户明确知道他们的数据会被如何处理。
  9. 数据保留期限: 定义数据保留期限,一旦数据不再需要,应该进行安全且彻底的删除。
  10. 教育和培训: 对员工和开发团队进行安全和隐私方面的培训,提高大家对数据安全和隐私的意识。

综合考虑网络性能和数据隐私安全,可以采用综合性的安全策略,确保在提供高效网络服务的同时,用户的数据得到充分保护。

20.如何利用前端网络优化来提高用户满意度和积极体验?

前端网络优化是提高用户满意度和积极体验的关键因素之一。通过减少加载时间、提高页面响应速度和优化用户界面,可以使用户获得更快、更流畅的访问体验。以下是一些前端网络优化的方法,可以提高用户满意度和积极体验:

  1. 压缩资源: 压缩CSS、JavaScript和图像等前端资源,减少文件大小,加快下载速度。
  2. 使用浏览器缓存: 使用HTTP缓存头,使得浏览器能够缓存页面资源,减少重复下载。
  3. CDN加速: 使用内容分发网络(CDN)来分发静态资源,将资源放置在全球分布的服务器上,从离用户最近的服务器获取资源,提高加载速度。
  4. 异步加载: 使用异步加载技术,如使用asyncdefer属性加载脚本,避免阻塞页面渲染。
  5. 图片优化: 使用适当的图像格式,进行图像压缩和裁剪,以及使用图像懒加载技术。
  6. 减少HTTP请求数: 合并和精简CSS和JavaScript文件,减少HTTP请求的数量。
  7. 使用响应式设计: 使用响应式设计来适应不同屏幕尺寸和设备,提供更好的用户体验。
  8. 优化字体加载: 使用Web字体时,仅加载所需的字符和字重,避免不必要的下载。
  9. 减少重定向: 减少页面的重定向,以避免额外的网络请求。
  10. 提前加载关键资源: 预加载关键资源,使得用户点击链接时能够更快地加载页面。
  11. 使用缓存技术: 使用本地存储、SessionStorage和LocalStorage等缓存技术,减少不必要的请求。
  12. 性能监测和分析: 使用工具监测和分析页面性能,识别瓶颈并进行优化。

通过综合应用这些优化技术,可以提高网站的性能,加速页面加载速度,提供更流畅的用户体验,从而提高用户满意度和积极体验。


相关文章
|
26天前
图解一些网络基础知识点
Ethernet以太网IEEE802.3 以太网第一个广泛部署的高速局域网; 以太网数据速率快; 以太网硬件价格便宜,网络造价成本低。
29 4
|
1月前
|
负载均衡 网络协议 算法
|
1月前
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
45 13
|
1月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
1月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
66 1
|
3月前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
2月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
3月前
|
缓存 算法 网络协议
一文详细理解计算机网络 - 数据链路层(考试和面试必备)
这篇文章详细介绍了计算机网络中数据链路层的概念、基本问题、点对点信道和广播信道的数据链路协议(如PPP和CSMA/CD),以及局域网和以太网的相关知识。
249 0
一文详细理解计算机网络 - 数据链路层(考试和面试必备)
|
3月前
|
存储 网络协议 网络性能优化
一文详细理解计算机网络体系结构(考试和面试必备)
这篇文章提供了C++基础知识的快速概述,包括C++的特点、面向对象设计、组成部分、标准、学习建议、应用领域、源文件、编译器、类与对象、编译执行步骤、分号与块、标识符、基本数据类型、typedef、枚举类型、变量定义与声明等。
89 0
一文详细理解计算机网络体系结构(考试和面试必备)