RTP 控制协议 (RTCP) 反馈用于拥塞控制

摘要

有效的 RTP 拥塞控制算法,需要比标准 RTP 控制协议(RTCP)发送方报告(SR)和接收方报告(RR)数据包提供的关于数据包丢失、定时和显式拥塞通知 (ECN) 标记的更细粒度的反馈。

本文档描述了 RTCP 反馈消息,旨在使用 RTP 对交互式实时流量启用拥塞控制。反馈消息设计用于基于发送方的拥塞控制算法,其中 RTP 流的接收方向发送方发送回 RTCP 反馈数据包,其中包含发送方执行拥塞控制所需的信息。

1.简介

对于交互式实时流量,例如视频会议流,典型的协议选择是在用户数据报协议 (UDP) 上运行的实时传输协议 (RTP) [RFC3550]。 RTP 不提供任何服务质量 (QoS)、可靠性或及时交付的保证,并期望底层传输协议能够这样做。仅 UDP 肯定无法满足这一期望。然而,RTP 控制协议 (RTCP) [RFC3550] 提供了一种机制,RTP 流的接收方可以通过该机制定期向该 RTP 流的发送方发送传输和媒体质量度量。发送方可以使用该信息来执行拥塞控制。

由于缺乏用于此目的的标准化消息,拥塞控制算法的设计者开发了专有的 RTCP 消息,这些消息仅传送各自设计所需的参数。直接的结果是,不同的拥塞控制设计不能互操作。为了实现算法演进以及跨设计的互操作性(例如,不同的速率自适应算法),非常需要具有通用的拥塞控制反馈格式。

为了帮助实现单播 RTP 拥塞控制的互操作性,本备忘录指定了一种通用的 RTCP 反馈数据包格式,可供网络辅助动态自适应 (NADA) [RFC8698]、多媒体自时钟速率自适应 (SCReAM) [RFC8298]、谷歌拥塞控制 [Google-GCC] 和共享瓶颈检测 [RFC8382],并且, 希望未来的 RTP 拥塞控制算法也能做到这一点。

2. 术语

关键词“必须”、“不得”、“必需”、“应”、“不应”、“应该”、“不应该”、“推荐”、“不推荐”、“可以”和“可选”当且仅当它们以全部大写形式出现时,本文档中的“应按照 BCP 14 [RFC2119] [RFC8174] 中的描述进行解释,如此处所示。

此外,[RFC3550]、[RFC4585] 和 [RFC5506] 中定义的术语也适用。

3. 用于拥塞控制的 RTCP 反馈

基于对 NADA [RFC8698]、SCReAM [RFC8298]、Google 拥塞控制 [Google-GCC] 和共享瓶颈检测 [RFC8382] 的分析,已确定以下每 RTP 数据包拥塞控制反馈信息是必要的:

RTP 序列号:RTP 流的接收方需要将收到的 RTP 数据包的序列号反馈给发送方,以便发送方可以确定哪些数据包已收到、哪些数据包丢失。许多拥塞控制算法将数据包丢失用作拥塞的指示。

数据包到达时间:RTP 流的接收方需要将每个 RTP 数据包的到达时间反馈给发送方。某些拥塞控制算法将数据包延迟和/或延迟变化(抖动)用作拥塞信号。

数据包显式拥塞通知(ECN)标记:如果使用ECN[RFC3168][RFC6679],则需要在接收到的RTP数据包中反馈2位ECN标记,指示对于每个RTP数据包是否被标记为not-ECT, ECT(0)、ECT(1) 或 ECN 拥塞经历 (ECN-CE)。 (“ECT”代表“支持ECN的传输”。)如果RTP流量使用的路径支持ECN,则发送方可以使用ECN-CE标记信息作为拥塞控制信号。

每个 RTP 流均由其同步源 (SSRC) 标识符。因此,RTCP 反馈格式需要按 SSRC 对其报告进行分组,为每个收到的 SSRC 发送一个报告块。

