哈工大计算机网络课程数据链路层协议详解之:多路访问控制(MAC)协议

news2024/11/15 7:21:59

哈工大计算机网络课程数据链路层协议详解之:多路访问控制(MAC)协议

在上一小节介绍完数据链路层功能和所提供的服务后,接下来我们介绍一个在数据链路层非常重要的一个协议:多路访问控制MAC协议。

多路访问控制主要是为了解决一类链路的使用问题。作为网路中的链路,大致可以分为以下两类:

  • 点对点链路

    顾名思义,链路只连接两个相邻端点,没有第三个结点与该链路相连。在这种情况下,点对点通信就变得比较简单,比如拨号接入的PPP,或者以太网交换机与主机间的点对点链路。

  • 广播链路(共享介质)

    • 早期的总线以太网
    • HFC的上行链路
    • 802.11无线局域网

在这里插入图片描述

显然,在一个网络中,如果使用广播链路(共享介质)来进行通信时,就必须有一个机制来协调通信各方的通信数据,同时需要保证在传输时数据互不干扰。这个协议就是多路访问控制(MAC)协议。

多路访问控制协议所要解决的,就是采用单一共享广播信道进行通信的场景。在这种场景中,如果有两个或两个以上的结点同时利用共享信息传输数据时势必就会相互干扰。

这种干扰,在MAC协议里被称为冲突(collision)。 这种冲突,会导致接收端的结点同时接收到两个或者多个信号,导致接收失败!

In a word,在使用广播共享链路传输数据时,必须要使用特殊的协议来协调多方通信。而本节介绍的多路访问控制协议(multiple access control protocol)就是为了解决上述问题而提出的。

作为MAC协议在被设计时,有一些基本的考虑:

  • 期望采用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据。尽可能不需要一个集中的结点来协调通信各方的通信过程。
  • 在协调各方通信时,协议必须基于信道本身,通信信道共享协调信息。即无需带外信道用于协调。

理想MAC协议

给定:速率为R bps的广播信道。

假设我们设计的是一个非常理想的MAC协议的话,这个协议可能期望具有以下功能:

  • 当某一时刻信道只有一个结点在传输数据时,它可以以速率R发送(使用广播信道的全部带宽)。
  • 当有M个结点期望发送数据时,每个节点平均发送数据的平均速率为R/M。
  • 协议可以实现完全分散控制各方通信。
    • 无需特定节点协调。
    • 无需时钟、时隙同步。
  • 简单。协议越简单越好

当然,这是理想状况下MAC协议的设计概括,实际场景下是无法满足上述条件的。但是,在这种理想条件下有助于我们理解MAC协议期望解决的主要问题,或者实现的主要功能是哪些,对我们后续理解MAC协议具有一定指导意义。

MAC协议分类

从计算机网络的角度出发,典型的可以用于广播链路共享的协议分类,根据实现的技术手段包括以下三大类:

  • 信道划分(channel partitioning)MAC协议。

    • 使用多路复用技术。把信道资源划分成不同的资源片,分配给不同的结点使用,每个节点在通信过程中只占用其自己分配到的信道资源。这样,由于资源已经被事前划分了,就不会出现冲突问题。
    • 根据多路复用技术进一步划分,如TDMA、FDMA、CDMA、WDMA等技术来支持多个用户共享信道资源。
    • 这一类方案采用的是针对信道资源进行划分,从而使得通信各方只占用其分配到的资源片,来实现信道共享。
  • 随机访问(random access)MAC协议

    • 这一类协议在局域网中非常多见。
    • 信道不划分,允许冲突。任意结点需要通信时,都会使用该信道的全部带宽资源。因为是随机访问,即任意时间都可以有用户传输数据的需求,所以是允许冲突的。
    • 由于冲突会导致接收失败, 所以该类协议需要提供冲突“恢复”机制。即当发生冲突接收失败时,需要有机制能重新发送冲突数据,最终保证接收端接收数据的完整性。
  • 轮转(taking turns)MAC协议

    • 综合前面两类协议的优点
    • 通过采用某种机制,使得结点能够轮流使用信道,保证在使用信道时不发生冲突。每个节点在传输数据时,能够使用信道的全部带宽。

