网络面试应对

目录

1,TCP和UDP的区别

2,TCP如何确保可靠性

2.1,滑动窗口和流量控制

2.2,拥塞控制

2.3,三次握手和四次分手的过程

2.4,为什么是三次握手四次分手

2.5,为什么客户端最后要等待一段时间

3,TCP粘包和分包

4,UDP怎么做可靠性传输

5,http

6,http和https

7,https是怎么进行加密的

7.1,对称性加密和非对称性加密

8,帧同步和状态同步

8.1帧同步如何确保同步性

1,TCP和UDP的区别

TCP(传输控制协议)和UDP(用户数据报协议)是两种常用的传输层协议,用于在计算机网络中传输数据。它们具有以下区别:

  1. 可靠性:TCP提供可靠的数据传输,确保数据的顺序和完整性。它使用确认机制和重传机制来处理丢失的数据包和网络拥塞。而UDP是无连接的,不提供可靠性保证,数据包可能会丢失或乱序。

  2. 连接性:TCP是面向连接的协议,建立通信前需要建立一个连接,通信结束后需要断开连接。UDP是无连接的,每个数据包都是独立的,可以直接发送。

  3. 延迟:由于TCP提供可靠性保证,它引入了一定的延迟。TCP的确认机制和重传机制会导致较高的延迟,适用于对延迟要求较高的应用。UDP没有这些机制,延迟较低,适用于对实时性要求较高的应用。

  4. 数据量限制:TCP没有固定的数据包大小限制,可以传输大量的数据。而UDP的数据包有固定的最大大小限制(通常为64KB),超过这个大小需要分片发送。

  5. 应用场景:TCP常用于可靠性要求较高的应用,如网页浏览、文件传输、电子邮件等。UDP常用于实时性要求较高的应用,如音视频传输、游戏、实时通信等。

2,TCP如何确保可靠性

TCP(传输控制协议)通过以下机制来确保数据的可靠传输:

  1. 序列号与确认机制:TCP将每个发送的数据包进行编号(序列号),接收方通过发送确认(ACK)消息来确认已经接收到的数据。发送方可以根据接收到的确认消息确定哪些数据已经成功传输,哪些数据需要重新发送。

  2. 超时重传:TCP设置了一个定时器,如果发送方在一定时间内没有收到接收方的确认消息,就会认为该数据包丢失,需要重新发送。这样可以保证数据的可靠传输,即使发生了数据丢失。

  3. 滑动窗口:TCP使用滑动窗口机制来控制发送方发送数据的速度。接收方通过设置窗口大小来告诉发送方可以接收的数据量。发送方根据窗口大小和接收方的确认信息来控制发送数据的数量,以避免发送过多的数据导致接收方无法及时处理。

  4. 流量控制:TCP使用流量控制机制来确保发送方不会以过快的速度发送数据导致接收方无法处理。接收方通过发送窗口大小告诉发送方当前可接收的数据量,发送方根据窗口大小来控制发送的数据量,以保持发送和接收的平衡。

  5. 拥塞控制:TCP使用拥塞控制机制来避免网络拥塞。通过动态调整发送数据的速率来适应网络的状况,以避免过多的数据拥塞网络导致丢包和延迟增加。拥塞控制算法包括慢开始、拥塞避免和快速恢复等。

2.1,滑动窗口和流量控制

流量控制和滑动窗口是TCP协议中的两个关键概念,彼此之间密切相关。

滑动窗口是TCP协议中用于实现流量控制的机制。它是接收方维护的一个动态窗口,用于指示它可以接收的数据量。滑动窗口的大小取决于接收方的处理能力和可用缓冲区大小。

发送方根据接收方的滑动窗口大小来控制发送数据的速率。当发送方发送数据时,它会将数据按顺序编号,并将数据包括在滑动窗口内发送。接收方收到数据后,会发送确认消息,告知发送方已成功接收的数据编号。发送方根据接收方发送的确认消息,动态调整滑动窗口的大小。

如果接收方的滑动窗口较小,表示它的处理能力有限或网络状况不佳。发送方会根据接收窗口的大小来限制发送数据的量,以避免发送过多的数据导致接收方无法及时处理或数据丢失。发送方会等待接收方发送的确认消息,确认接收方已经成功接收了一部分数据后,再发送下一部分数据。

因此,滑动窗口机制是实现流量控制的基础。通过动态调整滑动窗口的大小,TCP协议可以确保发送方的发送速率适应接收方的处理能力和网络状况,从而实现流量控制,保证数据的可靠传输。

2.2,拥塞控制

