计算机网络(11)和流量控制补充

这一篇对数据链路层中的和流量控制进行详细学习

流量控制(Flow Control)是计算机网络中确保数据流平稳传输的技术,旨在防止数据发送方发送过多数据,导致接收方的缓冲区溢出,进而造成数据丢失或传输失败。流量控制通常通过调整发送方的数据发送速率,确保接收方能有效地处理和存储接收到的数据。

流量控制的目的:

  1. 防止缓冲区溢出:接收方的缓冲区有限,若发送方发送数据过快,接收方无法及时处理,可能会导致缓冲区溢出,造成数据丢失。
  2. 提高传输效率:通过合适的流量控制机制,避免过快或过慢的数据流动,从而实现高效、可靠的数据传输。
  3. 动态调整发送速度:根据网络状态和接收方的处理能力,动态地调整发送方的发送速率,确保数据传输的平稳性。

流量控制的类型

流量控制有多种方法,主要可以分为两类:端到端流量控制(End-to-End Flow Control)和链路层流量控制(Link-Level Flow Control)。

1. 端到端流量控制

端到端流量控制是在源设备和目标设备之间实现的流量控制。常见的协议有:

  • TCP流量控制(基于滑动窗口机制)

    TCP(传输控制协议)是端到端流量控制的典型例子。TCP流量控制的核心机制是滑动窗口,即接收方通过控制窗口大小(Window Size)来限制发送方可以发送的数据量。

    • 窗口大小:表示接收方的缓冲区能够接收的最大字节数。

    • 滑动窗口机制:发送方根据接收方的窗口大小控制发送数据的量。每次接收到确认(ACK)后,窗口会“滑动”并更新,允许发送更多的数据。

    • 发送方操作:当发送方发送数据时,它会根据接收到的窗口大小决定可以发送的数据量。发送的数据量不能超过接收方指定的窗口大小。

    • 接收方操作:接收方会告知发送方当前窗口的大小,并根据自身的缓冲区状态来动态调整该窗口大小。

    例子: 如果接收方的缓冲区有1000字节的可用空间,那么它会通过ACK报文告知发送方,发送方此时最多可以发送1000字节的数据。一旦接收方处理完这些数据,它会更新窗口大小,允许发送更多的数据。

2. 链路层流量控制

链路层流量控制是指在数据链路层(如以太网、PPP等)实现的流量控制。它主要用于控制相邻设备之间的数据传输速率。常见的链路层流量控制方法包括:

  • 基于停止-等待协议(Stop-and-Wait):这种方法要求发送方每发送一帧数据后,都等待接收方的确认信号(ACK)才可以发送下一帧。这种方法在低速网络中比较常见,适合简单的流量控制。

  • XON/XOFF协议:这是一种基于字符的流量控制协议,通常用于串行通信中。发送方通过发送XOFF(停止发送)或XON(恢复发送)字符来控制数据的发送。接收方当接收到XOFF字符时会停止接收数据,直到接收到XON字符才恢复接收。

3. 拥塞控制与流量控制的区别

流量控制和拥塞控制是两个不同的概念,虽然它们在目的上有所重叠,但有不同的实现方式:

  • 流量控制:是确保数据发送速率与接收方处理能力相匹配,避免接收方的缓冲区溢出。
  • 拥塞控制:是防止网络中出现过多的数据流导致网络节点(如路由器)过载,并且确保网络的整体流量不会超出其承载能力。

流量控制的常见方法

  1. 滑动窗口机制(Sliding Window):主要用于TCP协议。接收方通过指示一个窗口大小,发送方根据窗口大小限制其发送的数据量。随着接收方确认数据,窗口会滑动,允许发送更多数据。

  2. 停止-等待协议(Stop-and-Wait):一种简单的流量控制方法。发送方每发送一个数据帧都必须等待接收方的确认(ACK)才能发送下一个数据帧。这种方法效率较低,但适用于低带宽和低延迟的环境。

  3. XON/XOFF协议:一种字符级的流量控制协议,广泛用于串行通信和基于流的协议(如Telnet)。发送方通过发送XON字符(恢复发送)和XOFF字符(停止发送)来控制数据流。

  4. 基于令牌的流量控制(Token-based Flow Control):在这种方式下,发送方必须获得一个“令牌”才能发送数据。令牌的控制方式确保了数据的流量不会过大,通常用于分布式系统和多路复用技术中。

  5. 缓冲区管理:接收方会为每个连接分配一个缓冲区,并根据缓冲区的空闲情况通知发送方适当的发送速率。通常,接收方通过滑动窗口或发送窗口大小来进行流量控制。