信道划分MAC协议

信道划分协议采用的解决方案是将信道资源按照某种技术手段进行划分,并分配给通信各方。各方在通信时,只使用分配的资源片,从而解决相互冲突的问题。

TDMA

下面以TDMA作为例子进行简单介绍。

TDMA:time division multiple access

TDMA时分多路复用技术实际上是将时间划分成一个个时隙,将每个时隙分配给不同的结点,从而使不同的结点只有在它所分配到的时隙时才能发送数据,而不能占用其他结点的时隙。

分配给所有结点的时隙循环一个周期就构成一个复用帧。如下图所示,一个复用帧内包含了所有结点在自己时隙里发送的数据。

在这里插入图片描述

在使用TDMA的信道划分协议中,分配给某个节点的时隙,如果它在这个时隙内不发送数据的话,这个资源也要为它保留(如上图空闲位置所示)。

FDMA

同样的,FDMA:frequency division multiple access 码分多路复用技术是针对频率来划分信道资源。

将信道频谱划分成若干频带(frequency bands),每个频带分配给不同用户去使用,每个用户将自己需要传输的数据信号调制到对应的频带上去,从而只在自己的频带上进行传输。

频分多路复用如下所示,可以看到,有的频带分配给用户后,可能在某一段时间内该用户不发送数据,此时这段频带资源仍然需要保留。

在这里插入图片描述

作为信道划分的MAC协议来说,如果当网络负载特别重的时候(假设所有结点都发数据),此时将信道资源分配给各用户后,所有被划分的资源都被利用,此时的信道利用率是最高的。

但是,从上面TDMA和FDMA的介绍也可以看到,如果网络负载比较低时,信道资源划分给各用户后,某一时间可能只有一个用户发送数据,此时信道资源利用率会非常低,因为它只能使用分配给自己的资源片,其余资源都必须空闲保留。

当然这种协议的好处也在于信道划分后,各用户的数据传输不冲突。

随机访问MAC协议

作为随机访问MAC协议,它的最大特点就是

  • 当结点有数据帧需要发送时,利用信道全部带宽来发送。
  • 动态性强,没有事先的结点间协调。任何一个时刻下任何一个结点都可以发送数据帧。

在随机访问MAC协议下,多个结点同时传输数据时,就可能会出现“冲突”问题。因此,随机访问MAC协议需要定义:

  1. 如何检测冲突。即需要有冲突检测机制。

    比如有的随机访问MAC协议是把数据帧发送出去后,等待对方的确认。如果在规定时间内收到了对方的确认,则认为没有冲突,否则认为有冲突。

  2. 当发生冲突后,如何从冲突中恢复(e.g. 通过延迟重传)

    由于发生冲突意味着数据发送/接收的失败,因此当发生冲突时,一定要有一个机制来消解冲突带来的数据发送失败的影响。

典型的随机访问MAC协议包括:

  • 时隙(sloted) ALOHA
  • ALOHA
  • CSMA、CSMA/CD、CSMA/CA

时隙(sloted) ALOHA

首先来看一下时隙(sloted) ALOHA协议。

时隙(sloted) ALOHA协议有这样几个假设:

  • 网络中所有结点发送的数据帧大小是相同的。

  • 时间被划分为等长的时隙。(每个时隙可以传输一个数据帧)

    每个时隙通常是这样划分的:一个时隙刚好能允许任何一个结点在这个时隙的开始发送数据帧,当时隙结束时数据帧刚好被发送出去。

  • 结点只能在时隙开始时刻发送数据帧。并在时隙结束时发完完成。

  • 结点间时钟同步。

    既然每个节点都只能在时隙开始时刻发送数据,显然节点之间一定是时钟同步的。

  • 如果2个或2个以上节点在同一时隙发送数据帧,结点即检测到冲突。