拥塞控制是TCP协议中的一种机制,用于控制网络中的拥塞程度,以避免网络的过载和数据丢失。拥塞控制的目标是在保持网络稳定性的前提下,尽可能地利用网络带宽,提高传输效率。

拥塞控制通过以下几个机制来实现:

  1. 慢开始(Slow Start):发送方在开始发送数据时,以较慢的速率逐渐增加发送窗口的大小,以避免突然发送过多的数据造成网络拥塞。开始时,发送方以较小的拥塞窗口大小开始发送数据,随着每个往返时间的确认,拥塞窗口逐渐增加,发送速率也逐渐加快。

  2. 拥塞避免(Congestion Avoidance):在慢开始阶段后,发送方进入拥塞避免阶段。发送方将发送窗口的大小逐渐增加,但增长速率较慢,以避免突然增加发送数据的数量造成网络拥塞。发送方会根据网络的反馈信息(例如,接收方的确认消息和丢包事件)来调整发送窗口的大小。

  3. 快速重传(Fast Retransmit):当发送方连续收到接收方的重复确认消息时,表明网络中的某个数据包可能丢失。为了避免等待超时,发送方会立即重传可能丢失的数据包,而不必等待定时器超时。

  4. 快速恢复(Fast Recovery):当发送方进行快速重传后,进入快速恢复阶段。在快速恢复阶段,发送方将发送窗口的大小减半,并逐渐增加,而不是回到慢开始阶段。这样可以更快地恢复到正常的发送速率,而无需重新进行慢开始过程。

通过这些机制,TCP协议可以根据网络的拥塞情况动态调整发送窗口的大小和发送速率,以适应网络状况,避免过度拥塞和数据丢失。拥塞控制的目标是在网络的吞吐量和延迟之间找到一个平衡点,以实现高效可靠的数据传输。

2.3,三次握手和四次分手的过程

三次握手是建立 TCP 连接的过程,四次分手是关闭 TCP 连接的过程。下面是它们的详细步骤:

三次握手的过程:

  1. 客户端向服务器端发送 SYN(同步)包,表示请求建立连接。
  2. 服务器端收到 SYN 包后,向客户端发送 SYN+ACK(同步+确认)包,表示同意建立连接。
  3. 客户端收到 SYN+ACK 包后,再向服务器端发送 ACK(确认)包,表示连接建立成功。

四次分手的过程:

  1. 客户端向服务器端发送 FIN(结束)包,表示希望关闭连接。
  2. 服务器端收到 FIN 包后,向客户端发送 ACK 包,确认收到关闭请求。
  3. 服务器端继续发送数据给客户端,等待所有数据发送完毕。
  4. 服务器端发送 FIN 包给客户端,表示服务器端已经准备好关闭连接。
  5. 客户端收到 FIN 包后,向服务器端发送 ACK 包,确认收到关闭请求。
  6. 客户端继续等待一段时间(TIME_WAIT 状态),确保服务器端收到 ACK 包。
  7. 客户端关闭连接,服务器端也关闭连接,连接彻底关闭。

通过三次握手,客户端和服务器端建立起可靠的连接。而通过四次分手,客户端和服务器端安全地关闭连接,确保数据的完整性和可靠性。

2.4,为什么是三次握手四次分手

TCP 使用三次握手的原因是为了确保双方的同步和可靠性。

在两次握手的情况下,假设客户端发送连接请求的 SYN 包到服务器,但该包在网络中滞留了一段时间,而客户端并没有收到服务器的响应。此时,客户端会认为连接已建立,可以发送数据了。然而,实际上服务器并没有收到客户端的连接请求,也不知道客户端的存在。

如果此时客户端继续发送数据,服务器将无法处理这些数据,因为它根本不知道客户端的存在。这就导致了数据的不可靠性和通信的混乱。

通过引入第三次握手,服务器在收到客户端的连接请求后,向客户端发送确认连接的 SYN+ACK 包。客户端收到 SYN+ACK 包后再次向服务器发送确认连接的 ACK 包,这样双方都确认了对方的存在和连接的可靠性。

同样的道理,四次分手也是为了确保双方能够正确地关闭连接并确认对方的关闭意图,从而避免数据的丢失和不一致。

因此,TCP 使用三次握手和四次分手是为了保证通信的可靠性和同步性,确保双方的连接建立和关闭都是可靠的。

2.5,为什么客户端最后要等待一段时间

在 TCP 的四次分手过程中,客户端最后发送的 ACK 包是用来确认服务器端的 FIN 包的。当客户端发送 ACK 包后,它进入了 TIME_WAIT 状态,并且会等待一段时间。