流量控制的应用场景

  • 高带宽、低延迟网络:如光纤网络、卫星通信,流量控制帮助调整发送方的速率以防止接收方的缓冲区溢出。
  • 实时传输:例如,视频流和语音通话等应用需要非常精细的流量控制,确保数据流的平稳,避免丢包或时延过高。
  • 有限资源的网络:如低功耗的物联网设备(IoT)中,流量控制帮助节省带宽和减少功耗。

二.流量控制协议:

流量控制协议可以根据通信信道的噪声情况分为两类:无噪声信道和有噪声信道。不同的信道噪声情况会影响流量控制的实现方式。

1. 无噪声信道(Noiseless Channel)

在无噪声信道中,假设传输过程中不会出现数据错误和丢包的情况。由于信道质量好,流量控制的重点在于协调发送方和接收方的速度,而不是数据的重传和纠错。无噪声信道的流量控制协议通常较为简单,高效性较强。

  • 典型协议
    • 停止-等待协议(Stop-and-Wait Protocol):发送方每次发送一个数据帧,然后等待接收方的确认(ACK)。在无噪声信道中,接收方总是能收到正确的数据帧,因此只需在每次数据发送后等待确认即可。

2. 有噪声信道(Noisy Channel)

在有噪声信道中,数据可能因传输错误或干扰而发生丢失或损坏。流量控制协议在解决速率匹配问题的同时,还需要处理错误控制,确保接收方接收到的都是正确的数据帧。

  • 典型协议
    • 停止-等待ARQ(Stop-and-Wait Automatic Repeat Request):这是带自动重传请求的停止-等待协议。在数据帧丢失或损坏时,接收方不会发送确认(ACK),从而触发发送方的重传。发送方会在超时后重发数据,以保证数据的可靠到达。

回退N帧ARQ和选择重传ARQ都是属于滑动窗口协议:

    • 回退N帧ARQ(Go Back-N ARQ):发送方可以连续发送多个帧,但如果检测到某一帧出错,接收方会丢弃之后所有的帧发送发需从错误帧开始重新传输
    • 选择重传ARQ,发送方也可以连续发送多帧数据,但当某一帧出错时,接收方只请求重传出错的帧,而不是全部重传。

停等协议(Stop-and-Wait ARQ)详解

停等协议(Stop-and-Wait ARQ) 是一种最简单的自动重传请求(ARQ)协议,用于在数据链路层实现可靠的数据传输。该协议通过确认每一帧的接收情况来确保数据的正确传递。当发送方发送一帧数据后,它会等待接收方的确认(ACK)信号,直到收到确认才会发送下一帧。此过程每次仅传输一帧数据,因此称为“停等”。

工作原理

  1. 发送方操作

    • 发送方发送一帧数据(称为数据帧)给接收方。
    • 发送方停下,等待接收方发送一个确认帧(ACK)来确认数据帧的接收。
    • 一旦收到确认帧(ACK),发送方继续发送下一帧数据。
    • 如果在超时之前没有收到确认帧(ACK),则发送方会重新发送当前数据帧。
  2. 接收方操作

    • 接收方接收到数据帧后,如果数据正确无误,就返回一个确认帧(ACK)给发送方。
    • 如果接收方检测到数据帧有错误(如校验错误),它将丢弃该数据帧,并不会发送确认帧。发送方会在超时后重新发送该数据帧。
  3. 超时与重传

    • 在发送数据帧后,发送方会启动一个定时器。如果在定时器到期前未收到确认帧,发送方会重传该数据帧。
    • 定时器的长度必须设置合理,以避免过早的重传或延迟过长的重传。

