数据链路层 I(组帧、差错控制)【★★★★★】

news2024/11/16 23:35:28

(★★)代表非常重要的知识点,(★)代表重要的知识点。

为了把主要精力放在点对点信道的数据链路层协议上,可以采用下图(a)所示的三层模型。在这种三层模型中,不管在哪一段链路上的通信(主机 - 路由器之间 or 路由器 - 路由器之间),我们都看成是结点和结点的通信(如下图中的结点 A 和 B ) ,而每个结点只有下三层一一网络层、数据链路层和物理层。

点对点信道的数据链路层在进行通信时的主要步骤如下:
① 结点 A 的数据链路层把网络层交下来的 IP 数据报添加首部和尾部封装成帧。
② 结点 A 把封装好的帧发送给结点 B 的数据链路层。
③ 若结点 B 的数据链路层收到的帧无差错,则从收到的帧中提取出 IP 数据报交给上面的网络层;否则丢弃这个帧。
数据链路层不必考虑物理层如何实现比特传输的细节(为终端结点隐蔽物理传输的细节是物理层的功能)。我们甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方,如上图(b)所示。

数据链路层协议有很多种,但有三个基本问题则是共同的,即封装成帧、透明传输和差错检测。

一、组帧

先来了解一些定义和概念:

  • 封装成帧(framing, 又称组帧):是指在一段数据的前后分别添加首部和尾部,构成帧(即数据链路层的数据传送单元)。
  • 帧长:等于数据部分的长度加上首部和尾部的长度。
  • 帧定界:首部和尾部中含有很多控制信息,它们的一个重要作用是确定帧的界限,即帧定界。
  • 帧同步:指接收方能从接收到的二进制比特流中区分出帧的起始与终止。
  • 透明传输:如果在数据中恰好出现与帧定界符相同的比特组合(会误认为“传输结束”而丢弃后面的数据),若下图所示,那么就要采取有效的措施解决这个问题,即透明传输。更确切地说,透明(看不见)传输就是不管所传数据是什么样的比特组合,都应当能在链路上传送。
  • 最大传送单元(Maximum Transfer Unit, MTU):为了提高帧的传输效率, 应当使帧的数据部分的长度尽可能地大于首部和尾部的长度,但每种数据链路层协议都规定了帧的数据部分的长度上限,即 MTU 。