等待的目的是为了确保服务器端能够接收到客户端发送的 ACK 包。这是因为在网络中,ACK 包可能会因为网络延迟或丢失而未能到达服务器端。如果客户端在发送 ACK 包后立即关闭连接,而服务器端未能接收到 ACK 包,那么服务器端会误认为连接已经关闭,而实际上客户端可能还在发送数据。这将导致数据的丢失和不一致。

通过等待一段时间,客户端确保服务器端能够接收到 ACK 包。在这段时间内,客户端会保持连接的状态,并且能够接收服务器端可能发送的重传数据。同时,等待时间也可以使之前网络中滞留的数据包得到丢弃,避免对后续连接产生干扰。

一般情况下,TIME_WAIT 状态的等待时间为 2 倍的最大报文段生存时间(2MSL,Maximum Segment Lifetime)。MSL 是指报文段在网络中存活的最长时间,通常为几分钟。这样做可以确保服务器端完全关闭连接后,客户端的连接也能够正常关闭,不会出现数据的重传或混乱。

因此,客户端等待一段时间是为了保证连接的可靠关闭,避免数据的丢失和不一致。

3,TCP粘包和分包

TCP粘包和分包是在TCP传输过程中可能出现的问题。

TCP粘包指的是发送方连续发送的多个小数据包在接收方接收时会被合并成一个大数据包的情况,导致接收方无法正确解析每个小数据包。TCP分包则是发送方发送的一个大数据包在接收方接收时被拆分成多个小数据包的情况,导致接收方无法完整地接收到原始数据包。

处理TCP粘包和分包问题的常见方法有以下几种:

  1. 消息定长:发送方在发送数据时,固定每个数据包的长度,接收方根据固定长度进行分包处理。

  2. 特定字符分隔:发送方在数据包之间添加特定的分隔符,接收方根据分隔符进行分包处理。

  3. 消息长度字段:发送方在每个数据包的头部添加表示数据包长度的字段,接收方首先读取该字段,然后根据长度字段的值读取相应长度的数据包。

  4. 使用消息边界:发送方在每个数据包之间添加消息边界标识,接收方根据消息边界标识进行分包处理。

  5. 应用层协议设计:设计应用层协议,在数据包中包含消息类型、消息长度等信息,接收方根据协议解析数据包。

选择哪种方法处理粘包和分包问题,取决于具体的应用场景和需求。在实际应用中,可以根据数据的特点和传输要求选择合适的处理方式,以确保数据的完整性和正确解析。

4,UDP怎么做可靠性传输

UDP协议本身并不提供可靠性保证,它是一种无连接的、不可靠的传输协议。但是,在应用层可以通过一些手段来增加UDP的可靠性。

以下是一些常用的方法来提高UDP的可靠性:

1. 发送方重传:发送方可以在发送数据后启动一个定时器,如果在一定时间内没有收到确认或响应,就重新发送数据包。

2. 序号和确认机制:发送方为每个数据包分配一个唯一的序号,并在接收方发送确认消息来确认接收到的数据包。发送方可以通过确认消息来确定是否需要重传数据包。

3. 超时重传:发送方可以设置一个合适的超时时间,如果在超时时间内没有收到确认消息,就认为数据包丢失,进行重传。

4. 应用层协议设计:设计应用层协议,在数据包中包含消息类型、序号、确认号、重传请求等信息,通过这些信息来实现可靠性机制。

需要注意的是,尽管这些方法可以增加UDP的可靠性,但是相比TCP协议,UDP的可靠性仍然较低。在需要确保可靠性的情况下,更常用的是选择使用TCP协议。

5,http

HTTP(Hypertext Transfer Protocol)是一种用于在Web上传输数据的协议。它是一种无状态、应用层协议,用于客户端和服务器之间的通信。

HTTP的基本工作原理是客户端向服务器发送请求,并接收服务器返回的响应。请求和响应的格式遵循特定的结构,包括请求行、请求头部和请求正文(对于POST请求)以及响应行、响应头部和响应正文。

HTTP协议使用TCP作为传输层协议,默认使用80端口进行通信。它支持多种请求方法,常见的有GET、POST、PUT、DELETE等。GET方法用于请求获取资源,POST方法用于提交数据到服务器,PUT方法用于更新资源,DELETE方法用于删除资源等。

HTTP协议使用URL(Uniform Resource Locator)来定位资源。URL由协议类型、主机名、端口号、路径和查询参数组成,例如:http://www.example.com/index.html?param1=value1&param2=value2。