停等协议的流程示意

  1. 发送方 发送数据帧 Data1 给 接收方
  2. 接收方 正确接收 Data1 后,发送确认帧 ACK1 回到 发送方
  3. 发送方 收到 ACK1 后,继续发送下一帧 Data2
  4. 如果 接收方 在接收数据帧时发现错误(如 CRC 错误),则丢弃该帧,并不发送确认帧。发送方 将等待超时并重新发送该帧。

停等协议的优缺点

优点:
  1. 实现简单:停等协议的实现相对简单,发送方只需要发送一帧数据并等待确认,接收方只需返回一个确认帧。
  2. 保证可靠性:通过等待确认和重传机制,停等协议可以保证数据的可靠传输,即使在存在传输错误的情况下,也能确保数据最终被正确传递。
  3. 适用于低误码率的环境:在误码率较低或网络延迟较小的情况下,停等协议可以有效地完成数据传输。
缺点:
  1. 效率低:由于每次只能发送一帧数据,且发送方必须等待确认才能继续发送下一帧,因此其带宽利用率较低。每传输一帧数据都需要等待确认,因此长时间的等待会影响效率。

  2. 延迟较高:每帧数据的确认都需要等待往返时间(RTT)。在高延迟的网络中,停等协议的效率会显著下降,尤其是在长距离传输中。

  3. 带宽利用不充分:停等协议每次只发送一帧数据,导致网络带宽的使用不充分,尤其在传输速率较高时,带宽的浪费尤为明显。

适用场景

  1. 低速率或低误码的环境:在网络延迟较低、传输速率较低或错误率较低的场景下,停等协议能够以简单高效的方式提供可靠的数据传输。

  2. 资源受限的系统:在一些资源受限的系统(如简单的嵌入式系统)中,停等协议由于其实现简单,往往是最适合的选择。

  3. 信道质量好的情况:如果信道的误码率很低,且丢包率也较低,停等协议能够提供较为可靠的服务。

停等协议的例子

假设发送方和接收方之间存在一个简单的通信链路,数据帧由8位的二进制数据构成。

  1. 发送方:发送方传输的数据帧为 10101010,并等待接收方的确认。
  2. 接收方:接收方正确接收到数据帧后,返回一个确认帧 ACK,告诉发送方已成功接收到数据。
  3. 如果接收方在收到数据时发现错误,例如数据帧为 10101001,它将丢弃该数据帧,不返回确认帧。发送方超时后会重新发送数据帧。

回退N帧 ARQ(Go-Back-N ARQ)详解

回退N帧 ARQ(Go-Back-N ARQ) 是一种自动重传请求(ARQ)协议,它用于在数据链路层实现可靠的数据传输。与 停等协议(Stop-and-Wait ARQ) 不同,回退N帧 ARQ 允许发送方一次发送多帧数据(最多为 N 帧),但接收方只按顺序确认接收到的帧。

工作原理

  1. 发送方操作

    • 发送方可以在等待确认之前连续发送多帧数据。它会为每一帧数据分配一个序列号(通常是一个循环的序列号,范围从 0 到 N-1),并将数据帧发送到接收方。
    • 发送方维护一个发送窗口,窗口大小为 N。窗口内的帧可以同时发送。
    • 每发送一帧数据,发送方启动一个定时器,并等待该帧的确认(ACK)。如果超时未收到确认,发送方将重新发送当前帧以及所有后续帧(即回退 N 帧)。
  2. 接收方操作

    • 接收方按顺序接收数据帧。当接收方正确接收到数据帧时,它会向发送方发送一个 累积确认帧(Cumulative ACK),该确认帧表示接收到的数据帧的最大序列号。
    • 如果接收方收到的帧的序列号不连续(即前面的帧丢失或错误),接收方会丢弃当前帧并不会向发送方发送确认,直到接收到缺失的帧。
  3. 超时与重传

    • 如果发送方在等待确认期间超时,它会重新发送从当前未确认帧开始的所有后续帧。这是所谓的“回退”操作,因为发送方会回到最后一个确认帧之后的所有帧并重发。
    • 重传时,所有未被确认的帧都需要重新发送,而不仅仅是丢失或错误的帧。