实际上,我们注意到主机操作系统 (OS) 进程中断可能会在不适当的时间发生。因此,需要记录发送方的 RTP 数据包发送时间以及接收方相应的 RTP 数据包到达时间刻意的照顾。这是因为主机操作系统的持续时间相对于单向延迟估计中所需的精度,中断可能很重要。具体地,需要在发送方发送RTP分组之前的最后机会记录发送时间,并且需要在最早的可用机会记录到达接收方的时间。

3.1. RTCP拥塞控制反馈报告

拥塞控制反馈可以作为定期调度的 RTCP 报告的一部分或在 RTP/AVPF 早期反馈数据包中发送。如果作为早期反馈发送,并且使用 RTP/AVPF 配置文件 [RFC4585] 或 RTP/SAVPF 配置文件 [RFC5124],则拥塞控制反馈可以在非复合 RTCP 数据包 [RFC5506] 中发送。

无论如何传输,拥塞控制反馈都会作为传输层反馈消息(RTCP 数据包类型 205)发送。该RTCP数据包的格式如图1所示:

图 1:RTCP 拥塞控制反馈数据包格式

前 8 个八位位组包括标准 RTCP 标头,其中 PT=205 和 FMT=11 指示这是拥塞控制反馈数据包,并且 SSRC 设置为 RTCP 数据包发送方的 SSRC。

[RFC4585] 的第 6.1 节要求 RTCP 标头后跟 正在报告的 RTP 流的 SSRC。因此,RTCP 标头后面跟着一个用于已从其接收到 RTP 数据包的每个 SSRC 的报告块,后面跟着一个报告时间戳。

每个报告块都以它正在报告的接收到的 RTP 流的 SSRC 开始。接下来,报告块包含每个 RTP 数据包的 16 位数据包度量块,该数据包的序列号在 begin_seq 到 begin_seq+num_reports 范围内(含)(使用算术模 65536 计算,以考虑可能的序列号环绕)。如果报告块中包含的 16 位数据包度量块的数量不是 2 的倍数,则必须在最后一个数据包度量块之后添加 16 位零填充,以使数据包度量块的末尾与下一个数据包度量块对齐。 32 位边界。 num_reports 的值可以为 0,表示该 SSRC 不包含任何数据包度量块。每个 报告块不得包含超过 16384 个数据包度量块(即,它不得在单个报告中报告超过四分之一的序列号空间)。

每个16位数据包度量块的内容包括R、ECN和ATO字段,如下所示:

已接收(R,1 位):一个布尔值,指示数据包是否已接收 已收到。 0 表示尚未接收到数据包,并且该 16 位数据包度量块中的后续 15 位(ECN 和 ATO)也设置为 0 并且必须被忽略。 1 表示已收到数据包,需要解析块中的后续位。

ECN(2 位):数据包的回显 ECN 标记。如果未收到或未使用 ECN,这些位将设置为 00。

到达时间偏移(ATO,13 位):RTP 数据包到达接收器的时间,作为该 RTCP 拥塞控制反馈报告的报告时间戳 (RTS) 字段所表示的时间之前的偏移。 ATO 字段以 1/1024 秒为单位(选择该单位是为了给出与 RTS 字段的精确偏移),因此,例如,ATO 值 512 表示 相应的 RTP 数据包在 RTS 字段表示的时刻之前恰好半秒到达。如果测量值大于 8189/1024 秒(该值将编码为 0x1FFD),则必须报告值 0x1FFE 以指示超出范围的测量。如果测量不可用或者 RTP 数据包的到达时间晚于 RTS 字段表示的时间,则必须为数据包报告 ATO 值 0x1FFF。

RTCP 拥塞控制反馈报告数据包以报告时间戳字段(RTS,32 位)结束。这表示该数据包报告的时刻,也是计算到达时间偏移值的时刻。 RTS 字段的值源自用于生成 RTCP 发送方报告 (SR) 数据包中的 NTP 时间戳字段的同一时钟。它被格式化为 NTP 格式时间戳的中间 32 位,如 [RFC3550] 第 4 节中所述。