注意:组帧时既要加首部,又要加尾部。原因是, 在网络中信息是以帧为最小单位进行传输的,所以接收端要正确地接收帧,必须要清楚该帧在一串比特流中从哪里开始到哪里结束(因为接收端收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。而分组(即IP 数据报)仅是包含在帧中的数据部分,所以不需要加尾部来定界。

数据链路层之所以要把比特组合成帧为单位传输,是为了在出错时只重发出错的帧,而不必重发全部数据,从而提高效率。组帧主要解决帧定界、帧同步、透明传输等问题。通常有以下 4 种方法实现组帧。

1. 字符计数法

如下图所示,字符计数法是指在帧首部使用一个计数字段来记录该帧所含的字节数(包括计数字段自身所占用的 1 个字节)。当接收方读出帧首部的字节计数值时,就知道后面跟随的字节数,从而可以确定帧结束的位置。因为帧与帧之间是连续传输的,所以也能确定下一帧的开始位置。

这种方法最大的问题在于若计数字段出错,即失去了帧边界划分的依据,那么接收方就无法判断所传输帧的结束位和下一帧的开始位,收发双方将失去同步,从而造成灾难性后果。

2. 字节填充(byte stuffing)法

字符填充法使用特定字符来定界一帧的开始与结束,在下图所示的例子中, 控制字符 SOH(Start Of Header)放在帧的最前面,表示帧的首部开始;控制字符 EOT(End Of Transmission)表示帧的结束。

为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,可在特殊字符前面填充一个转义字符 ESC 来加以区分(注意,转义字符是 ASCII 码中的控制字符,是一个字符,而非 “E" “S” “C” 三个字符的组合),以实现数据的透明传输。接收方收到转义字符后,就知道其后面紧跟的是数据信息,而不是控制信息。

在下图(a)所示的字符帧中,帧的数据段中出现 EOT 或 SOH 字符,发送方在每个 EOT 或 SOH字符前再插入一个 ESC 字符(下图(b)所示),接收方收到数据后会自己删除这个插入的 ESC 字符,结果仍得到原来的数据(下图(c)所示)。这也正是字符填充法名称的由来。如果转义字符 ESC 也出现在数据中,则解决方法仍是在转义字符前插入一个转义字符。

3. 零比特填充法

零比特填充法允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特串 01111110 来标志一帧的开始和结束,如下图所示。

为了不使信息位中出现的比特流 01111110 被误判为帧的首尾标志,发送方的数据链路层先扫描整个数据字段,每遇到 5 个连续的 “1” 时,将自动在其后插入 1 个 “0” 。接收方做该过程的逆操作,即每收到 5 个连续的 “1” 时,就自动删除后面紧跟的 “0” ,以恢复原始信息。

在数据链路层早期使用的 HDLC 协议中,便是采用这种比特填充的首尾标志法来实现透明传输的。零比特填充法很容易由硬件来实现,性能优于字符填充法。

4. 违规编码法

在物理层进行比特编码时,通常采用违规编码法。例如,曼彻斯特编码方法将数据比特 “1” 编码成“高 - 低“电平对,将数据比特 “0” 编码成“低 - 高”电平对,而“高 - 高“电平对和“低 - 低“电平对在数据比特中是违规的(即没有采用)。因此可以借用这些违规编码序列来定界帧的起始和终止。局域网 IEEE 802 标准就采用了这种方法。违规编码法不需要采用任何填充技术,便能实现数据的透明传输,但它只适用于采用冗余编码的特殊编码环境。

因为字符计数法中计数字段的脆弱性和字节填充法实现上的复杂性与不兼容性,目前较常用的组帧方法是零比特填充法和违规编码法。

5. 例题

【2013 统考真题】HDLC 协议对 01111100 01111110 组帧后,对应的比特串为( A )。
A. 01111100 00111110 10
B. 01111100 01111101 01111110
C. 01111100 01111101 0
D. 01111100 01111110 01111101

二、差错控制

由于信道噪声等各种原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制。通常,这些错误可分为位错和帧错。

  • 位错:帧中某些位出现了差错。通常采用循环冗余校验(CRC)方式发现位错。
  • 帧错:指帧丢失、帧重复或帧失序等错误,它们都属于传输差错。

过去 OSI 的观点是:必须让数据链路层向上提供可靠传输。因此在 CRC 检错的基础上,增加了帧编号、确认和重传机制。收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到对方的确认,就认为出现了差错,因而就进行重传,直到收到对方的确认为止。
这种方法在历史上曾经起到很好的作用。但现在的通信线路的质量已经大大提高了,由通信链路质量不好引起差错的概率已经大大降低。因此,现在互联网就采取了区别对待的方法:
① 对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务。如果在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务就由上层协议(例如,传输层的 TCP 协议)来完成。
② 对于通信质量较差的无线传输链路,数据链路层协议依然使用确认和重传机制,向上提供可靠传输的服务。
实践证明,这样做可以提高通信效率。

在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率(Bit Error Rate, BER)。误码率与信噪比有很大的关系,如果设法提高信噪比,就可以使误码率减小。实际的通信链路并非是理想的,它不可能使误码率下降到零。比特在传输过程中可能会产生差错:1 可能会变成 0,而 0 也可能变成 1 ,这就叫做比特差错。比特差错是传输差错中的一种。下面我们仅讨论比特差错。

为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。通常利用编码技术进行差错控制,主要有两类:
自动重传请求(Automatic Repeat Request, ARQ),当接收端检测到差错时,就设法通知发送端重发,直到接收到正确的数据为止;
前向纠错(Forward Error Correction, FEC),接收端不但能发现差错,而且能确定比特串的错误位置并加以纠正。
因此,差错控制又可分为检错编码和纠错编码。

1. 检错编码(Error Detection Codes)

检错编码是用于检测在数据传输或存储过程中是否发生了错误的编码方式。通过添加冗余信息,检错编码能够检测到数据在传送过程中所发生的错误,而无法修正这些错误。常见的检错编码有奇偶校验码(Parity Bit)和循环冗余码(Cyclic Redundancy Check, CRC)。

1)奇偶校验码

奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。它由 n - 1 位数据和 1 位校验位组成,校验位的取值(0 或 1)将使整个校验码中 “1” 的个数为奇数或偶数。

  • 奇校验码:在附加一个校验位后,码长为 n 的码字中 “1" 的个数为奇数;
  • 偶校验码:在附加一个校验位后,码长为 n 的码字中 “1" 的个数为偶数。

它只能检测奇数个比特的错误,但并不知道哪些位错了,也不能发现偶数个比特的错误。

例如,数据 1001101 对应的奇校验码为 1001101 1,奇校验码为 1001101 0。若该数据出现 1 位错误(即奇数个比特出错)变为 10 1 1101 ,那么可以检测出该数据有误;若该数据出现 2 位错误(即偶数个比特出错)变为 10 10 101 ,那么将检测不出该数据有误。

2)循环冗余码(CRC)