作为时隙ALOHA协议,它的运行理论来说相对比较简单,每个节点的运行会遵行以下准则:

  • 当结点有新的数据帧待发送时,会在下一个时隙开始时发送。
  • 如果发送数据帧时无冲突:该结点可以在下一个时隙继续发送新的数据帧
  • 如果发送数据帧时有冲突:该结点在下一个时隙以概率p重传该帧,直至发送成功。

下面我们通过一个示例来看一下时隙ALOHA协议运行过程:

在这里插入图片描述

假设网络中三个结点,都共享同一个广播链路来传输数据。作为时隙ALOHA协议,像我们上面介绍的,任何一个结点只能在时隙的开始时刻发送数据帧。

在上述示例图中用C来标识一个冲突,E来标识空闲,S来标识发送成功。

在第一个时隙下,三个结点同时发送数据帧,一定是会导致冲突的。所以在之后的时隙下,每个节点都有一定的概率去重发该失败帧。在第三个时隙下,结点1和结点2同时重传数据帧,又导致失败,需要继续重发。最终,结点2在第四个时隙时,只有它发送数据帧,无冲突产生,所以发送成功。以此类推,最终,结点1在第8个时隙时重传数据帧成功,而结点3在第9个时隙时重传数据帧成功。

通过上面的示例过程,总结一下时隙ALOHA协议的优缺点

优点

  • 单个结点活动时,可以连续以信道全部带宽速率传输数据。
  • 高度分散化:各结点只需同步时钟(时隙)。
  • 协议相对简单。

缺点

  • 容易造成冲突,进而导致失败数据帧的重传,造成时隙浪费。
  • 空闲时隙。
  • 实际上结点也许能以远小于分组传输时间检测到冲突。但时隙ALOHA机制并没有这样的机制。
  • 时钟同步。必须要求网络所有结点间时钟需要同步,不然无法确定一个时隙的开始和结束。

进一步的,我们分析一下时隙ALOHA协议在处理数据帧发送时的效率情况。首先给出效率指标的计算方式:

效率:长期运行时,成功发送帧的时隙所占比例。

比如对于时隙ALOHA协议来说,它的效率实际上就是计算在长期的一段时间内,成功发送数据帧的时隙占这段时间所有时隙的比例。

有了上面的定义,我们来分析具体的场景:

假设:N个结点有很多帧等待传输,每个节点在每个时隙均已概率p发送数据。

此时对于一个给定节点来说,在一个时隙将帧发送成功的概率 = p(1-p)N-1。上述公式的含义就是,在某一时刻只有一个结点以概率p发送数据帧,而其他结点都不发数据帧(1-p)概率,进而得到的联合概率。

扩展到任意个结点,即N个结点发送成功的概率为:

P = Np(1-p) N-1

对上式,求当N趋于无穷时的极限,可得:

最大效率= 1/3 = 0.37

即时隙ALOHA协议当结点无穷大时的最大效率=0.37,即最好情况下信道被成功利用的时间仅占37%。

显然,时隙ALOHA协议的效率不是很让人满意,当很多人都在使用时,最好情况下信道利用率仅有37%,剩下63%的情况会出现冲突造成浪费。

ALOHA

接下来再看一下ALOHA协议,也称纯ALOHA协议。 它跟时隙ALOHA协议最大的区别在于它不进行时隙的划分。

特点

  • 更加简单,无需同步

  • 当有新的帧生成时:立即发送

  • 冲突可能性增大

    在t0时刻发送帧,会与在[t0-1, t0+1]期间其他结点发送的帧冲突。

在这里插入图片描述

如上图所示,作为纯ALOHA协议来说,它的易损时间区是两个时隙,因为它可能跟前后两个时隙的发送都会产生冲突。对比来看,时隙ALOHA协议的易损时间区是一个时隙,因为它规定只能在时隙的开始时发送数据,所以冲突只会发送在一个时隙内。

因此,直观来看,纯ALOHA协议的效率一定比时隙ALOHA的效率还要低。

计算过程如下所示:

P(给定结点成功发送帧) = P(该结点发送)

​             =P(无其他结点在[t0-1, t0]期间发送帧)

​             =P(无其他结点在[t0, t0+1]期间发送帧)