RTCP 拥塞控制反馈数据包应包含每个活动 SSRC 的报告块。给定 SSRC 的连续报告中报告的序列号范围通常是连续的,但可以发送重叠的报告(并且需要在以下情况下发送)

其中 RTP 数据包重新排序发生在连续报告之间的边界上)。如果一个 RTP 数据包在一份报告中被报告为已接收,则该数据包也必须在随后发送的涵盖其序列号范围的任何重叠报告中报告为已接收。

如果发送覆盖重叠序列号范围的反馈报告,则后面的反馈报告中的信息可以针对包括在两个反馈报告中的RTP分组更新在之前的报告中发送的任何数据。

如果相对于 RTP 数据包的数量而言,RTCP 拥塞控制反馈数据包的发送频率较低,则它们可能会很大。如果 RTCP 拥塞控制反馈数据包太大而无法容纳在路径 MTU 内,则其发送方应将其拆分为多个反馈数据包。 RTCP 报告间隔的选择应使得反馈数据包发送得足够频繁,以至于它们足够小以适合路径 MTU。([RTCP-Multimedia-Feedback]讨论了如何选择报告间隔;RTP拥塞控制算法规范也可以提供指导。)

如果接收到特定 RTP 数据包的重复副本,则必须报告第一个到达副本的到达时间。如果复制数据包的任何副本都带有 ECN-CE 标记,则必须报告该数据包的 ECN-CE 标记;否则,报告第一个到达的副本的 ECN 标记。

如果在报告间隔内没有从 SSRC 接收到数据包,则可以发送报告块,其中 begin_seq 设置为先前从该 SSRC 接收到的最高序列号,并且 num_reports 设置为 0(或者可以简单地省略报告)。对应的发件人报告/接收器报告 (SR/RR) 数据包将具有非增加的扩展最高序列号接收字段,该字段将通知发送方尚未收到数据包,但可以简化处理以在拥塞控制反馈报告中也提供该信息。

指示某些 RTP 数据包丢失的报告块不应被解释为重传丢失数据包的请求。如果已协商重传有效负载格式,则此类报告的接收方可能会选择重传此类数据包,但不要求这样做。

4. 反馈频率和开销

在报告的速度和准确性以及报告的开销之间需要权衡。 [RTCP-多媒体反馈]讨论了这种权衡,提出了理想的 RTCP 反馈率,并提供了有关如何配置(例如,RTCP 带宽分数)以适当使用本备忘录中描述的报告块的指导。 RTP 拥塞控制算法规范也可以提供指导。

人们普遍认为,反馈越频繁,拥塞控制算法效果越好。然而,RTCP带宽和传输规则对RTCP反馈消息可以从RTP接收器发送到RTP发送器的频率设置了一些上限。

在许多情况下,在报告开销变得过多之前,每帧发送一次反馈是上限,尽管这取决于媒体速率,并且高速率媒体流可能需要更频繁的反馈[RTCP-多媒体反馈]。分析[反馈要求]还表明,一些候选拥塞控制算法可以使用 50-200 ms 的反馈间隔范围,以不太频繁的反馈进行操作。应用程序需要根据拥塞控制算法的选择、预期的媒体比特率和可接受的反馈开销,在会话建立时协商适当的拥塞控制反馈间隔。

5. 反馈包丢失的响应

与所有 RTCP 数据包一样,RTCP 拥塞控制反馈数据包可能会丢失。所有 RTP 拥塞控制算法必须指定它们如何响应反馈数据包的丢失。

RTCP 数据包不包含序列号,因此必须根据自上次反馈数据包以来的时间来推断反馈数据包的丢失。如果仅丢失一个拥塞控制反馈数据包,则适当的响应是假设拥塞水平与先前的报告大致保持相同。然而,如果多个连续的拥塞控制反馈数据包丢失,则媒体发送方应该快速降低其发送速率,因为这可能表明路径故障。 RTP断路器规范[RFC8083] 提供进一步的指导。

