【计算机⽹络】面试题整理 共48题

文章目录


1. 计算机网络五层模型分别负责什么?

  1. 物理层:处理硬件传输,例如电缆、光纤等。
  2. 数据链路层:管理设备之间的数据传输,如以太网和Wi-Fi。
  3. 网络层:负责路由和IP地址,确保数据在网络中正确传递。
  4. 传输层:处理端到端通信,例如TCP和UDP。
  5. 应用层:为用户提供服务,如HTTP、DNS和SMTP。

2. IP 地址和 Mac 地址有啥区别?

IP 地址 就像是你家的门牌号码,用来标识你所在的网络。每台计算机都有一个唯一的 IP 地址,它帮助数据在网络中找到正确的目的地。
MAC 地址 则是你电脑网卡的物理地址,就像是你家门铃上的名字。每个网卡都有一个独特的 MAC 地址,用于在局域网内识别设备。

3. 三次握手

三次握手是建立 TCP 连接时的一种协议,确保通信双方能够正常交流。

  1. 第一次握手

    • 客户端(通常是你的计算机)向服务器发送一个请求,请求建立连接。
    • 客户端发送一个 SYN(同步)包,其中包含一个随机生成的序列号。
    • 证明:客户端的发送能力、服务端的接收能力是正常的。
  2. 第二次握手

    • 服务器收到客户端的请求后,确认接收,并发送一个响应。
    • 服务器发送一个 SYN-ACK 包,其中包含确认号(ACK)和另一个随机生成的序列号。
    • 证明:服务端的接收、发送能力,客户端的接收、发送能力是正常的。
  3. 第三次握手

    • 客户端收到服务器的响应后,再次确认。
    • 客户端发送一个 ACK 包,确认收到服务器的确认。
    • 此时,连接已经建立,双方可以开始正常通信。
    • 证明:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
      总之,三次握手确保了客户端和服务器之间的连接是可靠的。

4. 三次握手过程中可以携带数据吗

三次握手确保了客户端和服务器之间的连接是可靠的。而在第三次握手时,客户端已经处于 ESTABLISHED 状态,因此可以携带数据进行通信。

5. 说一说四次挥手

四次挥手是终止 TCP 连接时的协议,确保通信双方能够正常关闭连接。

  1. 第一次挥手

    • 客户端(通常是你的计算机)向服务器发送一个请求,请求关闭连接。
    • 客户端发送一个 FIN(结束)包,表示不再发送数据。
  2. 第二次挥手

    • 服务器收到客户端的请求后,确认接收,并发送一个响应。
    • 服务器发送一个 ACK 包,确认收到客户端的 FIN 包。
  3. 第三次挥手

    • 服务器也准备好关闭连接了,向客户端发送一个请求。
    • 服务器发送一个 FIN 包,表示不再发送数据。
  4. 第四次挥手

    • 客户端收到服务器的请求后,确认接收,并发送一个响应。
    • 客户端发送一个 ACK 包,确认收到服务器的 FIN 包。
    • 此时,连接已经完全关闭。

总之,四次挥手确保了客户端和服务器之间的连接被正确地关闭。

6. 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

当 TCP 连接的一端发起主动关闭,发送了最后一个 ACK 包后,即第三次握手完成后,它会进入 TIME-WAIT 状态。这个状态必须停留两倍的 MSL(Maximum Segment Lifetime,最大报文段生存时间)。

  1. 确保最后一个 ACK 包到达对方:在主动关闭时,客户端发送的最后一个 ACK 报文段有可能丢失,导致处于 LAST-ACK 状态的服务端收不到对已发送的 FIN+ACK 报文段的确认。TIME-WAIT 状态的等待时间,正是为了防止这种情况。如果服务端没有收到 ACK,它会在超时后重发第三次握手的 FIN 报文段,而客户端收到后再次发送第四次握手的 ACK 数据包。

  2. 避免连接混淆:如果不等待一段时间,就重新使用相同的源端口和目的端口,可能会导致之前连接的报文被误认为是新连接的一部分。等待 2 MSL 的时长可以确保之前连接的所有报文都已经在网络中消失,从而避免新连接与之前连接的混淆。

因此,将 TIME-WAIT 状态的时长设置为 2 MSL 是为了确保网络连接的可靠关闭和防止连接的混淆。

7. 说一说TCP与UDP的区别

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是互联网协议套件中的两个主要协议。

  1. 可靠性

    • TCP 是一种面向连接的协议。在数据传输之前,它会建立一个连接,并在整个传输过程中保持这个连接。TCP 确保所有数据都被完整地发送和接收。例如,当你浏览网页时,TCP 会确保文本、图像和代码按正确的顺序到达,以正确渲染页面。
    • UDP 是一种非连接的协议。它不会建立连接,而是直接发送数据包。UDP 更快、更简单,但不保证数据的可靠性。它适用于实时应用,如音频、视频流和在线游戏。
  2. 传输方式

    • TCP 通过三次握手建立连接,然后传输数据。它使用序列号、确认号和窗口大小来管理数据流。
    • UDP 不需要建立连接,直接发送数据包。它没有确认机制,也不保证数据的顺序。
  3. 应用场景

    • TCP 适用于需要可靠性和完整性的应用,如网页浏览、电子邮件和文件传输。
    • UDP 适用于实时应用,如语音通话、视频流和在线游戏,因为它更快且不需要等待连接建立。

总之,TCP 适用于可靠性要求高的场景,而UDP 适用于速度和效率更重要的场景。

8. TCP 和 UDP 分别对应的常见应用层协议有哪些?

  1. TCP(Transmission Control Protocol)

    • TCP 是一种面向连接的协议,它确保数据可靠地传输。
    • 常见的应用层协议包括:
      • HTTP(Hypertext Transfer Protocol):用于在不同系统之间交换超文本,例如传输网页。
      • SMTP(Simple Mail Transfer Protocol):用于电子邮件的传输。
      • FTP(File Transfer Protocol):用于文件传输。
      • Telnet:用于远程登录到其他计算机。
  2. UDP(User Datagram Protocol)

    • UDP 是一种无连接的协议,它更快但不保证数据的可靠性。
    • 常见的应用层协议包括:
      • DNS(Domain Name System):用于将域名解析为 IP 地址。
      • TFTP(Trivial File Transfer Protocol):用于简单的文件传输。
      • SNMP(Simple Network Management Protocol):用于网络设备的管理和监控。