数据链路层广泛使用循环冗余码检错技术。循环冗余码(CRC)检错的基本思想为:

① 收发双方约定生成多项式 G(x)(最高位和最低位必须为 1)。k 位位串可视为阶数为 k - 1 的多项式的系数序列。例如,可用多项式 x3 + x2 + 1 表示位串 1101 。
② 发送方基于待发送的数据 M 和 G(x),计算出冗余码,将冗余码附加到数据后面一起发送。
③ 接收方收到数据和冗余码后,通过 G(x) 来计算收到的数据和冗余码是否产生差错。

假设一个待传送 m 位的数据 M ,CRC 运算产生一个 r 位的冗余码,称为帧检验序列(FCS)。这样形成的帧将由 m + r 位组成(在所要发送的数据后面增加 r 位冗余码,虽然增大了传输开销,但是可以进行差错检测,这种代价往往是值得的)。这个带检验码的帧刚好能被预先确定的多项式 G(x) 整除。接收方用相同的多项式去除收到的帧,若无余数,则认为无差错。

帧检验序列(Frame Check Sequence, FCS)是指为了进行检错而添加的冗余码。循环冗余检验 CRC 和帧检验序列 FCS 并不是同一个概念,CRC 是一种检错方法,而 FCS 是添加在数据后面的冗余码。CRC 冗余码的位数等于多项式 G(x) 的最高次数。

假设一串二进制数据 M 有 m 位,给定的多项式 G(x) 的阶(即最高次数)为 r,则计算冗余码的步骤如下:
① 加 0 :在 M 的低位端加上 r 个 0,相当于乘以 2r
② 模 2 除:利用模 2 除法,用 ① 中计算出的 2r × M 除以多项式 G(x) 对应的二进制数据串,得到的余数即为冗余码(共 r 位,若前面有 0,则不可省略)。
按照模 2 运算规则,加法不进位,减法不借位,相当于对应位进行逻辑异或操作。下面举一个例子:

设多项式 G(x) = x3 + x2 + 1(即 r = 3),待传送的二进制数据 M = 101001(即 m = 6),经模 2 除法运算后的结果是:商 Q = 110101、余数 R = 001 。所以发送出去的数据为 101001 001(即 2rM + FCS),共有 m + r 位。

在数据链路层,发送端帧检验序列 FCS 的生成和接收端的 CRC 检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。

若在传输过程中无差错,则经过 CRC 检验后得出的余数 R 肯定为 0 。但是,若出现误码,则余数 R 仍为 0 的概率极低。因此,在数据链路层若使用 CRC 差错检测技术,可以做到对帧的无差错接受,即:“凡是接收方数据链路层接受的帧均无差错”。

凡是接收方数据链路层接受的帧,我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错;而接收端丢弃的帧虽然曾收到了,但最终还是因为有差错而被丢弃,即未被接受。

注意:
I、循环冗余码(CRC)是具有纠错功能的,只是数据链路层仅使用了它的检错功能。为了方便协议的实现,检测到帧出错则直接丢弃。
II、目前我们没有要求数据链路层向网络层提供“可靠传输”的服务。所谓“可靠传输”就是:数据链路层的发送端发送什么,在接收端就收到什么。传输差错可分为位错(比特差错)和帧错(帧丢失、帧重复或帧失序)。可能接收方收到的每一个帧都没有发生比特差错,但却出现了帧丢失、帧重复或帧失序的传输差错情况。因此,我们应当明确:“无比特差错”与“无传输差错”并不是同样的概念。在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输。

2. 纠错编码(Error Correction Codes)

纠错编码不仅可以检测到错误,还能够在一定程度上自动修正错误。这类编码通过更复杂的冗余信息使接收方能够恢复原始数据,通常在信号噪声较大的环境中使用。最常见的纠错编码是海明码(Hamming Code)。

1)海明码

海明码的实现原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,而且能指出错位的位置,为自动纠错提供依据。