6.SDP信令

定义了一个新的“ack”反馈参数“ccfb”,与“a=rtcp-fb:”会话描述协议(SDP)扩展一起使用,以指示使用第 3 节中定义的 RTP 拥塞控制反馈数据包格式。该SDP参数扩展的ABNF定义[RFC5234]是:

rtcp-fb-ack-param = <参见 [RFC4585] 的第 4.2 节>

rtcp-fb-ack-param =/ccfb-parccfb-par = SP“ccfb”与“ccfb”反馈一起使用的有效负载类型必须是通配符类型(“*”)。这意味着拥塞控制反馈是针对会话中使用的所有有效负载类型发送的,包括任何前向纠错(FEC)和重传有效负载类型。生成的 SDP 属性的示例如下:

a=rtcp-fb:* ack ccfb

这些SDP反馈参数的提供/应答规则是 RTP/AVPF 配置文件 [RFC4585] 的第 4.2 节中指定。

SDP 提议可能表明支持本备忘录中指定的拥塞控制反馈机制以及提供基本相同语义的一个或多个替代拥塞控制反馈机制。在这种情况下,应答方应该包括其答案中仅提供一种拥塞控制反馈机制。如果收到包含同一组拥塞控制反馈机制的后续提议,则生成的答案应尽可能选择与原始答案中相同的拥塞控制反馈机制。

当SDP BUNDLE扩展[RFC8843]用于复用时,“a=rtcp-fb:”属性具有多路复用类别IDENTICAL-PER-PT[RFC8859]。

7. 与 RFC 6679 的关系

[RFC6679]中描述了显式拥塞通知(ECN)与 RTP 的使用,它指定了如何与 RTP 协商 ECN 的使用,并定义了 RTCP ECN 反馈数据包来携带 ECN 反馈报告。它使用 SDP“a=ecn-capable-rtp:”属性来协商 ECN 的使用,并使用“a=rtcp-fb:”属性和“nack”参数“ecn”来协商 RTCP ECN 的使用数据包。

当 ECN 与本备忘录中定义的 RTP 拥塞控制反馈数据包一起使用时,RTCP ECN 反馈数据包没有用处,因为它提供了重复的信息。当拥塞控制反馈与 RTP 和 ECN 一起使用时,生成的 SDP 提议必须包含用于协商 ECN 支持的“a=ecn-capable-rtp:”属性,以及与“ack”参数“ccfb”表示可以使用RTP拥塞控制反馈包。 “a=rtcp-fb:”属性还可以包括“nack”参数“ecn”以指示还支持 RTCP ECN 反馈数据包。如果SDP 为 RTP 拥塞控制反馈数据包和 RTCP ECN 反馈数据包提供信号支持,应答方应该在其 SDP 应答中信号支持一种格式,但不能同时支持两种格式,以避免发送重复的反馈。

当将 ECN 与 RTP 结合使用时,请遵循 [RFC6679] 第 7.2 节中的指南

必须遵循在 RTP 会话中启动 ECN 的使用。还必须遵循 [RFC6679] 第 7.3 节中关于在 RTP 会话中持续使用 ECN 的指南,但反馈是使用本备忘录中描述的 RTCP 拥塞控制反馈数据包而不是使用 RTP ECN 反馈数据包发送的。同样,[RFC6679]第 7.4 节中的指导相关 必须遵循检测故障的方法,但必要的信息是从 RTCP 拥塞控制反馈数据包而不是从 RTP ECN 反馈数据包中检索的。

8. 设计原理

RTCP SR/RR 数据包的主要功能是报告 RTP 数据包接收的统计数据。这些数据包中发送的接收报告块包含有关观察到的抖动、部分数据包丢失和累积数据包丢失的信息。该信息的目的是可用于支持拥塞控制算法,但经验表明它不足以实现该目的。