总之,TCP 适用于需要可靠性的应用,而UDP 适用于速度和效率更重要的应用。

9. 浏览器对同一 Host 建立 TCP 连接到的数量有没有限制?

Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同浏览器可能有一些区别,但通常都会限制连接数量。如果浏览器正在使用的连接都在发送请求,其他请求就只能等待了。这是为了避免过多的连接导致资源浪费和性能问题。

以HTTP/1.1协议为例,根据其规范,对于同一个给定的域,大多数浏览器限制同时打开的TCP连接数量为6个到8个。这意味着,如果一个网页需要获取该域下的更多资源,可能需要等待前面的请求完成。

但是,在HTTP/2协议中,对于同一个域,所有的请求都可以在同一个持久连接中并行完成,从而减少了所需的连接数量。

需要注意的是,这个限制只针对同一个Host。如果一个网页的资源分布在不同的Host上,那么浏览器可以分别针对这些Host建立连接。因此,使用多个子域(比如:img1.example.com,img2.example.com)去托管网站的资源是一种常见的绕过浏览器连接限制的方式,以提高加载效率。

10. 说一说HTTP1.0,1.1,2.0 的区别

  1. HTTP/1.0

    • 无连接:HTTP/1.0 在发送每个请求之前都需要建立一个新的连接,这会造成频宽的浪费和时间延迟。
    • 队头阻塞:如果某个请求耗时较长,会阻塞其他请求的处理。
    • 缓存:主要使用 If-Modified-Since 和 Expires 来判断缓存。
    • Host 字段:HTTP/1.0 中没有 Host 字段,而是认为每台服务器都绑定唯一的 IP 地址。
  2. HTTP/1.1

    • 持久连接:HTTP/1.1 默认使用持久连接,避免频繁重新建立连接。
    • 状态码 100 (Continue):避免发送带有正文的请求被拒绝造成的频宽浪费。
    • 更多请求方法:新增了 PUT、PATCH、DELETE、CONNECT、TRACE 和 OPTIONS 等请求方法。
    • 缓存优化:引入 Etag、If-Unmodified-Since、If-Match、If-None-Match 等缓存策略。
    • Host 字段:增加了 Host 字段,用于指定服务器的域名。
  3. HTTP/2.0

    • 多路复用:在同一个 TCP 连接中同时发送和接受多个请求,解决了头部阻塞问题。
    • 头部压缩:使用 HPACK 算法压缩标头,减少传输的信息量。
    • 二进制格式:将请求和响应封装成二进制,仍保持 HTTP 语义。
    • 服务端推送:服务器可以主动向客户端推送数据,减少请求次数。

总之,HTTP/2.0 在性能、多路复用和头部压缩方面有显著改进,但 HTTP/1.1 仍然广泛使用。

11. 什么是SQL 注入?举个例子?

SQL 注入是一种常见的网络攻击方式,它利用程序员在编写代码时的疏忽,通过构造恶意的 SQL 语句,向后端数据库服务器发送请求,以获取未授权的访问或执行非预期的操作。举个例子,假设有一个包含用户名和密码的登录页面,其中用户名和密码会被拼接成一个 SQL 语句,然后发送到后端数据库服务器进行匹配验证。攻击者可以通过在用户名或密码中注入恶意的 SQL 代码,从而绕过认证,获取数据库中的敏感信息。比如,攻击者可以在用户名输入框中输入 ' or 1=1 --,然后随便输入一个密码,这样构造的 SQL 语句会绕过认证,让攻击者成功登录系统。这种漏洞可能导致数据库被篡改,甚至无需账号就能登录系统。记住,防范 SQL 注入攻击非常重要,开发人员需要对用户输入的数据进行合理性判断,避免构建不安全的 SQL 查询语句。

防范 SQL 注入攻击的一些方法:

  1. 使用参数化查询或预编译语句:不要直接将用户输入的数据拼接到 SQL 查询语句中。相反,使用参数化查询或预编译语句,将用户输入的值作为参数传递给查询,以避免注入攻击。

  2. 输入验证和过滤:在接收用户输入时,进行严格的验证和过滤。确保只接受预期的数据类型和格式,例如数字、日期或字符串。

  3. 最小权限原则:数据库用户应该具有最小必需的权限。不要使用具有完全访问权限的通用账号。

  4. 避免动态拼接 SQL 语句:尽量避免在代码中直接拼接 SQL 语句。使用 ORM(对象关系映射)工具或存储过程来处理数据库操作。

  5. 错误处理和日志记录:在应用程序中捕获 SQL 异常,并记录详细的错误信息,以便进行审计和调试。

  6. 安全审计:定期审查应用程序代码和数据库配置,以查找潜在的漏洞。

12. 谈一谈 XSS 攻击,举个例子?

当然可以!**XSS(跨站脚本攻击)**是一种常见的网络安全漏洞,攻击者通过注入恶意的客户端代码,使用户在浏览网页时受到攻击。这些恶意代码通常是 JavaScript,但也可以是其他类型的代码,如 Java、VBScript、LiveScript、ActiveX、Flash 或普通的 HTML。XSS 攻击的主要目标是窃取用户的敏感信息,例如 cookie、session tokens 等。

举个例子,假设有一个论坛网站,用户可以在评论中输入内容。一个恶意用户在评论中注入了以下代码:

<a href="javascript:alert('霓虹灯');">是兄弟就来砍我</a>

如果其他用户浏览了这篇帖子并点击了这个链接,就会执行相应的脚本,弹出“霓虹灯”三个大字。攻击者可以利用这种方式窃取用户的信息或执行其他恶意操作。

为了防范 XSS 攻击,我们可以采取以下措施:

  1. 输入验证和过滤:在接收用户输入时,进行严格的验证和过滤,确保只接受预期的数据类型和格式。
  2. 转义输出数据:在渲染页面时,使用模板引擎自带的 HTML 转义功能,避免直接插入用户输入的数据。
  3. 避免内联事件中直接使用数据:例如,不要在 HTML 属性中直接插入用户输入的数据。
  4. 定期检测和发现 XSS 漏洞:使用扫描工具自动检测漏洞,并修复它们。

