计算机网络

IntYou (^_^)

  1. 简述 TCP 三次握手以及四次挥手的流程。为什么需要三次握手以及四次挥手?

    • 三次握手

      指建立一个TCP连接时,需要客户端和服务器总共发送3个包

      1. 客户端发送一个SYN包到服务器,并进入SYN-SEND状态

      2. 服务器收到SYN包后,回复一个SYN-ACK包,确认收到客户端的SYN包,并进入SYN-RECV状态

      3. 客户端收到服务器的SYN+ACK包后,发送一个ACK包给服务器,确认收到服务器的SYN+ACK包,此时连接建立成功

    • 四次挥手

      指断开一个TCP连接时,需要客户端和服务器总共发送4个包

      1. 客户端发送一个FIN包到服务器,表示客户端不在发送数据,并进入FIN-WAIT-1状态

      2. 服务器收到FIN包后,回复一个ACK包,确认收到客户端的FIN包,并进入CLOSE-WAIT状态

      3. 服务器再次发送一个FIN包给客户端,表示服务器不再发送数据,并进入LAST-ACK状态

      4. 客户端收到服务器的FIN包后,回复一个ACK包给服务器,确认收到服务器的FIN包,并进入TIME-WAIT状态。此时连接断开成功,而TIME-WAIT状态在等待2MSL后返回CLOSED状态

    三次握手是为了防止已失效的连接请求报文突然又传送到了服务端。

    四次挥手是为了确保数据能够完整传输。

    为什么TIME-WAIT状态还需要等待2MSL后才能返回到CLOSED状态?

    1. 无法保证最后发送的ACK报文会一定被对方收到,所以需要重发可能丢失的ACK报文
    2. 关闭连接一段时间后可能会出现相同的IP地址和端口建立新的连接,为了防止旧连接的重复分组在新连接已经终止后再现。2msl足以让分组最多存活msl秒被丢弃

    为什么必须是三次握手,不能用两次握手进行连接?

    两次握手容易死锁!如果服务器的应答分组在传输中丢失,S将不知道建立什么样的序列号。C认为链接还未建立成功,将忽视S发来的任何数据分组,只等待连接确认。而S在发出的分组超时后,重复发送同样的分组,这样就形成了死锁

  2. Restful 与 RPC 的区别是什么? Restful 的优点在哪里?

    Restful 和 RFC 的主要区别在于 Restful 是一种用于构建web服务的架构结构,而 RFC 是一系列描述互联网及其协议的技术文档

    Restful 基于一组原则,强调使用 HTTP 方法和资源 URL 来表示和操作资源。它还强调无状态性,这意味这每个请求应包含完成请求所需的所有信息,而不依赖于任何先前的请求

    Restful: GET /order/123

    RFC 是一系列描述互联网及其协议的技术文档。这些文档又互联网工程任务组(IEIF)创建,并用于定义电子邮件,文件传输和网络协议等标准

    RFC: Queryorder/order_id=123

    Restful 优点在于它是一种简单易用,高度可扩展,可移植的架构风格,可以帮助开发人员更轻松地构建web服务

  3. HTTP 与 HTTPS 有什么区别?

    1. HTTPS 协议需要到证书颁发机构CA申请证书,HTTP 不用申请

    2. HTTP 是长文本传输协议,属于应用层信息传输。HTTPS 则是具有 SSL 加密安全性传输协议,对数据的传输进行加密,相当于 HTTP 的升级版

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

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

  4. HTTPS 的加密原理是什么?

    HTTPS 使用一种称为 SSL/TLS 的协议来加密数据传输。SSL/TLS 使用公钥加密和私钥解密的方法来保护数据的机密性和完整性

    当客户端与服务器建立连接时,ta们会协商一种加密算法和密钥长度,然后使用该算法和密钥来加密和解密数据。这种加密方法可以防止中间人攻击和窃听,因为只有客户端和服务器知道密钥

  5. 一次 HTTP 请求过程中发生了什么?

    HTTP 请求过程中发生了以下步骤:

    1. DNS 解析:客户端将 URL 解析为 IP 地址,以便与服务器建立连接。

    2. 建立 TCP 连接:客户端使用 TCP 协议与服务器建立连接,以便在客户端和服务器之间传输数据

    3. 发送 HTTP 请求:客户端向服务器发送 HTTP 请求,其中包括请求方法,请求头和请求体

    4. 服务器处理请求:服务器接收到 HTTP 请求后,会根据请求方法和请求 URL 来处理请求,并返回 HTTP 响应

    5. 接收 HTTP 响应:客户端接收到 HTTP 响应后,会解析响应头和响应体,并根据响应状态码来判断请求是否成功

    6. 关闭 TCP 连接:客户端和服务器之间的 TCP 连接在请求和响应完成后会被关闭

  6. 域名解析的过程是?

    1. 客户端向本地DNS服务器发送域名解析请求

    2. 如果本地DNS服务器缓存了该域名的IP地址,则直接返回该IP地址给客户端

      如果本地DNS服务器没有缓存该域名的IP地址,则向根DNS服务器发送域名解析请求

    3. 根DNS服务器返回顶级域名服务器的IP地址给本地DNS服务器

    4. 本地DNS服务器向顶级域名服务器发送域名解析请求

    5. 顶级域名服务器返回次级域名服务器的IP地址给本地DNS服务器

    6. 本地DNS服务器向次级域名服务器发送域名解析请求

    7. 次级域名服务器返回该域名的IP地址给本地DNS服务器

    8. 本地DNS服务器将该IP地址缓存起来,并返回给客户端

  7. TCP 与 UDP 在网络协议中的哪一层,他们之间有什么区别?

    TCP 和 UDP 是传输层协议,用于在网络上传输数据。

    它们之间的主要区别在于它们如何传输数据以及它们提供的服务类型

    TCP(传输控制协议):

    是一种面向连接的协议,它提供可靠的数据传输服务。它使用三次握手协议来建立连接,并使用确认和重传机制来确保数据的可靠传输。TCP 还提供流量控制和拥塞控制功能,以确保网络的稳定性和可靠性。TCP 通常用于需要可靠数据传输的应用程序

    UDP(用户数据报协议):

    是一种无连接的协议,它提供不可靠的数据传输服务。它不使用握手协议来建立连接,也不提供确认和重传机制。UDP 不提供流量控制和拥塞控制功能,因此他通常用于需要快速数据传输的应用程序

  8. TCP 中拥塞控制的实现?

    慢启动:

    在TCP连接建立后,发送方会先发送少量数据,然后逐渐增加发送数据的速率,直到网络出现拥塞为止。这样可以避免发送方一开始就发送大量数据导致网络拥塞

    拥塞避免:

    一旦网络出现拥塞,TCP会减小发送窗口的大小,以避免发送过多的数据导致网络拥塞。同时,TCP还会动态调整发送窗口的大小,以适应网络的变化

    拥塞恢复

    快速重传

    快速恢复

  9. TCP 怎么保证可靠传递?

    校验和

    确认应答与序列号

    超时重传

    连接管理

    流量控制:

    1. 发送方维护一个发送窗口,用于存储已发送但未被确认的数据。发送方只有在接收到接收方的确认后才能将窗口向前移动,发送更多的数据

    2. 接收方维护一个接收窗口,用于存储已接收但未被处理的数据。接收方会向发送方发送确认消息,告诉发送方已经成功接收到数据,并将接收窗口向前移动,以便接收更多的数据

    3. 发送方根据接收方发送的确认消息来动态调整发送窗口的大小,如果接收方的接收窗口变小,发送方会减小发送窗口的大小,以避免发送过多的数据导致接收方无法处理。如果接收方的接收窗口变大,发送方会增大发送窗口的大小,以提高发送数据的速率

    避免了发送过多数据导致接收方无法处理的情况

    拥塞控制

  10. 从系统层面上看,UDP如何保证尽量可靠?

    为了在系统级别上确保可靠性,UDP实现的几种技术。

    其中一种技术是使用校验和来检测数据中的错误。这可以通过在UDP头中添加一个校验和字段来实现,该字段是基于发送的数据计算出来的。接收方可以重新计算校验和,并将其与头部中发送的校验和进行比较,以检测任何错误

    另一种技术是在应用程序级别实现重传。这涉及到发送方跟踪接收方已成功接受的数据包,并重新传输任何未被确认的数据包。这可以使用UDP头中的序列号来实现

    需要注意的是,虽然这些技术可以提高可靠性,但他并不能保证可靠性。UDP仍然是一种尽力而为的协议,数据包仍然可能在传输过程中丢失或损坏。

  11. TCP 的 keepalive 了解吗?说一说它和 http 的 keepalive 的区别

    在TCP中,keepalive用于检测连接是否仍然处于活动状态。如果连接在一段时间内没有活动,则会发送一个keepalive消息,以确保连接仍然存在。这可以防止连接因为长时间没有活动而被关闭

    与 HTTP 的 keepalive 不同,TCP 的 keepalive 是在 TCP 层面上实现的,而 HTTP 的 keepalive 是在应用层面实现的。HTTP 的 keepalive 是指在一个 HTTP 连接中,客户端可以发送多个请求,而不需要每次都重新建立连接。这可以减少连接建立和断开的开销,提高网络性能。

  12. 简述 HTTP 1.0 1.1 2.0 的主要区别

    HTTP1.0

    • 无状态,无连接

    HTTP1.1

    • 支持长连接

    • 增加缓存处理

    • 增加host字段

    • 支持断点传输

    HTTP2.0

    • 二进制分帧

    • 多路复用(连接共享)

    • 头部压缩,encoder

    • 服务器推送

  13. HTTP 的方法有哪些?

    get post put delete patch

  14. 简述 TCP 协议的延迟 ACK 和累计应答

    两者用于优化网络传输性能和可靠性

    延迟 ACK 是指 TCP 接收方在接收到数据包后不立即发送 ACK 确认消息,而是等待一段时间(通常是200ms),以便在此期间接收到其他数据包时可以一起发送 ACK。这可以减少网络流量和减轻网络负载,从而提高性能。但是,延迟 ACK 也可能导致一些问题,例如在某些情况下可能会导致数据包重传

    累计应答是指 TCP 接收方只发送一个 ACK 消息来确认接收到的所有数据包,而不是每个数据包都发送一个 ACK。这可以减少网络流量和减轻网络负载,从而提高性能。但是累计应答也可能导致一些问题,例如在某些情况下可能会导致发送方重传已经被接收方接受的数据包

  15. 简述 TCP 的报文头部结构

    16位端口号,32位序号,32位确认号,4位头部长度,6位标志位,16位窗口大小,16位校验和,16位紧急指针,TCP 头部选项

  16. 简述 TCP 半连接发生场景

    1. 服务器负载过高,无法处理新的连接请求。在这种情况下,服务器可能会忽略或拒绝新的连接请求,导致客户端无法建立完整的TCP连接

    2. 防火墙或其他网络设备阻止了 SYN + ACK 包的传输。在这种情况下,客户端可能会发送多个SYN包,但服务器仍然无法回复 SYN + ACK 包,导致客户端无法建立完整的 TCP 连接

    解决方法:

    1. 增加服务器的处理能力,以便能够处理更多的连接请求

    2. 检查网络设备和防火墙的配置,确保它们不会阻止 SYN + ACK 包的传输

    3. 在客户端和服务器之间使用心跳机制,以便在连接空闲时保持连接状态

  17. 什么时 SYN flood?如何防范?

    SYN flood是一种网络攻击,攻击者通过发送大量的 SYN 包来占用服务器的资源,从而导致服务器无法处理正常的连接请求。

    可以采取以下措施防范:

    1. 增加服务器的处理能力,以便能够处理更多的连接请求。这可以通过增加服务器的硬件资源(例如CPU, 内存,网络带宽等)或优化服务器的软件配置(例如调整服务器的网络栈参数,使用负载均衡等)来实现

    2. 使用防火墙或其他网络设备来过滤 SYN flood 攻击。这可以通过配置防火墙规则,使用 SYN cookies 等技术来实现。SYN cookies 是一种防范 SYN flood 攻击的技术,它可以在服务器端生成一个加密的 cookie,并将其发送给客户端。当客户端发送 SYN 包时,服务器可以验证 cookie 的有效性,从而防止 SYN flood 攻击

  • 标题: 计算机网络
  • 作者: IntYou
  • 创建于: 2023-04-09 20:59:00
  • 更新于: 2023-04-25 19:47:05
  • 链接: https://intyou.netlify.app/2023/04/09/计算机网络/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
此页目录
计算机网络