​              = p*1-p)N-1 * (1-p)N-1

​              = p*(1-p)2(N-1)

​              … 选取最优的p,并令n -> ∞
             = 1/(2e)
              = 0.18

结论:纯ALOHA协议的效率比时隙ALOHA协议更差。

需要说明一点的是,虽然纯ALOHA协议的效率比较差,但在历史上它存在的重要意义在于:它几乎是最早提出的MAC协议。

CSMA协议

通过上面对ALOHA协议的介绍可以发现,上述两种ALOHA协议的效率都比较,采用的都是比较简单的方法,只要希望发送数据时,就会进行发送操作,而不管当前信道下是否已经有数据帧在传输。这种方式,不仅会导致其他结点消息的发送失败,实际上它自己的数据发送也不会成功,因此是一种比较“自私”的协议。

怎么样来改进上述协议的,本节介绍的CSMA协议就是在这方面做了很大改进。

CSMA:carrier sense multiple access载波监听多路访问协议。

CSMA协议最大的改进地方在于每一个结点发送数据帧之前,一定会先监听信道,实际上是通过监听信道中的载波信号来判断信道中是否有其他结点发送数据。 也就是说,如果发现信道中有数据正在发送的话,就不会发送数据。

如果发现信道中没有载波,也就是信道是空闲的,此时才会把完整的数据帧发送出去。

如果发现信道忙,也就是有载波,则会推迟发送数据帧,避免出现冲突。

根据信道忙时,推迟发送的策略不同,又可以将CSMA协议分为不同类型:

  • 1-坚持CSMA
    • 当发现信道忙,不能立即发送数据帧时,会以概率p=1一直监听这个信道。一旦信道空闲时,就立马发送数据帧。
  • 非坚持CSMA
    • 当发现信道忙之后,不坚持持续监听信道,而是随机等待一段时间后,再去探测信道是否空闲。
  • P-坚持CSMA
    • 当发现信道忙之后,以概率P坚持监听信道,以概率1-p随机等待一段时候后,再监听信道。

仍然需要注意的是,在CSMA协议中,冲突仍然是无法避免的。比如对于1-坚持CSMA来说,如果有两个结点同时监听信道,一旦信道空闲之后,同时往信道中发送数据帧,此时就会导致冲突。

另外,信号传播延迟的存在也会导致冲突。 比如如下示意图:

在这里插入图片描述

假设A、B、C、D是网络中物理空间有一定距离的几个结点,这几个结点都通过一段共享链路来进行通信。

假设t0时刻,B节点要发送数据,此时它会监听信道,发现信道空闲,就会开始发送整个数据帧。

由于数据在信道中的传输是需要时间的,同时结点D因为跟结点B在物理链路上有一段距离,导致其在t1时刻需要发送数据帧时,还无法检测到刚刚结点B发送的数据信号。此时,在t1时刻,它监听信道发现信道也空闲,就会发送数据帧,从而导致两个数据信号在信道中叠加。

在这里插入图片描述

从上图进一步的观察到,在整个数据帧传输完成之前,在某一时刻tn时,这种叠加信号实际上已经会被结点B或结点D感知到了,其实后续帧的发送就已经没有意义了。但作为普通的CSMA协议来说,只要某个结点确定要发送数据帧,则一定会将完整的帧全部发完。

因此,对于一般的CSMA协议来说,这种继续发送冲突帧的情况,会造成信道资源的浪费。

上述问题的解决思想实际上也非常简单,即如果结点在发送数据的同时能够检测到信道是否产生冲突,如果发送了冲突,能够及时终止后面数据帧的发送,就能够解决上述信道资源浪费的问题。

按照这样的思想设计的协议,就是CSMA/CD协议。

CSMA/CD协议

CSMA/CD:CSMA with Collision Detection,即带有冲突检测的CSMA协议。

这里需要注意一点的是,这里添加的CD冲突检测功能,并不是说只有CSMA/CD协议才有冲突检测功能。实际上,只要是随机访问MAC协议,都会有一种冲突检测机制,只不过这种冲突检测机制可能会不同。比如有的CSMA协议只能靠对方的确认才能知道是否发送了冲突。