13. 什么是DDos攻击?

DDoS攻击,全称为分布式拒绝服务攻击(Distributed Denial of Service attack),是一种常见的网络安全攻击方式。攻击者利用恶意流量消耗网络或网络设备的资源,从而导致网站无法正常运行或在线服务无法正常提供。这种攻击形式主要通过大规模互联网流量耗尽攻击目标的网络资源,使目标系统无法进行网络连接,无法提供正常服务。

14. GET请求中URL编码的意义

当使用 GET 方法发送 HTTP 请求时,通常会在 URL 中使用查询字符串来传递参数。查询字符串由参数名和参数值组成,它们之间使用等号(=)连接,并且多个参数之间使用和号(&)连接。然而,URL 中的某些字符具有特殊含义,例如 @ 符号(%40)。为了避免冲突和混淆,我们需要对这些特殊字符进行 URL 编码

具体来说,URL 编码的目的是:

  1. 安全传输参数:确保参数在传输过程中保持完整,不会因为特殊字符而出现错误。
  2. 避免冲突:防止 URL 中的参数与 HTTP 请求中的其他参数冲突,导致解析异常。

举个例子,如果要将参数名为 email,参数值为 example@example.com 的参数添加到 URL 中,可以使用以下方式进行拼接:

https://example.com/api?email=example%40example.com

在上述示例中,email 参数的值被编码为 example%40example.com。这样,我们可以确保参数传递的正确性和安全性。

15. HTTP 哪些常用的状态码及使用场景?

HTTP 状态码用于表示网页服务器响应的状态,通常由三位数字代码组成。这些状态码反映了不同的响应情况,让客户端和服务器之间能够更好地沟通。以下是一些常见的HTTP状态码及其适用场景:

  1. 1xx (信息响应)

    • 100 (继续):通知客户端部分请求已被服务器接收,客户端应继续发送剩余部分的请求。
    • 101 (切换协议):服务器根据客户端请求切换协议,主要用于WebSocket或HTTP/2升级¹.
  2. 2xx (成功响应)

    • 200 (成功):请求已成功,服务器将返回所需的响应或数据体。
    • 201 (已创建):请求成功并且服务器创建了新的资源。
    • 204 (无内容):服务器成功处理请求,但没有返回任何内容。
  3. 3xx (重定向)

    • 301 (永久重定向):用于替换旧域名,告知客户端新域名的位置。
    • 302 (临时重定向):不会缓存,常用于未登录用户访问用户中心时重定向到登录页面。
    • 304 (未修改):协商缓存,告知客户端使用缓存中的数据。
  4. 4xx (客户端错误)

    • 400 (请求语法错误):服务器无法理解请求的语法。
    • 401 (未授权):请求需要身份验证。
    • 403 (禁止访问):服务器拒绝了请求。
    • 404 (未找到):服务器找不到请求的资源。
  5. 5xx (服务器错误)

    • 500 (服务器错误):服务器遇到错误,无法完成请求。
    • 502 (网关错误):作为网关或代理,从上游服务器收到无效响应。
    • 504 (网关超时):作为网关或代理,但没有及时从上游服务器收到请求。

这些状态码在不同场景下有不同的用途,例如断点续传、重定向、错误处理等。

16. HTTP状态码301和302的区别,都有哪些用途?

HTTP状态码中,301302都是网页重定向跳转,但是两者的使用场景和效果是不一样的。

  1. 301永久重定向

    • 含义:表示所请求的资源已经永久地转移到新的位置,这包括域名的改变或资源路径的改变。
    • 用途:常用于网站迁移、改变域名等情况。
    • 效果:搜索引擎会索引新URL和新URL页面的内容。
    • 推荐使用:即使很短时间内更换资源位置信息,也可以使用301重定向。
  2. 302临时重定向

    • 含义:表示所请求的资源临时地转移到新的位置,一般是24到48小时内的转移会用到302。
    • 用途:通常用于临时性的内容改变和URL重定向,例如网站维护期间,原URL临时跳转到维护通知页面。
    • 效果:搜索引擎可能会索引旧URL和新URL的页面内容。
    • 推荐使用:虽然短时间的资源位置转移会用到302,但不推荐使用,因为会有安全隐患.

总之,301和302的区别在于永久性和临时性,而选择使用哪种取决于具体情况。

17. 简单说下五层模型每一层对应的网络协议有哪些?

在这里插入图片描述

18. ARP 协议的工作原理?

ARP(地址解析协议)是一种用于在局域网中将IP地址转换为对应的MAC地址TCP/IP协议

  1. 每台主机都会在自己的ARP缓存表中建立一个列表,记录IP地址和MAC地址的对应关系。
  2. 当源主机需要将数据包发送到目的主机时,它会先检查自己的ARP列表中是否存在目标IP地址对应的MAC地址。
  3. 如果存在,源主机直接将数据包发送到这个MAC地址。
  4. 如果不存在,源主机会向本地网络发起一个ARP请求广播包,查询目的主机对应的MAC地址。
  5. 所有主机收到这个ARP请求后,会检查数据包中的目的IP地址是否与自己的IP地址匹配。
  6. 如果匹配,主机将自己的MAC地址写入ARP响应数据包,告知源主机自己是目标IP地址对应的MAC地址。
  7. 源主机收到ARP响应后,将目标IP地址和MAC地址添加到自己的ARP列表中,开始数据传输。

这样,ARP协议帮助实现了IP地址和MAC地址之间的转换,确保数据包能够正确传输。

19. 保活计时器的作用?

当你在网络中建立了一个 TCP 连接后,服务器会设置一个保活计时器(Keep-Alive Timer)。这个计时器的作用是检测连接是否仍然处于活动状态,以避免因长时间没有数据传输而被认为是不活跃的。服务器会定期发送保活探测报文给对端,如果在一定时间内未收到对端的回复,TCP 会关闭连接,以释放资源并避免无效的连接占用系统资源。

20. TCP 协议是如何保证可靠传输的?