码距,又称海明距离,指两个码字中不相同的二进制的个数。对于一个编码系统,将其中所有的合法码字的最小距离值称为这个编码系统的码距。
例如,某编码系统有 3 个二进制码字,每个码字占 3 位,为 000 101 001。其中,码字 000 和码字 101 的码距为 2;码字 000 和码字 001 的码距为 1;码字 101 和码字 001 的码距为 1。因此,此编码系统的码距为 1 。
海明码 “纠错” d 位,需要码距为 2d + 1 的编码方案;“检错” d 位,需要码距为 d + 1 的编码方案。

现以数据码 1010 为例讲述海明码的编码原理和过程。

① 确定海明码的位数
设 n 为有效信息的位数(n = 4),k 为校验位的位数,则信息位 n 和校验位 k 应满足:n + k <= 2k - 1 。当 k = 3 时,海明码位数为 n + k = 7 <= 23 - 1 成立,此时的 n、k 有效。
设信息位为 D4D3D2D1(1010),共 4 位,检验位为 P3P2P1,共 3 位,对应的海明码为 H7H6H5H4H3H2H1

② 确定检验位的分布
规定校验位 Pi 在海明位号为 2i-1 的位置上,其余各位为信息位,因此有:
P1 的海明位号为 2i-1 = 20 = 1,即 H1 为 P1
P2 的海明位号为 2i-1 = 21 = 2,即 H2 为 P2
P3 的海明位号为 2i-1 = 22 = 4,即 H4 为 P3
将信息位按原来的顺序插入,则海明码各位的分布为:H7H6H5H4H3H2H1 = D4D3D2P3D1P2P1

③ 分组以形成校验关系
每个数据位用多个校验位进行校验,但要满足条件:被校验数据位的海明位号等于校验该数据位的各校验位海明位号之和。另外,校位不需要再被校验。分组形成的校验关系如下。

④ 校验位取值
校验位 Pi 的值为第 i 组(由该校验位校验的数据位)所有位求异或。根据 ③ 中的分组有:
P1 = D1 ⊕ D2 ⊕ D4 = 0 ⊕ 1 ⊕ 1 = 0
P2 = D1 ⊕ D3 ⊕ D4 = 0 ⊕ 0 ⊕ 1 = 1
P3 = D2 ⊕ D3 ⊕ D4 = 1 ⊕ 0 ⊕ 1 = 0
所以, 1010 对应的海明码为 101 0 0 10(被标记的为校验位,其他为信息位)。

⑤ 海明码的校验原理
每个校验组分别利用校验位和参与形成该校验位的信息位进行奇偶校验检查,构成 k 个校验方程:
S1 = P1 ⊕ D1 ⊕ D2 ⊕ D4
S2 = P2 ⊕ D1 ⊕ D3 ⊕ D4
S3 = P3 ⊕ D2 ⊕ D3 ⊕ D4
若 S3S2S1 的值为 “000" ,则说明无错;否则说明出错,且这个数就是错误位的位号,如S3S2S1 = 001 ,说明第 1 位出错,即 H1 出错,直接将该位取反就达到了纠错的目的。

3. 例题

① 要发送的数据是 1101 0110 11,采用 CRC 检验,生成多项式是 10011,那么最终发送的数据应该是( C )。
A. 1101 0110 1110 10
B. 1101 0110 1101 10
C. 1101 0110 1111 10
D. 1111 0011 0111 00

② 【2023 统考真题】若甲向乙发送数据时采用 CRC 检验,生成多项式为 G(x) = X4 + X + 1(即 G = 10011),则乙方接收到比特串( D )时,可以断定其在传输过程中未发生错误。
A. 10111 0000
B. 10111 0100
C. 10111 1000
D. 10111 1100

三、其他知识点(了解即可)

  1. 数据链路层使用的两种信道:
    点对点信道:使用一对一的点对点方式。PPP 协议则是目前使用最广泛的点对点协议。
    广播信道:使用一对多的广播通信方式。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送,采用共享广播信道的有线局域网普遍使用 CSMA/CD 协议,而无线局域网则使用 CSMA/CA 协议。

  2. 数据链路层所处的地位:
    下图中主机 H1 与主机 H2 都有完整的五层协议栈,而路由器在转发分组时仅使用协议栈的下三层。从图中可以看出数据从主机 H1 传送到主机 H2 需要在路径中的各结点的协议栈向上和向下流动多次。

当我们专门研究数据链路层的问题时,在许多情况下我们可以只关心在协议栈中水平方向的各数据链路层。于是,当主机 H1 向主机 H2 发送数据时,我们可以想象数据就是在数据链路层从左向右沿水平方向传送的,如下图所示。