回退N帧 ARQ 的工作示意图

假设窗口大小为 N = 4,发送方和接收方按以下步骤工作:

  1. 发送方 发送帧 0123,并为每个帧设置定时器。
  2. 接收方 正确接收到帧 01,然后返回一个确认帧 ACK 1,表示帧 0 和 1 已经被成功接收。
  3. 发送方 接收到 ACK 1 后,滑动窗口,并发送新的帧 4567
  4. 如果 接收方 错误地接收到帧 4,它会丢弃该帧并不发送任何确认帧。直到它收到帧 3 后,才会返回一个确认帧 ACK 3
  5. 发送方 在超时后会重新发送帧 4567,直到接收到正确的确认。

回退N帧 ARQ 例子

假设发送方的窗口大小为 N = 4,接收方正确接收到的数据帧序列为 0, 1, 2, 3, 4, 5, 6, 7,并且窗口序列号范围从 0 到 3

场景 1:正常数据传输
  1. 发送方 发送数据帧 0, 1, 2, 3(窗口大小为4)。
  2. 接收方 接收到帧 0, 1,并发送 ACK 1(表示帧 0 和 1 已经成功接收)。
  3. 发送方 收到 ACK 1 后,发送新的帧 4, 5, 6, 7,同时滑动窗口。
  4. 接收方 确认收到所有数据帧,直到 7
  5. 发送方 接收到 ACK 7,数据传输完成。
场景 2:丢帧重传

假设窗口大小仍为 N = 4,但 接收方 丢失了帧 4

  1. 发送方 发送数据帧 0, 1, 2, 3 和 4, 5, 6, 7
  2. 接收方 确认接收到 0, 1, 2, 3,并发送 ACK 3,但帧 4 被丢失。
  3. 发送方 收到 ACK 3 后,继续发送新的帧 4, 5, 6, 7,直到超时。
  4. 在超时后,发送方 会重发 所有未确认的帧,即帧 4, 5, 6, 7
  5. 接收方 在接收到帧 4, 5, 6, 7 后,返回 ACK 7,完成数据传输。

回退N帧 ARQ 的优缺点

优点:
  1. 提高效率:相比于停等协议(Stop-and-Wait ARQ),回退N帧 ARQ 允许在等待确认的同时发送多帧数据,从而提高了传输效率。
  2. 适应较长延迟的网络:回退N帧 ARQ 允许发送方在等待确认期间发送更多的帧,因此减少了等待时间,提高了数据传输速率。
缺点:
  1. 重传的开销较大:当某一帧丢失或出错时,发送方不仅需要重传丢失的帧,还需要重传所有后续帧。这导致了带宽的浪费,尤其是在丢失的数据帧较少的情况下。
  2. 窗口大小的限制:回退N帧 ARQ 的效率与窗口大小密切相关,窗口太小会导致效率低,窗口太大会增加发送方和接收方的负担,因此需要根据具体网络环境来调整窗口大小。

选择重传 ARQ(Selective Repeat ARQ)详解

选择重传 ARQ(Selective Repeat ARQ) 是一种自动重传请求(ARQ)协议,旨在提供高效的可靠数据传输,尤其是在不稳定的网络环境中。与 回退N帧 ARQ(Go-Back-N ARQ) 相比,选择重传 ARQ 更加高效,它允许发送方和接收方仅重传那些丢失或损坏的帧,而不是回退所有后续帧。