TCP 通过多种机制实现可靠传输,确保数据在网络中正确、完整地传输到目标主机。

  1. 建立连接:通过三次握手建立连接,保证连接实体真实存在。
  2. 序号机制:保证数据按序、完整到达。
  3. 合理分片:TCP 按最大传输单元 (MTU) 合理分片,接收方会缓存未按序到达的数据,重新排序后交给应用层。
  4. 数据校验:TCP 报文头有校验和,用于校验报文是否损坏。
  5. 超时重传:如果发送一直收不到应答,可能是发送数据丢失,也可能是应答丢失,发送方再等待一段时间之后都会进行重传。
  6. 流量控制:当接收方来不及处理发送方的数据,通过滑动窗口提示发送方降低发送速率,防止包丢失。
  7. 拥塞控制:处理网络层拥堵造成的拥塞,包括慢启动、拥塞避免和快速重传三种机制。

21. 谈谈你对 ARQ 协议的理解?

自动重传请求(ARQ) 是 OSI 模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间内没有收到确认帧,它通常会重新发送。ARQ 可能包括以下机制:

  1. 停止等待 ARQ:每发送完一个分组就停止发送,等待对方的确认。接收方收到确认后再发送下一个分组。这种方式简单但效率较低。
  2. 连续 ARQ:允许发送方连续发送多个分组,不需等待确认。接收方维护一个滑动窗口,按序接收分组并发送确认。其中有两种具体实现方式:
    • 回退 N 帧(Go-Back-N):若某分组丢失,发送方退回重传已发送过的 N 个分组。
    • 选择重传(Selective Repeat):接收方只重传丢失的分组,不必退回整个窗口。
      ARQ 协议在网络通信中起到关键作用,确保数据可靠传输。

22. 什么是流量控制?

流量控制是一种 TCP 的可靠性传输机制,用于控制发送方向接收方发送数据的速率,以避免发送方发送的数据过多、过快而导致接收方无法及时处理和接收. 具体来说,流量控制的目的是让发送方的发送速率适应接收方的处理能力,确保数据传输的平衡。以下是流量控制的关键要点:

  1. 接收窗口大小:接收方通知发送方自己可以接收的缓冲区大小,即接收窗口。发送方根据接收窗口大小来控制发送数据量。
  2. 动态调整:接收窗口大小根据网络环境和发送方的拥塞窗口动态调整,避免数据丢失。
  3. 通知报文:接收方通过通知报文告知发送方接收窗口大小,发送方根据此调整自己的发送速率。
  4. 定时器机制:发送方在接收窗口为0时,定期发送测试报文询问接收方是否可以继续发送数据。

总之,流量控制确保数据传输在双方之间保持平衡,避免资源浪费和丢包情况的发生。

23. TCP 是如何实现流量控制的?

TCP 中的流量控制机制确保发送方不会发送超过接收方处理能力的数据。TCP 中一种常用的流量控制机制是滑动窗口协议。它是一个字节为单位的可变大小的过程。建立连接后,接收方将接收窗口大小发送给发送方。接收窗口大小表示接收方缓冲区中当前可用的大小。发送方根据可用的接收窗口大小计算可以继续发送多少数据,而无需等待确认。如果接收窗口大小为零,TCP 将暂停数据传输,直到它变为非零值。接收窗口大小是 TCP 段的一部分,长度为 16 位,因此窗口的最大大小为 65,535 字节。接收方决定窗口的大小,并在每个确认消息中发送当前可用的接收窗口大小。

24. 什么是TCP滑动窗口

TCP滑动窗口是TCP协议中的一种流量控制机制,用于调节发送方和接收方之间的数据传输速率,以避免网络拥塞和提高传输效率。具体来说:

  1. 定义:滑动窗口是TCP协议中的重要机制,用于控制、管理发送方和接收方之间的数据传输。它是TCP实现流量控制和拥塞控制的基础。
  2. 作用:滑动窗口机制允许发送方在不等待每个数据段的确认的情况下连续发送多个数据段,从而提高传输效率。接收方可以根据自身的处理能力和缓冲区空间调整窗口大小,从而控制发送方窗口大小。
  3. 工作原理
    • 协商初始化窗口大小:在建立TCP连接时,双方协商并初始化流量控制的参数,包括窗口大小和初始的拥塞窗口大小。
    • 发送窗口滑动:发送方发送数据段并收到ACK确认应答后,将发送窗口向前滑动,使其离开已确认的数据,从而继续发送新的数据。
    • 接收方更新确认号和通告接收窗口大小:接收方根据接收到的报文段的序列号确定已成功接收的数据字节范围,并将确认号设置为下一个期望接收的字节的序列号。接收方通过ACK报文通告发送方自己的接收窗口大小。
    • 动态调整窗口大小:接收方通过ACK确认号通知发送方已成功接收的数据,发送方根据接收方通告的窗口大小进行数据发送控制,确保不会超出接收方的处理能力。
      总之,滑动窗口协议允许发送方和接收方之间实现流量控制和可靠性传输,提高网络吞吐量。

25. 讲一讲什么是TCP粘包和拆包?

  1. 粘包和拆包是什么?

    • 在基于 TCP 协议的通信中,粘包和拆包是常见的问题。
    • 粘包:当发送方将多个小数据包合并成一个大数据包发送时,接收方可能将它们当作一个整体来处理,导致数据粘在一起。
    • 拆包:相反,当发送方将一个大数据包拆分成多个小数据包发送时,接收方可能将它们分开处理,导致数据被拆分。
  2. 为什么会发生粘包和拆包?

    • TCP 是面向字节流的协议,没有明确的消息边界。因此,发送方发送的数据流可能被接收方不知如何区分,从而产生粘包或拆包问题。
    • 具体原因包括:
      • 发送方每次写入数据小于接收方套接字缓冲区大小时,会发生粘包。
      • 发送方每次写入数据大于接收方套接字缓冲区大小时,会发生拆包。
  3. 如何解决粘包和拆包问题?

    • 有几种常见的解决方案:
      • 固定数据大小:发送方每次发送固定长度的数据包,接收方按照固定长度进行处理。
      • 自定义请求协议:在数据包中添加特定的分隔符,接收方根据分隔符划分数据包。
      • 消息头中保存长度:将消息分为头部和消息体,头部中保存整个消息的长度。
      • 自定义协议:设计自己的协议来处理粘包和拆包¹。