HTTP协议是无状态的,意味着服务器不会保留客户端请求的状态信息。为了在请求之间保持状态,可以使用Cookie或Session等机制。

除了基本的请求和响应功能外,HTTP还支持缓存机制、代理服务器、身份认证、安全性等特性,以满足不同的应用需求。

总的来说,HTTP是一种简单、灵活和广泛应用的协议,它为客户端和服务器之间的通信提供了标准化的规范和约定。

6,http和https

HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)是用于在客户端和服务器之间传输数据的协议。它们在数据传输的安全性方面存在显著的区别:

  1. 安全性:HTTP是明文协议,数据在传输过程中不进行加密。这意味着通过HTTP传输的数据可以被窃听者拦截和读取,存在安全风险。而HTTPS通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对数据进行加密,确保在传输过程中的机密性和完整性。

  2. 加密方法:HTTP不使用任何加密机制,数据以纯文本形式传输。而HTTPS使用公钥加密来确保数据的机密性。在建立HTTPS连接时,服务器会发送一个数字证书,其中包含公钥。客户端使用该公钥对数据进行加密,只有服务器拥有相应的私钥才能解密。

  3. 默认端口:HTTP使用默认的端口号80进行通信,而HTTPS使用默认的端口号443。这样可以使网络设备根据端口号来正确识别并转发HTTP或HTTPS的请求。

  4. 证书要求:为了使用HTTPS,服务器需要获得并安装一个有效的数字证书。这个证书由可信任的第三方机构(如证书颁发机构)签发,用于验证服务器的身份。这样客户端可以信任与该机构相关的证书,确保与服务器之间的通信是安全和可靠的。

  5. SEO影响:搜索引擎优化(SEO)方面,使用HTTPS可以为网站提供额外的优势。一些搜索引擎更倾向于显示和排名使用HTTPS的网站,因为它们提供更安全的用户体验。

综上所述,HTTP和HTTPS之间的主要区别在于数据传输的安全性和加密机制。HTTPS通过加密数据传输来提供更高的安全级别,适用于需要保护敏感信息(如个人身份、密码、支付信息等)的场景。因此,在涉及隐私和安全性要求较高的情况下,使用HTTPS是更为推荐的选择。

7,https是怎么进行加密的

HTTPS使用公钥加密(非对称加密)和对称加密的组合来保护数据传输的机密性。下面是HTTPS加密的基本过程:

  1. 客户端发起连接:客户端使用HTTPS协议发起与服务器的连接请求。

  2. 服务器证书:服务器将其数字证书发送给客户端。证书中包含服务器的公钥和其他相关信息。证书由可信任的第三方机构(如证书颁发机构)签发。

  3. 客户端验证证书:客户端接收到服务器的证书后,会验证证书的有效性和合法性。它会检查证书的签名是否由受信任的颁发机构签发,以及证书中的域名是否与访问的域名匹配。

  4. 生成会话密钥:一旦客户端验证了服务器的证书,它会生成一个随机的会话密钥(对称密钥)。这个会话密钥将用于加密和解密后续的数据传输。

  5. 用公钥加密会话密钥:客户端使用服务器的公钥对生成的会话密钥进行加密,并将加密后的会话密钥发送给服务器。

  6. 服务器解密会话密钥:服务器使用自己的私钥对收到的加密会话密钥进行解密,从而获得会话密钥。

  7. 安全通信:客户端和服务器现在都具备了相同的会话密钥,它们可以使用对称加密算法来加密和解密后续的数据传输。这意味着数据在传输过程中将使用会话密钥进行加密,只有服务器和客户端才能解密数据。

通过这种公钥加密和对称加密的组合,HTTPS提供了数据传输的机密性和安全性。公钥加密用于安全地交换对称密钥,而对称加密用于加密实际的数据传输,提供更高效的加密和解密过程。

需要注意的是,以上描述的是一种基本的HTTPS加密过程。实际中,还会有其他的安全机制和协议,如数字签名、证书链验证、协商加密算法等,来增强HTTPS的安全性和可靠性。

7.1,对称性加密和非对称性加密

对称加密和非对称加密是两种常见的加密算法,它们在加密和解密过程中使用的密钥类型和算法原理上存在显著差异。

1. 对称加密(Symmetric Encryption):
对称加密使用相同的密钥(称为对称密钥)来进行加密和解密。发送方使用对称密钥将明文转换为密文,而接收方使用相同的对称密钥将密文解密为明文。对称加密算法执行速度快,适用于大量数据的加密和解密。