这里CSMA/CD协议中的CD,强调的是该协议能够边发送数据时边检测冲突,或者说可以在非常短的时间内检测到冲突。

特点:

  • 短时间内可以检测到冲突

  • 冲突后传输中止,减少信道资源浪费。

    比如一个结点需要发送一个很长的完整数据帧,如果刚发送若干个比特,就检测出冲突,从而终止后续比特发送,相当于节省了一个完整数据帧的信号延迟传输造成的信道资源浪费,对整个信道资源利用率的提升非常有帮助。

比如在下图中,当结点检测到冲突后,即终止后续数据帧的发送。

在这里插入图片描述

冲突检测

  • 有限局域网易于实现:测量信号强度,比较发射信号与接收信号。

    比如以太网在广播链路介质共享的实现方案中,使用的MAC协议就是CSMA/CD协议。

  • 无线局域网很难实现:接收信号强度淹没在本地发射信号强度下。

    因为无线信号在空中的传播过程中,衰减比较快,距离越远,衰减后的信号频率越小。因此,作为无线信号的发射,需要借助天线使用较大功率发送出去。这样在本地,既要发送自己的信号,同时还要依赖信号强度判断有没有其他结点发送数据就比较困难。因为其他结点的信道经过无线传播到达本地时,可能已经衰减的比较小了,即已经被本地信号的频率淹没了。

作为CSMA/CD协议,它的边发送数据帧边检测冲突这样一个特性,对整个协议来说是非常重要的。因为作为这个特性,决定了使用CSMA/CD协议网络的很多特征。把这样的特性概括为一句比较简单的话,就是:“边发边听,不发不听“。

下面我们以一个示例来展示上述过程:

在这里插入图片描述

假设作为广播链路的网络使用的CSMA/CD协议,该网络中两个距离最远的结点对是AB,相距的距离为dmax。同时,广播链路带宽为R bps,网络数据帧传输的最小长度为:Lmin(bits),信号传播速度为V(m/s)。

有了上述的网络参数之后,考虑以下极端场景:

在某一时刻结点A需要发送数据,这个时候检测到信道是空闲的,就开始发送数据。当结点A发送的第一个bit即将到达结点B,但还没有到达结点B,这样一个极限状态。

此时,假设结点B也正好要发送数据,由于还没有信号到达结点B,所以结点B检测信道会发现信道是空闲的,从而立即开始发送数据。而当结点B刚发送完数据之后,就跟到达的结点A发送的信号叠加在一起,冲突就发生了。

当然,由于信号量叠加之后,结点B可以立即监听到冲突的发生,从而停止发送后续比特数据。但是,结点A要需要等待结点B发送的信号传输到结点A时,才能检测到信号量的叠加,从而感知到冲突。

显然,在这样一个极端场景下,结点A从发送数据开始,到检测到冲突发生,需要2个传输延迟的时间。

也就是说,按照CSMA/CD协议,如果要让结点A能够满足边发边听的特性,就意味着结点A发送的数据帧的传输延迟一定要满足这个条件:

L/R >= 2d max / V

该条件表示的含义是,结点发送数据帧的传输延迟,一定要大于等于整个链路最大传播延迟的两倍。不然的话,在检测到冲突之前,可能结点的数据帧已经发完了。而结束发送之后,就不会再检测冲突了(但实际是发送了冲突的)。发生了冲突却没检测出来,会导致协议的可靠性大打折扣。所以需要满足上述条件。

有了上述条件之后,把Lmin带入上述条件得到:

L min/R = 2d max / V

作为结点A到B,在上述示例里,仅考虑了信号传播速度,事实上在实际网络中,可能中间存在一些例如中继器等物理层设备,也会造成一定的延迟。此时,可以将上述改造成:

L min/R = RTT max

RTTmax表示距离最远的两个结点数据信号传输的往返时间。