26. forward 和 redirect 的区别?

  1. Forward(转发)

    • 是服务器请求资源的行为,服务器直接访问目标地址的 URL,将响应内容读取出来,然后再发给浏览器。
    • 浏览器不知道服务器发送的内容从哪里来,因此使用 forward 时,浏览器的地址栏不会发生变化。
    • 适用于在服务器内部进行页面跳转,例如用户登录时根据角色转发到相应的模块⁵。
  2. Redirect(重定向)

    • 是服务端根据逻辑,发送一个状态码(通常是 301 或 302),告诉浏览器重新去请求新的地址。
    • 浏览器显示的是新的 URL,因为它会重新发起请求。
    • 适用于用户注销登录时返回主页面或跳转到其他网站⁵。
  3. 数据共享

    • Forward:原页面和目标页面可以共享 request 中的数据。
    • Redirect:不同页面之间不能共享数据。
  4. 效率

    • Forward 效率高,Redirect 效率低。

总之,Forward 是服务器内部的重定向,而 Redirect 是客户端向服务器发起的重定向。

27. HTTP 常见方法有哪些?

HTTP 请求方法有多种,根据 HTTP 标准,我们可以使用以下常见的请求方法:

  1. GET:用于从服务器获取资源。GET 请求不会对服务器上的资源造成任何更改,应该是幂等的(即多次重复的请求应该产生相同的结果)。例如,当你在浏览器中输入 URL 地址时,浏览器会发送一个 GET 请求来获取该 URL 对应的网页。
  2. HEAD:类似于 GET 请求,但服务器只返回响应头,不返回资源主体。HEAD 请求通常用于获取资源的元信息,如资源的大小、类型等,而不需要获取实际内容。
  3. POST:用于向服务器提交数据,通常用于提交表单或上传文件。POST 请求可能会导致服务器上的状态更改,并且不一定是幂等的。例如,在提交注册表单时,浏览器通常会发送一个 POST 请求,将用户提供的信息发送到服务器进行处理。
  4. PUT:用于向服务器上传资源,通常用于更新已存在的资源或创建新的资源。PUT 请求应该是幂等的,即多次执行相同的 PUT 请求应该产生相同的结果。
  5. DELETE:用于请求服务器删除指定的资源。DELETE 请求应该是幂等的,即多次执行相同的 DELETE 请求应该产生相同的结果。
  6. CONNECT:用于建立到服务器上指定端口的隧道,通常用于代理服务器。
  7. OPTIONS:用于请求服务器返回支持的 HTTP 方法和其他选项。例如,客户端可以发送 OPTIONS 请求来确定服务器支持哪些 CORS(跨域资源共享)策略。
  8. TRACE:回显服务器收到的请求,主要用于测试或诊断。
  9. PATCH:用于对指定资源进行局部更新,即仅更新请求中提供的属性。与 POST 请求类似,PATCH 请求也不是幂等的。

28. 说一说POST与GET有哪些区别

GETPOST 是两种最常用的 HTTP 请求方法,它们在数据传输和处理方面有一些区别:

  1. GET 用于从服务器获取数据,而 POST 用于向服务器提交数据。
  2. GET 请求的参数通常显示在 URL 中,而 POST 请求通过表单提交,不会显示在 URL 上,因此更具隐蔽性。
  3. GET 请求可被缓存,而 POST 请求不会被缓存。
  4. GET 请求对数据长度有限制(通常在 2~8KB 之间),而 POST 请求没有长度限制。
  5. GET 请求是幂等的,回退或刷新不会影响服务器状态,而 POST 请求会重新提交数据。

总之,GET 适用于获取数据,而 POST 适用于提交数据。如果涉及敏感信息,应该使用 POST 来保护数据安全。

29. 在浏览器中输入 URL 地址到显示主页的过程?

当你在浏览器中输入 URL 地址并按下回车时,以下是浏览器从接收 URL 到显示页面的详细步骤:

  1. 浏览器解析域名:首先,浏览器会解析输入的域名,查找对应的 IP 地址。这一步涉及 DNS 域名解析,本地缓存,甚至根域名服务器的查询¹。

  2. 建立 TCP 连接:浏览器与服务器之间建立 TCP 连接,确保数据传输的可靠性。

  3. 发送 HTTP 请求:浏览器向服务器发送 HTTP 请求,请求特定资源(例如 HTML 文件)。

  4. 服务器解析请求并返回 HTTP 报文:服务器接收到请求后,解析请求,执行相应的后台处理,然后返回 HTTP 报文给浏览器。

  5. 浏览器解析并渲染页面:浏览器接收到服务器返回的 HTML、CSS、JavaScript 等资源,进行语法解析,构建 DOM 树、CSSOM 树,然后渲染页面。这一过程包括下载资源、构建渲染树、执行 JavaScript 等步骤。

  6. 断开连接:页面加载完成后,浏览器与服务器断开连接。

总之,这个过程涉及域名解析、网络通信、HTTP 请求、资源解析和页面渲染等多个步骤,确保你能够顺利访问所需的网页。

30. DNS 的解析过程?

当你在浏览器中输入网址并按下回车时,浏览器会执行 DNS(域名系统)解析,将域名转换为 IP 地址,从而找到正确的服务器并获取网页内容。以下是 DNS 解析的详细过程:

  1. 客户机发出查询请求:首先,你的计算机(客户机)会发出一个 DNS 查询请求,要求将域名解析为 IP 地址。

  2. 本地 DNS 服务器查询:本地 DNS 服务器(通常由你的互联网服务提供商配置)会在自己的缓存中查找域名对应的 IP 地址。如果找到,它会直接返回结果给客户机。

  3. 本地 DNS 服务器未命中缓存:如果本地 DNS 服务器的缓存中没有对应的记录,它会向根域名服务器发出查询请求。

  4. 根域名服务器响应:根域名服务器是全球 DNS 系统的顶级服务器之一。它会返回包含下一级 DNS 服务器地址的响应。这些下一级服务器通常是顶级域名服务器,例如 .com.org 等。

  5. 迭代查询:本地 DNS 服务器接着向下一级 DNS 服务器发送查询请求,直到找到负责该域名的权威 DNS 服务器。

  6. 权威 DNS 服务器解析:权威 DNS 服务器是负责特定域名的服务器。它会返回域名对应的 IP 地址给本地 DNS 服务器。

  7. 本地 DNS 服务器缓存结果:本地 DNS 服务器将解析结果缓存,以便下次查询时更快地响应。

  8. 客户机获得 IP 地址:最终,本地 DNS 服务器将 IP 地址返回给客户机,浏览器使用该 IP 地址与服务器建立连接并获取网页内容。