工作原理

  1. 发送方操作
    • 窗口大小:发送方一次可以发送多个数据帧,但它们的数量受发送窗口大小(N)的限制。每个帧都有一个唯一的序列号。
    • 连续发送数据帧:发送方可以连续发送多个数据帧,直到达到窗口大小为止,但不会等待确认。
    • 定时器:每个帧在发送时都会启动一个定时器,超时未收到确认时才会重传。
  2. 接收方操作
    • 接收确认(ACK):接收方会对接收到的帧进行确认,单个帧的确认不会影响其他帧的确认。接收方会对每个正确接收到的帧发送一个独立的确认。
    • 乱序接收:接收方可以接收到乱序的数据帧(即某些帧丢失或错误)。如果接收方接收到的数据帧有缺失,它会缓存这些乱序帧,并等待缺失的帧到达。
    • 确认机制:接收方向发送方发送 选择性确认(Selective ACK)。只有那些成功接收到并顺序的帧才会被确认。
  3. 超时与重传
    • 超时重传:如果发送方未收到帧的确认,它会重传该帧,而不是回退所有后续帧。
    • 仅重传丢失或损坏的帧:在选择重传 ARQ 中,发送方和接收方仅会重传那些丢失或损坏的帧,而不是所有的帧。因此,减少了带宽浪费。

选择重传 ARQ 的工作示意图

假设发送方的窗口大小为 N = 4,接收方可以接收到乱序的数据帧,具体过程如下:

  1. 发送方 发送数据帧 0, 1, 2, 3,并为每个帧设置定时器。
  2. 接收方 正确接收到帧 0, 2,并返回确认 ACK 0 和 ACK 2(表示接收到的最大序列号)。
  3. 发送方 收到 ACK 0 和 ACK 2 后,继续发送新的帧 4, 5, 6
  4. 如果 接收方 错误地接收到帧 1,它会请求重新发送帧 1。发送方仅重传帧 1,而不必重新发送帧 2, 3

选择重传 ARQ 的特点

  1. 发送窗口与接收窗口

    • 发送窗口:与回退N帧 ARQ 相同,发送窗口是由发送方控制的,窗口大小为 N,发送方可以一次发送 N 个数据帧。
    • 接收窗口:与回退N帧 ARQ 不同,接收方也有一个接收窗口,允许接收方缓存顺序错乱的数据帧。
  2. 独立确认

    • 每个数据帧都会单独确认,接收方即使接收到乱序帧,也会缓存它们并发送针对这些帧的确认。
    • 发送方只需要重传丢失或错误的帧,而不是重传所有后续帧
  3. 缓存机制

    • 接收方可以缓存那些按顺序接收的数据帧,同时缓存未按顺序接收的数据帧,等待丢失的帧到达后按顺序交付给上层。
  4. 减少带宽浪费

    • 选择重传 ARQ 通过只重传丢失或损坏的帧而不是整个窗口的帧,减少了重传的带宽开销,尤其是在丢失帧较少时。

选择重传 ARQ 的优缺点

优点:
  1. 高效的带宽利用:相比回退N帧 ARQ,选择重传 ARQ 仅重传丢失或损坏的帧,减少了不必要的重传,从而提高了带宽利用率。
  2. 支持乱序接收:接收方可以接收乱序帧,并在收到丢失的帧后将这些乱序帧按顺序交付给上层,提高了数据传输的灵活性。
  3. 适用于高延迟和高丢包率的网络:在丢包较高或者网络延迟较大的环境中,选择重传 ARQ 可以减少因丢包导致的频繁重传,优化了传输性能。
缺点:
  1. 复杂度较高:由于需要缓存乱序数据帧并进行选择性确认,选择重传 ARQ 的实现比回退N帧 ARQ 要复杂。
  2. 接收方缓存开销:接收方需要有足够的缓存来存储乱序到达的数据帧。如果缓存不够,接收方可能无法正确接收数据。
  3. 传输延迟增加:由于发送方与接收方需要等待更多的确认,选择重传 ARQ 可能会增加传输延迟,尤其是在高延迟网络环境中。

选择重传 ARQ 的例子