主要特点:
- 快速:对称加密算法计算速度快,适合高效加密和解密大量数据。
- 同一密钥:加密和解密使用相同的密钥。
- 密钥分发:安全地分发对称密钥是一个挑战,因为任何持有该密钥的人都可以解密数据。

常见的对称加密算法有AES(高级加密标准)、DES(数据加密标准)、3DES等。

2. 非对称加密(Asymmetric Encryption):
非对称加密使用一对密钥:公钥和私钥。发送方使用接收方的公钥对数据进行加密,而接收方使用自己的私钥进行解密。公钥可以被任何人获取,而私钥保持机密,确保只有私钥持有者才能解密数据。

主要特点:
- 安全性:非对称加密提供了更高的安全性,因为私钥不会被公开分享。
- 密钥分发:公钥可以自由传播,而私钥保密。
- 计算复杂:相对于对称加密,非对称加密算法计算速度较慢。

常见的非对称加密算法有RSA(Rivest-Shamir-Adleman)、DSA(数字签名算法)和ECC(椭圆曲线加密)。

对称加密和非对称加密通常在实际应用中结合使用。一般的做法是,使用对称加密算法对数据进行加密,然后使用非对称加密算法加密对称密钥,并将其与加密后的数据一起传输。这样既保证了高效的数据传输,又实现了安全的密钥交换。

8,帧同步和状态同步

帧同步和状态同步是游戏网络同步的两种常见方式,它们有以下区别:

  1. 基本原理:

    • 帧同步:在每个固定的时间间隔内,服务器向所有客户端发送当前帧的游戏状态,客户端根据接收到的状态进行同步,所有玩家在同一帧内执行相同的操作,保持游戏状态的一致性。
    • 状态同步:每当有玩家进行状态改变时,将该状态改变的信息发送给其他玩家,其他玩家根据接收到的信息更新游戏状态,实时反映出玩家的状态变化。
  2. 数据传输量:

    • 帧同步:需要在每一帧中传输完整的游戏状态,包括所有玩家的操作和当前的游戏状态数据,因此数据传输量较大。
    • 状态同步:仅传输状态改变的信息,只需要传输少量的数据,因此数据传输量较小。
  3. 网络延迟处理:

    • 帧同步:由于每个操作都需要等待服务器的响应,对网络延迟比较敏感,较高的延迟会导致操作的延迟和不同步现象。
    • 状态同步:状态改变的信息可以即时发送给其他玩家,可以更好地适应网络延迟,降低延迟对游戏体验的影响。
  4. 实现复杂度:

    • 帧同步:需要在服务器端维护整个游戏状态,并确保所有客户端都能按照相同的顺序执行操作,实现较为复杂。
    • 状态同步:每个玩家只需发送和接收自己的状态改变信息,实现相对简单。

综上所述,帧同步适用于需要保持严格一致性的游戏场景,对于网络延迟和带宽要求较高;而状态同步适用于需要实时反映玩家状态变化的游戏场景,对网络延迟和带宽要求相对较低。选择哪种方式要根据具体的游戏需求和性能要求来决定。

8.1帧同步如何确保同步性

帧同步通过以下方式确保同步性:

  1. 固定帧率:游戏服务器和客户端都采用固定的帧率进行运行,例如每秒 60 帧。这样可以保证所有参与游戏的实体在同样的时间间隔内进行更新和同步。

  2. 严格的操作顺序:所有玩家的操作按照特定的顺序进行处理和应用,确保每个玩家的操作都按照相同的顺序作用于游戏状态。一般由服务器负责接收、排序和应用玩家的操作。

  3. 时间校正:由于网络延迟的存在,玩家的操作可能会有一定的延迟到达服务器。为了保持同步性,服务器会根据玩家的操作时间戳和网络延迟进行时间校正,使得操作能够在正确的时间点应用于游戏状态。

  4. 状态广播:在每个固定的帧内,服务器会将当前的游戏状态广播给所有客户端。客户端接收到服务器发送的状态后,根据接收到的状态更新本地的游戏状态,确保所有客户端在同一帧内具有相同的游戏状态。

  5. 插值和平滑:为了在客户端展示流畅的动画效果,客户端会使用插值和平滑的方式在帧之间进行状态的过渡。这样即使网络延迟导致的状态更新不连续,玩家仍然能够看到平滑的游戏表现。

综上所述,帧同步通过固定帧率、严格的操作顺序、时间校正、状态广播以及插值和平滑等手段来确保玩家之间的同步性,从而保证多个客户端在同一时间内看到相同的游戏状态和表现。

猜你喜欢

转载自blog.csdn.net/qq_53211468/article/details/131037543