总之,DNS 解析是一个分布式系统,涉及多个层次的服务器协作,以将域名映射到 IP 地址,使你能够访问所需的网页。举个例子,当你在浏览器中输入www.facebook.com时,DNS解析过程就会开始。浏览器向本地DNS服务器发送查询请求,然后本地DNS服务器会向根域名服务器、顶级域名服务器和权威域名服务器查询,最终返回www.facebook.com对应的IP地址给浏览器,然后浏览器就可以发起HTTP请求,访问Facebook网站了。

31. 为了 DNS 解析更多,你觉得可以用到哪些优化手段?

  1. DNS 缓存:利用本地 DNS 缓存,减少对远程 DNS 服务器的查询次数。这可以通过操作系统、浏览器或应用程序来实现。

  2. TTL 设置:在 DNS 记录中设置合理的 TTL(Time to Live)。较短的 TTL 可以使 DNS 更新更快,但会增加查询负载。权衡这两者,根据实际需求设置 TTL。

  3. Anycast:使用 Anycast 技术,将相同 IP 地址分配给多个 DNS 服务器。这样,用户的请求将被路由到最近的服务器,提高响应速度。

  4. DNSSEC:使用 DNSSEC(DNS 安全扩展)来验证 DNS 数据的完整性和真实性,防止 DNS 污染和欺骗攻击。

  5. 智能 DNS:使用智能 DNS 服务,根据用户的地理位置、网络状况和其他因素选择最佳的 DNS 服务器。

  6. 预取:在用户访问之前,预取可能需要的 DNS 记录。这可以通过预热缓存或在页面加载期间异步加载资源来实现。

  7. DNS 服务器性能优化:确保 DNS 服务器的硬件、网络和软件都进行了优化,以提高响应速度。

  8. 分布式 DNS:使用多个 DNS 服务器,分布在不同地理位置,以提高可用性和容错性。

总之,优化 DNS 解析可以提高网站性能、减少延迟和提高用户体验。

32. 什么是 HTTP 长连接?

当我们谈论 HTTP 长连接时,实际上是在讨论一种优化技术,它允许客户端和服务器在同一个 TCP 连接上进行多次请求和响应交互。这样,不必每次请求都重新建立和关闭连接,从而减少了连接的开销。HTTP 1.1 默认启用长连接,但在 HTTP 1.0 中需要在请求头中加入 "Connection: Keep-Alive" 才能启用长连接¹²。这对于加载包含多个资源(如图片、CSS、JavaScript)的网页非常有用,因为可以重用同一个连接,提高加载速度。不过要注意,长连接会占用服务端资源,因此需要合理设置连接的保持时间。

33. HTTP 长连接短连接使用场景是什么

  1. 长连接适用于交互频繁、点对点通信的场景,例如:

    • 网络游戏:玩家之间需要实时通信,长连接可以减少连接建立和断开的开销。
    • 实时通信应用:比如聊天应用、视频会议等。
  2. 短连接适用于用户数量巨大的 Web 网站,例如:

    • 电商平台(如京东、淘宝):这些网站的客户端数量庞大,长连接会给服务器带来巨大的资源消耗。使用短连接更省资源。

总之,长连接主要用于频繁交互的应用,而短连接适用于大规模的 Web 网站。

34. HTTP 和 HTTPS 的区别?

  1. HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它以明文方式发送内容,不提供数据加密。因此,HTTP 不适合传输敏感信息,如信用卡号或密码。

  2. HTTPS(超文本传输安全协议)是一种通过计算机网络进行安全通信的传输协议。它在 HTTP 基础上加入了 SSL/TLS 加密,用于保护数据隐私和完整性。HTTPS 默认工作在 TCP 协议的 443 端口。

  3. 证书:使用 HTTPS 需要申请数字证书,通常需要一定费用。证书颁发机构(CA)如 Symantec、Comodo 和 GoDaddy 提供这些证书。

  4. 连接方式:HTTP 使用 TCP 三次握手建立连接,而 HTTPS 需要额外的 SSL 握手,共计 12 个包。HTTP 默认端口是 80,HTTPS 是 443。

  5. 安全性:HTTPS 数据传输过程是加密的,相比 HTTP 更安全。它提供对网站服务器的身份认证,保护交换数据的隐私和完整性。

总之,HTTP 适用于普通网站,而 HTTPS 更适合安全性要求较高的服务,如银行网站和电子邮箱。

35. HTTP 报文常见字段有哪些?

HTTP 报文中常见的字段包括:

  1. 请求头部

    • Host:指定主机名称。
    • Connection:Keep-Alive 或者 close,用于建立请求通路保持激活。
    • Accept:能接受的文件类型。
    • Accept-Encoding:接受的内容类型,通常是 gzip 压缩的格式。
    • Accept-Language:能接受的语言,例如 zh-CN、zh;q=0.8、en-US;q=0.5。
    • User-Agent:指定客户端的信息。
    • Range:用于访问部分内容,实现断点续传的原理。
    • Authorization:认证字段,用于传递用户名和密码。
    • Cache-Control:控制是否缓存。
    • If-Modified-Since:日期,用于判断缓存是否失效。
  2. 响应头部

    • Content-Length:响应体的长度。
    • Server:服务器的信息。
    • Content-Type:内容的类型,如 text/html、xml 等。
    • Last-Modified:最后的修改日期,通常与缓存相关。
    • Location:新的地址。
  3. 响应码

    • 200 OK:访问正常。
    • 206:与断点续传相关。
    • 3XX:重定向,包含 301、302、307 等。
    • 304:缓存有效。
    • 4XX:客户端问题,如 401(没有权限访问)和 404(资源不存在)。
    • 5XX:服务器内部处理的问题。