假设发送方的窗口大小为 N = 4,接收方可以乱序接收帧,且每个帧都通过独立确认:

  1. 发送方 发送数据帧 0, 1, 2, 3
  2. 接收方 正确接收到帧 0, 2,并返回确认 ACK 0 和 ACK 2
  3. 发送方 继续发送新的帧 4, 5, 6
  4. 接收方 收到帧 1 后,确认 ACK 1
  5. 如果接收方有丢失的帧,发送方仅重传丢失的帧,避免重传所有帧。

滑动窗口协议(Sliding Window Protocol)详解

滑动窗口协议是一种用于可靠数据传输的协议,广泛应用于数据链路层和传输层。它通过使用一个“窗口”来控制数据的流动,实现流量控制和保证数据的可靠性。滑动窗口协议既可以用于全双工通信,也可以用于半双工通信。其核心思想是允许发送方在未接收到确认的情况下,连续发送多个数据帧,而接收方则按顺序接收这些数据帧并发送确认。

基本概念

在滑动窗口协议中,发送方和接收方都维护一个窗口。这个窗口在数据传输过程中“滑动”,允许在发送方与接收方之间并行传输多个数据包。窗口的大小(称为窗口大小)决定了发送方可以发送多少个未确认的数据包。

滑动窗口协议的组成部分

  1. 发送方窗口(Sender Window):发送方窗口控制发送方可以同时发送多少个未确认的数据包。窗口的大小通常是由协议中的流量控制机制决定的。

  2. 接收方窗口(Receiver Window):接收方窗口控制接收方可以接收多少个数据包。它确保接收方能按照顺序接收并处理数据。

  3. 序列号:每个数据包都被赋予一个唯一的序列号,用于区分不同的数据包。

  4. 确认(ACK):接收方确认已成功接收数据包,通常使用累计确认(Cumulative ACK)方式,即确认某一序列号及之前所有数据包。

  5. 滑动窗口机制:随着数据包的确认,发送方和接收方的窗口向前滑动,从而使新的数据包进入窗口进行发送或接收。

滑动窗口协议的工作原理

  1. 初始化阶段

    • 发送方和接收方初始化各自的窗口。假设窗口大小为 N,那么发送方可以在没有等待确认的情况下连续发送 N 个数据包。
  2. 数据传输阶段

    • 发送方通过滑动窗口机制发送多个数据包。发送方发送的每个数据包都会带有一个序列号,发送方在发送数据时不会等待每个数据包的确认,而是可以连续发送多个数据包。
    • 接收方接收到数据包后,会根据序列号对数据包进行排序,并按顺序进行处理。
    • 接收方对每个成功接收到的数据包发送确认(ACK)。一般情况下,接收方会发送累计确认(即确认最后一个按顺序接收到的数据包),表示所有之前的数据包都已正确接收。
  3. 窗口滑动

    • 一旦发送方接收到接收方的确认,它就可以“滑动”窗口,将窗口向前移动,继续发送新的数据包。
    • 接收方接收到确认时,也会滑动其接收窗口,准备接收新的数据包。

滑动窗口的两种类型

  1. Go-Back-N ARQ(回退N帧 ARQ):

    • 在回退N帧 ARQ 协议中,发送方可以连续发送多个数据帧,但接收方必须按顺序接收。如果接收方发现丢失或损坏的数据帧,它会丢弃该帧,并要求发送方重新发送所有之后的帧。
    • 发送方窗口的大小为 N,接收方只允许按顺序接收数据帧。
  2. Selective Repeat ARQ(选择重传 ARQ):

    • 在选择重传 ARQ 协议中,发送方可以连续发送多个数据帧,接收方按顺序接收,并对每个接收到的数据帧进行单独确认。
    • 发送方仅重传丢失或损坏的数据帧,而不是所有帧。这比回退N帧 ARQ 更加高效。

滑动窗口协议的优缺点

优点
  1. 高效的数据传输:通过允许发送多个数据包而不等待确认,滑动窗口协议减少了传输延迟。
  2. 流量控制:发送方和接收方可以通过调整窗口大小来控制数据流量,防止接收方因缓存溢出而丢失数据。
  3. 容错能力强:尤其在选择重传 ARQ 协议中,丢失的帧仅需要重传,减少了带宽的浪费。