高效的拥塞控制算法需要比 SR/RR 数据包提供的有关每个数据包接收质量的更细粒度的信息才能有效做出反应。本备忘录中定义的反馈格式提供了如此细粒度的反馈。

其他几个 RTCP 扩展也提供比 SR/RR 数据包更详细的反馈:

TMMBR:RTP/AVPF 配置文件 [RFC5104] 的编解码器控制消息包括临时最大媒体流比特率请求 (TMMBR) 消息。这用于从 RTP 数据包接收方向发送方传达临时最大比特率限制。尽管 TMMBR 并非旨在取代拥塞控制,但它已被用作进行基于接收器的拥塞控制的一种方法,其中会话带宽足够高,可以发送频繁的 TMMBR 消息,特别是与非复合 RTCP 数据包一起使用时 [RFC5506] 。这种方法要求 RTP 数据包的接收方监视其接收情况,确定拥塞程度,并推荐适合路径上当前可用带宽的最大比特率;它还假设 RTP 发送方可以/将会尊重该比特率。这与本备忘录中建议的基于发送者的拥塞控制方法相反,因此 TMMBR 不能用于传达基于发送者的拥塞控制所需的信息。然而,TMMBR 可以被视为一种补充机制,可以告知发送方接收方当前对可接受的最大比特率的看法。

传达接收器对最大可用比特率的估计的机制提供了类似的反馈。

RTCP 扩展报告 (XR):定义了许多 RTCP XR 块来报告数据包丢失、到达时间 [RFC3611]、延迟 [RFC6843] 和 ECN 标记 [RFC6679] 的详细信息。可以将多个此类 XR 块组合成一个复合 RTCP 数据包,以报告有效的基于发送方的拥塞控制所需的详细丢失、到达时间和 ECN 标记信息。

然而,由于需要堆叠多个报告,结果在带宽和复杂性方面都有很高的开销。

传输范围的拥塞控制:本备忘录中定义的格式提供了每个 SSRC 的单独反馈。另一种方法是向每个 RTP 数据包添加标头扩展,其中包含单个传输范围的数据包序列号,然后让接收方发送 RTCP 报告,提供有关这些附加序列号的反馈 [RTP-Ext-for-CC]。由于报头扩展,这种方法将每个 RTP 数据包的大小增加了 8 个八位位组,但减少了 RTCP 反馈数据包的大小,并且如果它保持适用于所有数据包的单一速率限制,则可以简化发送方的速率计算。发送的 RTP 数据包,无论其类型如何 SSRC。同样,使用整个运输范围的反馈使其更加 很难根据在每个 SSRC 上观察到的接收和/或丢失模式来调整发送速率或响应丢失的数据包(例如,执行差分速率控制和 基于每个流丢失的数据包的知识来修复音频和视频流)。运输范围的反馈也不太适合更广泛的 RTP 框架,这使得 广泛使用每个 SSRC 序列号和反馈。

考虑到这些问题,我们认为设计一种新的 RTCP 反馈机制来为基于发送者的拥塞控制算法传递信息是适当的。新的拥塞控制反馈 第 3 节中描述的 RTCP 数据包提供了这样的机制。

9. IANA 考虑因素

IANA 在“RTPFB 有效负载类型的 FMT 值”表 [RFC4585] 中注册了一条新的 RTP/AVPF 传输层反馈消息,如第 3.1 节中所定义:

名称:CCFB

全名:RTP拥塞控制反馈

值:11

参考:RFC 8888

IANA 还注册了一项新的 SDP“rtcp-fb”属性“ack” SDP“ack”和“nack”属性值中的参数“ccfb”

注册表:

值名称:ccfb

长名称:拥塞控制反馈

可用于:ack

多路复用器:每个 PT 相同

参考:RFC 8888

10. 安全考虑