上述结论对CSMA/CD协议的网络来说是非常重要的,假设网络中的带宽和信号传播速度是确定的,显然,Lmin和dmax成正比关系。因此,要想网路能够按照CSMA/CD协议检测到更远距离的冲突,可靠性更高的话,这个最小数据帧长度就要增加,反之就要缩小。

同时,按照上述的结论,如果一个网络的最小数据帧长度确定了,这个时候网络的带宽,比如从十兆到百兆,百兆到千兆,那么一个CSMA/CD冲突可检测范围也会变小(R增大,d变小)。

最后再来介绍一下CSMA/CD协议的效率

Tprop = LAN中2个结点间的最大传播延迟

ttrans = 最长帧传输延迟
效率 = 1 1 + 5 t p r o p / t t r a n s 效率=\frac{1}{1+5t_{prop}/t_{trans}} 效率=1+5tprop/ttrans1

这个效率可以简单理解为,当tprop趋近于0或者ttrans趋近于∞时,效率趋近于1。

从效率可以看出,CSMA/CD协议要远优于ALOHA协议,并且简单,分散。

轮转访问MAC协议

回顾一下之前小节中介绍的信道划分MAC协议的特点:

  • 网络负载重时,共享信道效率高,且公平
  • 网络负载轻时,共享信道效率低。

随机访问MAC协议特点:

  • 网络负载轻时,共享信道效率高,单个结点可以利用信道的全部带宽。
  • 网络负载重时,产生冲突开销。

因此轮转访问MAC协议综合了上述两类MAC协议各自的优点。首先希望保证在共享介质的传输中不会产生冲突问题,其次每个结点在传输数据时,能够利用信道的全部带宽。

典型的轮转访问MAC协议包括:

轮询(polling)

在网络中存在一个主结点,由主结点负责轮流“邀请”从属结点发送数据。换句话说,每个从结点只有在被“邀请”时才能发送数据,其他时候不能发送数据。在这种场景下,每个结点发送数据的时候都可以利用链路的全部带宽。

典型应用:

  • “哑(dumb)”从属设备

    比如现在的传感器网络,假如传感器是一个非智能的传感器,那么主结点(比如基站)就可以利用这种轮询的方式去到不同的传感器上发送指令,告知其可以发送数据。

在这里插入图片描述

比如在上面的网络中,信道是共享的,共享使用的方式是有一个主结点向从结点发送轮询的指令,被轮询的主机只有在收到指令之后才可以发送数据,以此类推。

轮询方式存在的问题:

  • 轮询开销。

    任何一个结点都需要收到轮询的指令后才可以发送数据。而这个轮询指令的发送实际上也是要占用信道带宽的。

  • 等待延迟

    需要等待轮询指令的到来。

  • 单点故障

    整个网络是靠主结点轮询来工作的,一旦主结点宕机,这个网络就瘫痪了。

令牌传递(token passing)

另一个比较典型的轮转访问MAC协议,叫做令牌传递(token passing)

该协议的工作原理是:

  • 网络中存在有且只有一个令牌token。令牌代表了共享介质的使用权。
  • 控制令牌依次从一个结点传递到另一个结点。
  • 令牌:特殊帧。
  • 当一个结点获取到令牌之后,才可以发送数据。
  • 因为网络中只有一个令牌,所以一个时刻下只会有一个结点发送数据,所以不会发送冲突。

由于令牌传播的特性,使得很多令牌网络会构成一个环形的特性,使得令牌沿着环形网络的某个方向进行传递。

在这里插入图片描述

令牌传递的问题:

  • 令牌开销。

    令牌在网络中的传递,也有带宽开销的问题。

  • 等待延迟。

    结点需要等待令牌的到来才能发送数据。

  • 单点故障。

    如果由于网络故障,导致拥有令牌的结点没有成功把令牌归还到网络中去,那么网络中可能就没有令牌了,任何结点都没有信道的使用权来发送数据了。

    当然,在实际网络中这种问题也会被考虑的,一般会有一个主结点来检测令牌是否丢失,如果丢失了则会产生一个新的令牌放在网络上。

MAC协议总结