缺点
  1. 复杂度较高:相比于简单的停止等待协议,滑动窗口协议的实现较为复杂,尤其是在接收方需要缓存和排序帧的情况下。
  2. 延迟较大:在高延迟的网络中,滑动窗口协议的效果可能受到影响,因为窗口的滑动需要依赖于数据包的确认。
  3. 窗口管理:对于发送方和接收方来说,维护一个大的窗口可能会导致内存开销较大,尤其是在大量数据传输的情况下。

应用场景

  1. 高带宽延迟产品(BDP)环境:滑动窗口协议尤其适合用于高带宽和高延迟的网络环境,例如卫星网络、长途光纤连接等。
  2. TCP协议:滑动窗口协议是 TCP协议 的核心部分。TCP通过滑动窗口实现流量控制,并保证数据可靠传输。
  3. 实时应用:比如视频流、音频流等实时应用,也可以采用滑动窗口机制,以保证流畅的传输。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可扩展架构与分层架构

可扩展架构 1 概述 软件系统与硬件/建筑系统最大的区别就是可以迭代升级和扩展,一个硬件生产出来后就不会进行改变,除非拿去售后维修,一个建筑完工后也不会改变其整体的结构,除非被破坏后进行修复和重铸 可以发现如果硬件/建筑不…

MyBatis从入门到进阶

目录 MyBatis入门1、创建项目、数据准备2、数据库配置3、编写持久层代码单元测试打印日志 基本操作查询数据插入数据删除数据更新数据 MyBatis - xml插入数据更新数据删除数据查询数据#{}与${}SQL注入排序like查询 MyBatis进阶if标签trim标签where标签set标签foreach标签sql标签…

TensorFlow 2.0 环境配置

官方文档:CUDA Installation Guide for Windows 官方文档有坑,windows的安装指南直接复制了linux的指南内容:忽略这些离谱的信息即可。 可以从官方文档知悉,cuda依赖特定版本的C编译器。但是我懒得为了一个编译器就下载整个visua…

浅谈:基于三维场景的视频融合方法

视频融合技术的出现可以追溯到 1996 年 , Paul Debevec等 提出了与视点相关的纹理混合方法 。 也就是说 , 现实的漫游效果不是从摄像机的角度来看 , 但其仍然存在很多困难 。基于三维场景的视频融合 , 因其直观等特效在视频监控等相关领域有着…

亚马逊评论爬虫+数据分析

爬取评论 做分析首先得有数据,数据是核心,而且要准确! 1、爬虫必要步骤,选好框架 2、开发所需数据 3、最后测试流程 这里我所选框架是seleniumrequest,很多人觉得selenium慢,确实不快,仅针对此…

RK3588 C++ 多线程运行

RK3588 C 多线程 实际运行解决OpenCV问题: 1. OpenCV 安装 sudo apt-get update sudo apt-get install libopencv-dev2. 检查 OpenCV 安装路径 find / -name OpenCVConfig.cmake3. 设置 OpenCV_DIR 环境变量 export OpenCV_DIR/usr/lib/aarch64-linux-gnu/cmake/op…

【已解决】Parameter index out of range (14 > number of parameters, which is 13).

解决思路: 字面意思就是sql传参数量对不上,但我检查几遍代码都感觉没问题,sql单独拿到mysql里运行也没问题。看了其他的报错:Error setting non null for parameter #2 with JdbcType null,看起来也是跟参数有关的&am…

MDBook 使用指南

MDBook 是一个灵感来自 Gitbook 的强大工具,专门用于创建电子书和文档。它能够将 Markdown 编写的内容编译成静态网站,非常适合项目文档、教程和书籍的发布。 个人实践过许多文档方案,如 hexo、hugo、WordPress、docsify 和 mdbook 等&#…

vue计算属性 初步使用案例

<template><div><h1>购物车</h1><div v-for"item in filteredItems" :key"item.id"><p>{{ item.name }} - {{ item.price }} 元</p><input type"number" v-model.number"item.quantity"…