36. HTTPS 是如何保证通信安全的?

  1. HTTPS 是什么?

    • HTTPS(Hypertext Transfer Protocol Secure)是 HTTP 的安全版本。它用于在网络服务器和浏览器之间安全传输数据。
    • HTTPS 使用 Transport Layer Security(TLS) 或以前的 Secure Sockets Layer(SSL) 进行通信协议的加密。
  2. 加密过程

    • 私钥:网站拥有者控制的私钥,用于解密由公钥加密的信息。
    • 公钥:对所有希望与服务器进行安全交互的人都可用。使用公钥加密的信息只能由私钥解密。
  3. 重要性

    • HTTPS 防止信息在网络上被窃听。普通的 HTTP 通信可以被轻松“嗅探”,使得在不安全的环境(如公共 Wi-Fi)中的通信容易受到拦截。
    • HTTPS 加密流量,即使数据包被截获,也会呈现为无意义的字符。

举个例子:

  • 加密前:This is a string of text that is completely readable
  • 加密后:ITM0IRyiEhVpa6VnKyExMiEgNveroyWBPlgGyfkflYjDaaFf/Kn3bo3OfghBPDWo6AfSHlNtL8N7ITEwIXc1gU5X73xMsJormzzXlwOyrCs+9XCPk63Y+z0=

总之,HTTPS 比 HTTP 更安全,适用于需要保护敏感信息的网站,如银行和电子邮箱。

37. HTTPS 大概过程流程讲一下?

  1. HTTP 的弊端:不安全

    • HTTP 在传输数据时,所有内容都是明文传输,没有安全性可言。敏感数据(如密码、信用卡信息)一旦被第三方获取,后果不堪设想。
    • 哈希算法(如 MD5)并不能让 HTTP 更安全,因为它们是不可逆的,无法复原数据。
  2. 加密算法:对称和非对称加密

    • 对称加密:使用相同的密钥进行加密和解密。虽然效率高,但密钥传输不安全。
    • 非对称加密:使用公钥和私钥配对,安全性高。客户端和服务器之间交换公钥,确保密钥安全。
  3. HTTPS 的原理流程

    • 客户端从服务器获取证书,其中包含服务器的公钥。
    • 客户端校验证书,确保公钥合法。
    • 客户端生成随机密钥,用服务器的公钥加密后发送给服务器。
    • 服务器使用私钥解密,得到密钥。
    • 双方使用该密钥进行对称加密通信。

这样,HTTPS 综合了对称和非对称加密的优点,既保证了通信安全,又保持了数据传输效率。

38. 什么是数字证书?

数字证书通常称为 SSL/TLS 证书或简称为证书,是一种在互联网上充当身份识别形式的数字文档。它包含有关实体(例如个人、组织或网站)的信息,用于验证实体的身份并建立安全的通信通道。数字证书由受信任的第三方组织(称为证书颁发机构 (CA))在严格验证证书持有者的身份后颁发。
在实际应用中,比如在进行HTTPS通信时,服务器会把它的数字证书发送给客户端。客户端对此进行验证,确认服务器的身份后,才开始正式通信。这个过程确保了数据在传输过程中的安全性。举个例子,当你访问一个https开头的网站,如https://www.google.com时,你的浏览器会先获取Google的数字证书,进一步验证其合法性。如果验证成功,且证书匹配服务器的域名,表示证书是真实有效的,浏览器就会允许连接建立,进一步加载网页数据。

39. 什么是对称加密、非对称加密?

  1. 对称加密

    • 对称加密也被称为私钥加密。在这种加密方式中,加密和解密使用相同的密钥。
    • 发送方和接收方必须在安全通信之前商定一个密钥。
    • 优点:加密效率高,因为加密和解密使用相同的算法和密钥。
    • 缺点:安全性较低,如果密文被拦截且密钥被破解,信息容易被破译。
    • 常见的对称加密算法包括 DES、AES 和 3DES⁴。
  2. 非对称加密

    • 非对称加密使用一对密钥:公钥私钥
    • 公钥用于加密数据,私钥用于解密数据。
    • 优点:不需要在通信双方之间安全地共享密钥。
    • 缺点:加密和解密效率较低,但提供更高的安全性。
    • 常见的非对称加密算法包括 RSA、DSA 和 ECC⁴。

总结一下,对称加密适用于需要快速加解密的场景,如文件加密和数据传输;而非对称加密常用于密钥交换、数字签名等需要高安全性的场景。

40. 什么是 Cookie?

Cookie 是 Web 服务器生成并发送至 Web 浏览器的小型信息文件。 Web 浏览器在预定义的时间段内或在用户在网站上的会话期间存储收到的 Cookie。 它们将相关的 Cookie 附加到用户今后向 Web 服务器提出的任何请求中。简而言之,Cookie 是一种用于识别用户和改善网络浏览体验的文本文件,类似于服务器和浏览器之间的“秘密纸条”。

41. 什么是 Session?

Session 是指用户在浏览网站时,从进入网站到关闭浏览器所经历的一系列状态和行为。通常在服务器端进行记录,用于跟踪用户的行为、分析用户需求,并为用户提供个性化服务。Session 的主要作用是保持用户状态,以便在用户请求之间进行数据交换。在 Web 应用程序中,Session 通常通过在服务器端创建一个 Session 对象来实现。

42. cookie和session是怎么实现用户的登录状态的?