最后,我们对上述介绍的MAC协议做个总结。

  • 信道划分MAC协议:将信道的物理特性,比如时间、频带、码片进行划分。于是就有了TDMA、FDMA、CDMA。

    该协议的特点是,当信道负载比较高时,利用率比较高。但负载比较低时,利用率时比较低的。

  • 随机访问MAC协议:

    它的特点是当网络中有数据帧要发送时即发送,同时提供检测冲突机制。根据检测冲突机制的不同方式,可以划分成:ALOHA、时隙ALOHA、CSMA、CSMA/CD

    CSMA/CD应用于以太网

    CSMA/CA应用于802.11无线局域网

  • 轮转访问MAC协议

    主结点轮询、令牌传递

    应用场景:蓝牙、FDDI、令牌环网

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

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

相关文章

简易登录页面实现

导言 本文将介绍一个简单的登录页面的实现&#xff0c;使用HTML、CSS和JavaScript完成。该登录页面具有选项卡切换和表单提交功能。 HTML基础知识 首先&#xff0c;我们来了解一下HTML文档的基本结构&#xff1a; <!DOCTYPE html> <html> <head><titl…

python创建多个logging日志文件

为每一个计算过程创建一个单独的日志文件&#xff0c;并写入对应的结果&#xff0c;同时保留控制台输出的功能&#xff0c;控制台输出与日志文件记录可以分开单独控制。 import os import loggingdef creat_logger(log_path,logging_name,suf_name):if not os.path.exists(log…

NC65 输出打印模板设置流程

NC65 输出打印模板设置流程 一、添加打印模板 1、可以在单据模板初始化设置中生成打印模板&#xff08;这里以结算单为例&#xff09; 输入模板编码和名称&#xff0c;然后按确定即可。 此时&#xff0c;去输出模板初始化节点查看&#xff0c;就可以查看到刚才生成的打印模…

第五章 中央处理器 第六节指令流水线

5.6.1 指令流水线的概念 5.6.2 指令流水线的影响因素和分类

MySQL基础(五)视图、存储过程和存储函数、变量

目录 常见的数据库对象 ​编辑 视图 创建视图 改变视图 优缺点 存储过程与存储函数 创建存储过程 创建存储函数 存储过程和存储函数的区别 存储过程和函数的查看、修改、删除 查看 修改 删除 存储过程的优缺点 优点 缺点 变量 系统变量 查看系统变量 修改…

h5页面如何与原生交互

本文讲述h5页面跟原生通信&#xff0c;比如在app内&#xff0c;调用相机&#xff0c;获取相册内的图片&#xff0c;在app内拉起微信小程序等等&#xff0c;h5页面没有这么多权限能够直接调用移动端的原生能力&#xff0c;这个时候就需要与原生进行通讯&#xff0c;传递一个信号…

链表、列表、列表项

链表、列表、列表项 FreeRTOS 列表与列表项 List_t //List_t 列表typedef struct xLIST{listFIRST_LIST_INTEGRITY_CHECK_VALUE //校验值volatile UBaseType_t uxNumberOfItems; // 列表中的列表项数量:用于记录列表中列表项的个数&#xff08;不包含 xListEnd&#xff0…

AcWing 1497:树的遍历

【题目来源】https://pintia.cn/problem-sets/994805342720868352/exam/problems/994805485033603072https://www.acwing.com/problem/content/description/1499/【题目描述】 一个二叉树&#xff0c;树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历&#xff0c;…

Verilog 基础知识(一) Verilog 基础语法与注意事项

基础知识 0.1 模块(Module) Verilog中的module可以看成一个具有输入输出端口的黑盒子&#xff0c;该黑盒子有输入和输出接口(信号)&#xff0c;通过把输入在盒子中执行某些操作来实现某项功能。(类似于C语言中的函数) 图1 模块示意图 0.1.1 模块描述 图1 所示的顶层模块(top…

1.Git使用技巧-常用命令2

1.Git使用技巧-常用命令2 文章目录 1.Git使用技巧-常用命令2一、本地仓库整理二、查看本地仓库查看过滤 二、逆向操作1. 检出覆盖本地文件 workspace -> NULL1.1 删除workspace 文件 2. 本地仓库回滚3. 远程仓库1. 远程仓库未基于代码做修改 逆操作总结 三、删除1. 删除远程…