从数据链路层来看,主机 H1 到主机 H2 的通信可以看成由四段不同的链路层通信组成,即: H1 --> R1, R1 --> R2, R2 --> R3 和 R3 --> H2 。这四段不同的链路层可能采用不同的数据链路层协议。

  1. 点对点信道的一些基本概念:
    链路(“物理链路”, link):指从一个结点到相邻结点的一段物理线路(有线或无线),且中间没有任何其他的交换结点。当进行数据通信时,两台计算机之间的通信路径往往要经过许多段这样的链路。可见链路只是一条路径的组成部分。
    数据链路(“逻辑链路”, data link):当在一条链路上传送数据时,除了需要链路本身外,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。【即逻辑链路是物理链路加上必要的通信协议。】
    :数据链路层对等实体之间进行逻辑通信的协议数据单元。数据链路层把网络层交下来的数据构成帧发送到链路上,并把接收到的帧中的数据取出并上交给网络层。

  2. 数据链路层通常可以为网络层提供如下三种服务:
    无确认的无连接服务:源主机发送数据帧时不需先建立链路连接,目的主机收到数据帧时不需发回确认。
    【数据传输的可靠性交由高层负责。适用于误码率较低的通信信道,如以太网。对于信道比较可靠且对实时性要求高的网络,数据链路层采用该服务比较合适。】
    有确认的无连接服务:源主机发送数据帧时不需先建立链路连接,但目的主机收到数据帧时必须发回确认。源主机在所规定的时间内未收到确定信号时,就重传丢失的帧,以提高传输的可靠性。
    【该服务适用于误码率较高的通信信道,如无线通信。】
    有确认的面向连接服务:帧传输过程分为三个阶段:建立链路、传输帧、释放链路。目的主机对收到的每一帧都要返回确认,源主机收到确认后才能发送下一帧,因而该服务的可靠性最高。
    【该服务适用于可靠性要求较高的场合。】

注意:有连接就一定要有确认,即不存在无确认的面向连接的服务。

  1. 链路管理:
    数据链路层连接的建立、维持和释放过程称为链路管理,它主要用于 面向连接 的服务。链路两端的结点要进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持连接,而在传输完毕后要释放该连接。

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

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

相关文章

09.直线图

9. 直线图 9.1 普通直线图 self.add_heading("直线图", level1)self.add_heading("普通直线图", level2)# 数据源data [10, 20]data2 [40, 60]data3 [80,90]self.add_quick_chart(data[[2018,2024],data, data2, data3],series[pool1使用情况(TiB),poo…

大数据学习-Spark基础入门

一、Spark是什么&#xff1f; Stack Overflow的数据可以看出&#xff0c;2015年开始Spark每月的问题提交数量已经超越Hadoop&#xff0c;而2018年Spark Python版本的API PySpark每月的问题提交数量也已超过Hadoop。2019年排名Spark第一&#xff0c;PySpark第二&#xff1b;而十…

【三维目标检测模型】ImVoxelNet

【版权声明】本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 参考书籍&#xff1a;《人工智能点云处理及深度学习算法》 ImVoxelNet是一种基于RGB图像的三维目标检测模型&#xff0c;发表在WACV 2022 《ImVoxelNet: Image to Vo…

记事本/软件商店/xbox打不开(不会丢失数据)(保姆级教程)

软件商店的安装 &#xff1a; 在某些情况下&#xff0c;系统更新可能导致本地账户和微软账户出现问题&#xff0c; 使得更新似乎只影响到了一个账户&#xff0c;而非我当前使用的账户。 这会导致我环境中的某些Windows自带应用&#xff0c;如微软商店、电影与电视、画图、记事…