C++编程技巧与规范-类和对象

类和对象 1. 静态对象的探讨与全局对象的构造顺序 静态对象的探讨 类中的静态成员变量(类类型静态成员) 类中静态变量的声明与定义&#xff08;类中声明类外定义&#xff09; #include<iostream> using namespace std;namespace _nmspl {class A{public:A():m_i(5){…

如何在 Ubuntu 上安装 RStudio IDE(R语言集成开发环境) ?

RStudio 是一个功能强大的 R 语言集成开发环境(IDE)&#xff0c;R 是一种主要用于统计计算和数据分析的编程语言。任何从事数据科学项目或任何其他涉及 R 的类似任务的人&#xff0c;RStudio 都可以使您的工作更轻松。 本指南将引导您完成在 Ubuntu 系统上安装 RStudio 的过程…

高中数学:概率-相关运算性质

文章目录 一、概率定义二、运算性质三、事件相互独立四、频率与概率五、练习 一、概率定义 二、运算性质 基本性质 互斥事件的性质 对立事件性质 包含事件的性质 有交集但不包含的事件性质 三、事件相互独立 注意&#xff1a; 四、频率与概率 五、练习

VM安装Ubuntu详细配置

1、第一步修改阿里源&#xff1a;打开软件 与更新&#xff0c;更改下载自为&#xff1a;http://mirrors.aliyun.co/ubuntu 2、安装open-vm-tools: 安装两个文件&#xff1a;sudo api install open-vm-tools open-vm-tools-desktop 3、安装搜狗输入法&#xff1a;点击下载 a、…

乒乓球筐(多组输入模板)

乒乓球筐 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNext()) {int[] hash new i…

AI 写作(五)核心技术之文本摘要:分类与应用(5/10)

一、文本摘要&#xff1a;AI 写作的关键技术 文本摘要在 AI 写作中扮演着至关重要的角色。在当今信息爆炸的时代&#xff0c;人们每天都被大量的文本信息所包围&#xff0c;如何快速有效地获取关键信息成为了一个迫切的需求。文本摘要技术正是为了解决这个问题而诞生的&#x…

TCP 三次握手意义及为什么是三次握手

✨✨✨励志成为超级技术宅 ✨✨✨ TCP的三次握手在笔试和面试中经常考察&#xff0c;非常重要&#xff0c;那么大家有没有思考过为什么是三次握手&#xff0c;俩次握手行不行呢&#xff1f;四次握手行不行呢&#xff1f;如果大家有疑问或者不是很理解&#xff0c;那么这篇博客…

初识算法 · 位运算(2)

目录 前言&#xff1a; 判定字符是否唯一 丢失的数字 比特位计数 只出现一次的数字III 前言&#xff1a; ​本文的主题是位运算&#xff0c;通过四道题目讲解&#xff0c;一道是判断字符是否唯一&#xff0c;一道是只出现一次的数字III&#xff0c;一道是比特位计数&…

Unity Assembly Definition Assembly Definition Reference

文章目录 1.Unity 预定义程序集2.Assembly definition3. Assembly definitions相关实验 1.Unity 预定义程序集 Unity 有4个预定义程序集&#xff1a; 阶段程序集名脚本文件1Assembly-CSharp-firstpassStandard Assets, Pro Standard Assets和Plugins文件夹下面的运行时脚本2A…

【征稿倒计时!华南理工大学主办 | IEEE出版 | EI检索稳定】2024智能机器人与自动控制国际学术会议 (IRAC 2024)

#华南理工大学主办&#xff01;#IEEE出版&#xff01;EI稳定检索&#xff01;#组委阵容强大&#xff01;IEEE Fellow、国家杰青等学术大咖领衔出席&#xff01;#会议设置“优秀论文”“优秀青年学者报告”“优秀海报”等评优奖项 2024智能机器人与自动控制国际学术会议 &#…

[CKS] Create/Read/Mount a Secret in K8S

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于读取、创建以及挂载secret的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[C…