基于 Jieba 和 Word2vec 的关键词词库构建

最近有空&#xff0c;把论文中用到的技术和大家分享一下&#xff08;以组件化的形式&#xff09;&#xff0c;本篇将讲述如何从大量的语料中获取诸多关键词和构建关键词词库或 xx 关键词词库&#xff08;细分领域&#xff09;。举例以购物网站的在线评论作为语料库&#xff0c;…

Python实现PSO粒子群优化算法优化Catboost回归模型(CatBoostRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法&#xff08;Particle Swarm Optimization&#xff09;的英文缩写&#xff0c;是一…

Git--多人协作开发

文章目录 前言一、多人协作一开发目标将dev分支内容合并至master分支 二、多人协作二开发者1操作开发者2操作突发情况内容合并至master分支 三、解决git branch -a打印已被删除的远程分支的方法总结 前言 目前,我们所完成的工作如下 : 基本完成Git的所有本地库的相关操作,git…

学无止境·MySQL(4-2)(多表查询加强版)

多表练习试题 试题2&#xff08;加强版&#xff09;1、创建表2、表中添加数据3、找出销售部门中年纪最大的员工的姓名4、求财务部门最低工资的员工姓名5、列出每个部门收入总和高于9000的部门名称6、求工资在7500到8500元之间&#xff0c;年龄最大的人的姓名及部门7、找出销售部…

【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )

文章目录 一、访问私有成员1、对象无法访问私有变量2、对象无法访问私有方法3、类内部访问私有成员 一、访问私有成员 1、对象无法访问私有变量 在下面的 Python 类 Student 中 , 定义了私有的成员变量 , # 定义私有成员__address None该私有成员变量 , 只能在类内部进行访问 …

分析图中常见的这种“箭头”,如何用GIS绘制?

小伙伴们, 在各种分析图、空间结构图中, 是不是经常看到这种“扇形”的箭头, 同时伴随着一些“引绿入城”等分析语言。 于是,你有没有好奇, 这种箭头是怎么做出来的? 强大的GIS是否可以绘制出这种箭头? 还是那句话—— 别问,问就是能! 其实ArcMap 和 ArcGIS P…

【大数据实战电商推荐系统】概述版

文章目录 第1章 项目体系框架设计&#xff08;说明书&#xff09;第2章 工具环境搭建&#xff08;说明书&#xff09;第3章 项目创建并初始化业务数据3.1 IDEA创建Maven项目&#xff08;略&#xff09;3.2 数据加载准备&#xff08;说明书&#xff09;3.3 数据初始化到MongoDB …

41. 同时在线人数问题

文章目录 题目需求思路一实现一学习链接题目来源 题目需求 现有各直播间的用户访问记录表&#xff08;live_events&#xff09;如下。 表中每行数据表达的信息为&#xff1a;一个用户何时进入了一个直播间&#xff0c;又在何时离开了该直播间。 现要求统计各直播间最大同时在…

Stable Diffusion系列课程上:安装、提示词入门、常用模型(checkpoint、embedding、LORA)、放大算法、局部重绘、常用插件

文章目录 一、Stable Diffusion简介与安装二、文生图&#xff08;提示词解析&#xff09;2.1 提示词入门2.2 权重2.3 负面提示词&#xff08; Negative prompt&#xff09;2.4 出图参数设置2.5 新手念咒方法 三、图生图3.1 图生图入门3.2 随机种子解析3.3 图生图拓展 四、模型4…

MySQL基础篇第3章(运算符)

文章目录 1、算术运算符1.1 加法与减法运算符1.2 乘法与除法运算符1.3 求模&#xff08;求余&#xff09;运算符 2、比较运算符2.1 等号运算符2.2 安全等于<>2.3 不等于运算符2.4 空运算符2.5 非空运算符2.6 最小值运算符2.7 最大值运算符2.8 BETWEEN AND运算符2.9 IN运算…