RTP 规范 [RFC3550]、适用的 RTP 配置文件(例如,[RFC3551]、[RFC3711] 或 [RFC4585])的安全考虑, 以及正在使用的 RTP 拥塞控制算法(例如,[RFC8698], [RFC8298]、[Google-GCC] 或 [RFC8382])适用。

故意生成不准确的 RTCP 拥塞控制反馈报告的接收方可能会欺骗发送方以高于路径可支持的速率进行发送,从而导致路径拥塞。这种情况将对该接收器的体验质量,可能会导致共享路径的其他流量拒绝服务以及媒体发送器的资源使用量过度增加。由于 RTP 是一种不可靠的传输,发送方可以故意丢弃数据包,在 RTP 序列号空间中留下间隙,而不会造成严重损害,以检查接收方是否正确报告丢失。 (这需要小心完成,并对所发送的媒体数据有一定的了解,以限制对用户体验的影响。)

可以修改 RTCP 拥塞控制反馈数据包的路径攻击者可以更改报告以欺骗发送方以过高或过低的速率发送,从而导致拒绝服务。安全 RTCP 配置文件 [RFC3711] 可用于验证 RTCP 数据包以防止此类攻击。

可以欺骗 RTCP 拥塞控制反馈数据包的偏离路径攻击者同样可以欺骗发送方以不正确的速率发送,从而导致拒绝服务。这种攻击很困难,因为攻击者还需要猜测 SSRC 和序列号到目的地传输地址。与路径攻击一样,安全 RTCP 配置文件 [RFC3711] 可用于验证 RTCP数据包以防止此类攻击。

关于转载

转载此文请注明出处,“引用于新睿云.弘电脑”,否则请回避。

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

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

相关文章

【安全类书籍-3】XSS跨站脚剖析与防御