鸿蒙开发入门day10-组件导航

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;还请三连支持一波哇ヾ(&#xff20;^∇^&#xff20;)ノ&#xff09; 目录 组件导航 (Navigation) 设置页面显示模式 设置标题栏模式 设置菜…

论文降重切勿“本末倒置”!一文教你如何有效降重

【SciencePub学术】本期热点 论文降重 原创性是评价论文质量的重要标准之一。许多读者在撰写论文都担心重复率过高的问题。 本篇文章旨在分享有效降低学术论文重复率的策略&#xff0c;从而促进学术诚信&#xff0c;提高研究工作的创新性和学术价值。通过一系列实用的写作技巧…

高可用集群keepalived 原理+实战

keepalived 1.高可用集群1.1简介1.2原理1.3 集群类型1.4实现高可用1.5VRRP&#xff1a;Virtual Router Redundancy Protocol1.5.1 VRRP 相关术语1.5.2VRRP 相关技术 2.实验2.1keepalived环境部署2.2抢占模式和非抢占模式2.2.1非抢占模式2.2.2抢占延迟模式 preempt_delay 2.3VIP…

MATLAB 手动实现投影密度法分割建筑物立面 (73)

专栏文章往期回顾,包含本文章 MATLAB 手动实现投影密度法分割建筑物立面 (73) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 从原始点云中,自动分割提取建筑物立面点云用于立面绘图,可以减少人为操作流程。这里从0开始,手动实现一种基于投影密度法的建筑物立…

Unity动画模块 之 3D模型导入基础设置Animation页签

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 基础设置就截图看看辣&#xff0c;只有实际应用中才会使用到&#xff0c;现在死记硬背也不可能记住 1.基础设置 笔记来…

STM32常用C语言知识总结

目录 一、引言 二、C 语言基础 1.数据类型 2.变量与常量 3.控制结构 4.数组与指针 5.字符串 6. extern变量声明 7.内存管理 三、STM32 中的 C 语言特性 1.位操作 2.寄存器操作 一、引言 STM32 作为一款广泛应用的微控制器&#xff0c;其开发离不开 C 语言的支持。C …

编写日志文件

精灵程序 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include…

vue3 响应式 API:ref() 和 reactive()

在 Vue 3 中&#xff0c;响应式系统是其核心特性之一&#xff0c;它使得数据的变化能够自动触发视图的更新。 官方文档&#xff1a; 响应式 API&#xff1a;核心 要更好地了解响应式 API&#xff0c;推荐阅读官方指南中的章节&#xff1a; 响应式基础 (with the API preference…

【STM32单片机_(HAL库)】3-2-1【中断EXTI】【电动车报警器项目】震动点灯

1.硬件 STM32单片机最小系统LED灯模块震动传感器模块 2.软件 exti驱动文件添加GPIO常用函数中断配置流程main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "exti.h"int main(void) {HAL_Init(); …

Linux常用命令 ---- rmdir 命令[删除一个空目录]

rmdir 命令 功能&#xff1a;删除一个空目录 我们使用 mkdir 命令创建一个名为 test 空文件夹&#xff0c;如下图所示。 现在使用 rmdir 命令将 test 文件夹进行删除&#xff0c;如下图所示。 注意&#xff1a;rmdir 命令只能删除一个空目录&#xff0c;如果这个目录中有其他文…

【云原生】Kubernetes中的名称空间和资源配额详细用法与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

医疗器械维修其实没有想的那么难

在很多人的印象中&#xff0c;医疗器械维修是一项极其复杂且神秘的工作&#xff0c;似乎只有专业的技术精英才能胜任。然而&#xff0c;事实并非如此&#xff0c;医疗器械维修其实并没有想象中那么难。 首先&#xff0c;现代医疗器械的设计越来越注重人性化和可维护性。制造商…

迎接开学新生活!高三开学必备物品推荐~

步入高三&#xff0c;意味着每一位学子都将面临人生中重要的转折点——高考。为了帮助高三学生们准备充分&#xff0c;让学习生活之路更加顺畅。今天小编综合了实用性、性价比以及学生需求的考量&#xff0c;精选了一系列必备物品&#xff0c;旨在为高三学生创造一个更为舒适、…

ICMP互联网控制报文协议

ICMP 互联网控制报文协议 ICMP &#xff08; Internet Control Message Protocol &#xff0c;也就是互联⽹控制报⽂协议&#xff09;。 ⽹络包在复杂的⽹络传输环境⾥&#xff0c;常常会遇到各种问题。 当遇到问题的时候&#xff0c;总不能死个不明不⽩&#xff0c;没头没脑…

4. kafka消息监控客户端工具

KafkaKing官网地址 : https://github.com/Bronya0/Kafka-King github下载地址 : Releases Bronya0/Kafka-King (github.com) (windows、macos、linux版本) 云盘下载地址 : https://pan.baidu.com/s/1dzxTPYBcNjCTSsLuHc1TZw?pwd276i (仅windows版本) 连接kafka 输入本地地址…

基于Java语言的私家车充电桩系统+私家车充电平台+充电桩系统项目

介绍 SpringBoot 框架&#xff0c;私家车充电桩平台充电桩系统充电平台充电桩云快充协议1.5-1.6协议新能源汽车二充电平台源码Java源码私家车充电系统 源码合作 提供无加密源代码和数据库&#xff0c;支持二次开发 SpringMVC架构完整充电桩系统源代码-充电桩系统-家充公充-新…