当用户登录到网站时,为了保持其登录状态,通常会使用 CookieSession

  1. Cookie
    • Cookie 是一种在用户浏览器中存储数据的小文本文件。
    • 用户第一次登录时,服务器会创建一个 Cookie,并将其发送到浏览器。
    • 浏览器会将该 Cookie 存储在本地,以便在后续请求中携带。
    • 服务器可以通过读取 Cookie 来识别用户,并保持其登录状态。
    • 可以设置 Cookie 的有效期,例如一分钟或更长时间¹。
  2. Session
    • Session 是服务器端的一块内存空间,用于存储用户的数据。
    • 用户登录后,服务器会为其创建一个 Session,并分配一个唯一的 Session ID。
    • 服务器将 Session ID 发送给浏览器,通常通过 Cookie。
    • 浏览器在后续请求中携带 Session ID,服务器根据该 ID 读取用户数据。
    • 默认情况下,Session 在一段时间后会过期,通常是 30 分钟¹.
      总结一下,Cookie 用于在客户端存储信息,而 Session 则在服务器端存储用户数据。它们共同实现了用户登录状态的保持,允许用户在不重复输入用户名和密码的情况下访问网站。

43. cookie和session有什么区别?

CookieSession是用来跟踪浏览器用户身份的两种会话方式。它们之间的区别:

  1. 数据存储位置

    • Cookie的数据保存在客户端(浏览器)。
    • Session的数据保存在服务器端。
  2. 数据类型

    • Cookie只能存储ASCII字符,通常用于保存少量数据。
    • Session可以存储任意数据类型,包括Java对象等。
  3. 安全性

    • 由于Cookie存储在客户端,其中的数据可被用户和其他网站访问,因此安全性较低。
    • Session数据存储在服务器上,对客户端不可见,因此相对较安全。
  4. 传输方式

    • Cookie通过HTTP协议自动发送给服务器,每次请求都会携带Cookie数据。
    • Session可以通过Cookie或URL重写的方式传递Session ID。
  5. 生命周期

    • Cookie可以通过设置过期时间来指定存储的时间,可以是短期的或长期的。
    • Session默认情况下会持续到用户关闭浏览器或会话超时。

总之,CookieSession都有各自的优缺点,根据具体需求选择合适的方案。

44. UDP 如何实现可靠传输?

UDP 是一种不提供可靠性传输的协议,但我们可以通过一些设计来增加其可靠性。以下是一些实现可靠 UDP 传输的方式:

  1. 超时重传(定时器):发送方在发送数据后设置一个定时器,如果在一定时间内未收到确认,就重新发送数据包。

  2. 有序接收:接收方为每个数据包分配一个唯一的序列号,并按照序列号的顺序接收和存储数据包。

  3. 应答确认(Seq/Ack 应答机制):接收方发送确认包,其中包含已收到的序列号,以便发送方知道哪些数据已成功接收。

  4. 滑动窗口流量控制:使用滑动窗口协议来控制数据包的流量,避免网络拥堵。

目前有一些开源程序实现了利用 UDP 实现可靠的数据传输,例如 RUDP、RTP 和 UDT。这些协议在不同场景下提供了类似于 TCP 的可靠性,同时保留了 UDP 的低延迟特性。

45. URI和 URL之间的区别

  • URI(统一资源标识符)是一个更通用的概念,用于标识 Web 上的各种资源,例如 HTML 文档、图像、视频片段和程序。它是语义上的抽象,可以是绝对的或相对的。URI 只定义了资源是什么。

  • URL(统一资源定位符)是 URI 的一个具体子集。它不仅唯一标识资源,还提供了定位该资源的信息。URL 包括协议、域名和路径信息,必须提供足够的信息来定位资源。换句话说,URL 是一种具体的、绝对的 URI。

46. 什么是ICMP协议?

ICMP(因特网控制报文协议)是 TCP/IP 协议簇的一个子协议,用于在 IP 主机和路由器之间传递控制消息。尽管它不传输用户数据,但对于网络通不通、主机是否可达、路由是否可用等网络本身的消息起着重要作用。 它属于网络层协议,主要用于报告主机是否可达、交换受限控制和状态信息等。当遇到 IP 数据无法访问目标、IP 路由器无法按当前的传输速率转发数据包等情况时,会自动发送 ICMP 消息。常见的使用场景包括 pingtracert 命令,这两者都利用 ICMP 协议来实现网络功能。
常见的 ICMP 消息类型包括:
- Echo 请求和 Echo 响应:用于网络探测和连接测试。
- 目标不可达:当一个数据包无法到达目标时,发送此消息通知源主机。
- 超时:当数据包经过一定时间后未能到达目标,发送此消息通知源主机。
- 重定向:用于告知主机优化数据包的传输路径。
- 时间戳请求和时间戳响应:用于进行时间同步。
ICMP 是一种非常重要的网络协议,在 IP 网络中起着诊断和通信的作用。它协助网络管理员调试和定位问题,在网络通信中起到检测和响应错误的作用,提高网络的可靠性和效率。

47. ICMP 有哪些实际应用,举几个例子?

  1. Pingping 工具使用 ICMP 请求和 ICMP 回复消息。它用于评估网络可用性和往返时间。

  2. Traceroutetraceroute 也利用 ICMP。它帮助确定数据包从源到目标的路径,显示每个中间路由器的延迟。

  3. 错误报告:ICMP 错误消息通知源节点有关阻止数据包传递的问题。例如:

    • 目标不可达:通知发送方目标由于网络故障、端口不可用或协议问题而无法到达。
    • 时间超过:表示数据包的生存时间(TTL)已过期,通常在网络中存在路由环路时发生。
  4. 网络诊断:ICMP 还用于执行网络诊断功能,例如:

    • 时间戳请求和回复:测量网络中的传输时间。

通过了解 ICMP,网络管理员可以增强其网络诊断能力,提高整体网络健康状况。

48. IPV4 地址不够如何解决

  1. 动态分配:使用 DHCP(动态主机配置协议)。这样,只有在设备联网时才会分配 IP 地址,而不联网时则不分配。虽然这是一种临时的解决方案,但并没有从根本上解决问题。

  2. NAT 机制:将 IP 地址分为外网 IP 和内网 IP,用一个外网 IP 代替多个内网 IP。类似于网上购物时填写学校作为收货地址,而学校里有很多人,每个人用姓名和手机号区分。进入内网后,使用端口号来区分不同设备。

  3. 升级到 IPv6:IPv6 使用更大的地址空间,用 16 个字节(128 个比特位)表示一个地址,相比 IPv4 的 4 个字节(32 个比特位)更大。IPv6 地址足够分配给地球上的每一粒沙子了!

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值