目录 内容简介 作用 下载地址 内容简介 这本书涵盖以下几点: XSS攻击原理:解释XSS是如何利用Web应用未能有效过滤用户输入的缺陷,将恶意脚本注入到网页中,当其他用户访问时被执行,实现攻击者的目的,例如窃取用户会话凭证、实施钓鱼攻击等。 XSS分类:分为存储型XSS(…

【热门话题】前端框架发展史

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 前端开发的历史演变引言第一章&#xff1a;起源与基础建设 - HTML与CSS时代1.1 …

蓝桥杯刷题(九)

1.三国游戏 代码 #输入数据 nint(input()) Xlilist(map(int,input().split())) Ylilist(map(int,input().split())) Zlilist(map(int,input().split())) #分别计算X-Y-Z/Y-Z-X/Z-X-Y并排序 newXli sorted([Xli[i] - Yli[i] - Zli[i] for i in range(n)],reverseTrue) newYli …

C#控制台贪吃蛇

Console.Write("");// 第一次生成食物位置 // 随机生成一个食物的位置 // 食物生成完成后判断食物生成的位置与现在的蛇的身体或者障碍物有冲突 // 食物的位置与蛇的身体或者障碍物冲突了&#xff0c;那么一直重新生成食物&#xff0c;直到生成不冲突…

Android 系统的启动过程

Android 系统的启动流程&#xff1a; RomBoot&#xff08;只读存储器引导程序&#xff09;&#xff1a;这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化&#xff0c;确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要&#xff0c;因为它为整个启动过程奠定…

【JAVA】JAVA方法的学习和创造

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

软考高级:软件工程单元测试(驱动模块、被测模块、桩模块)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

手撕算法-最长公共子序列(二)

最长公共子序列(二) 分析&#xff1a;典型的动态规划&#xff0c;直接看代码了。 代码&#xff1a; import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** longest common sub…

【Python】新手入门学习:详细介绍接口分隔原则(ISP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍接口分隔原则&#xff08;ISP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、Py…

【SpringCloud微服务实战07】Sentinel 服务保护

Sentinel 是阿里巴巴开源的一款微服务流量控制组件。主要作用: 流量控制:避免因瞬间高并发流量而导致服务故障流。超时处理、线程隔离、降级熔断:避免因服务故障引起的雪崩问题。一、Sentinel 安装 1、安装Sentinel控制台,下载jar包并启动:Releases alibaba/Sentinel G…

Day38:安全开发-JavaEE应用SpringBoot框架MyBatis注入Thymeleaf模版注入

目录 SpringBoot-Web应用-路由响应 SpringBoot-数据库应用-Mybatis SpringBoot-模版引擎-Thymeleaf 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用等. 框架…

SpringMVC基础之工作流程

文章目录 SpringMVC 的工作流程1. 总图2. DispatcherServlet3. 必需的配置4. 加载配置文件的两个时机5. 定义控制器6. 创建 JSP 视图 SpringMVC 的工作流程 1. 总图 如上图&#xff0c;Spring MVC 程序的完整执行流程如下&#xff1a; 用户通过浏览器发送请求&#xff0c;请求…

upload-labs通关方式

pass-1 通过弹窗可推断此关卡的语言大概率为js&#xff0c;因此得出两种解决办法 方法一 浏览器禁用js 关闭后就逃出了js的验证就可以正常php文件 上传成功后打开图片链接根据你写的一句话木马执行它&#xff0c;我这里采用phpinfo&#xff08;&#xff09; 方法二 在控制台…

VLC抓取m3u8视频

前言 最近想看一些网络视频&#xff0c;但是很多时候网页上是m3u8推流的&#xff0c;如果在线看&#xff0c;速度又慢&#xff0c;所以就想下载下来&#xff0c;就想到了VLC的推流&#xff0c;转换能力&#xff0c;查阅资料&#xff0c;加上实践&#xff0c;总结心得。 设置中…

详解MySql索引

目录 一 、概念 二、使用场景 三、索引使用 四、索引存在问题 五、命中索引问题 六、索引执行原理 一 、概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解 二、使用场景 数据量较大&#xff0c;且…

【代码随想录】【回溯算法】补day24:组合问题以及组合的优化

回溯算法&#xff1a;递归函数里面嵌套着for循环 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 包含组合问题和组合问题的剪枝优化 class solution:def combine(se…

<.Net>VisaulStudio2022下用VB.net实现socket与汇川PLC进行通讯案例(Eazy521)

前言 此前&#xff0c;我写过一个VB.net环境下与西门子PLC通讯案例的博文&#xff1a; VisaulStudio2022下用VB.net实现socket与西门子PLC进行通讯案例&#xff08;优化版&#xff09; 最近项目上会用到汇川PLC比较多&#xff0c;正好有个项目有上位机通讯需求&#xff0c;于是…

Notepad++从文件夹查找文本内容

目录 一、背景二、Notepad搜索2.1 测试用例2.2 操作说明 一、背景 在日常的办公、学习或编程中&#xff0c;我们时长会遇到需要在大量文件中搜索特定文本内容的情况&#xff1a; 无论是快速定位某个项目中的代码片段&#xff1b;还是检索文档资料库中的相关信息等。 掌握如何…

2024最新PHP彩虹网盘与外链分享程序,支持所有格式文件的上传

彩虹外链网盘是一款基于PHP的在线存储和分享平台&#xff0c;它允许用户上传各种类型的文件&#xff0c;并提供了生成文件链接、图片链接、音乐和视频链接的功能。同时&#xff0c;它还会自动生成相应的UBB代码和HTML代码&#xff0c;支持文本、图片、音乐和视频的在线预览。这…

ArcGIS分享图层数据的最佳方法

在工作中&#xff0c;经常需要将图层数据分享给其他人。 如下图所示&#xff0c;需要分享的是【CJDCQ】和【GHDLTB】&#xff0c;图层带有符号系统&#xff1a; 一、分享gdb数据库及lyr文件 分享数据自然要找到源数据&#xff1a; 但是&#xff0c;gdb数据是不带符号系统的&a…