2022-12-18 网工进阶(三十八)MPLS LDP---LDP基础、工作原理(会话、标签的发布和管理、特性)、配置举例

news2024/12/22 20:40:45

LDP概述

LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。

LDP的工作过程主要分为两部分:LSR之间建立LDP会话;LSR之间基于LDP会话动态交换标签与FEC的映射信息,并根据标签信息建立LSP
 

LSR之间交互标签绑定消息之前必须建立LDP会话。LDP会话可以分为:
本地LDP会话(Local LDP Session):建立会话的两个LSR之间是直连的
远程LDP会话(Remote LDP Session):建立会话的两个LSR之间可以是直连的也可以是非直连的

 两台LSR之间交互Hello消息之后,即建立起邻接体(Adjacency)关系;

在建立邻接体关系的基础上,两台LSR之间交互LDP会话消息,建立起LDP会话,两台设备之间形成LDP对等体关系;
 

每一台运行了LDP的LSR除了必须配置LSR ID,还必须拥有LDP ID。
LDP ID的长度为48bit,由32bit的LSR ID与16bit的标签空间标识符(Label Space ID)构成。
LDP ID以“LSR ID : 标签空间标识”的形式呈现。例如2.2.2.2:0

标签空间标识一般存在两种形态:
为0:表示基于设备(或基于平台)的标签空间;
非0:表示基于接口的标签空间。
 

相关命令

全局下开启LDP并且进入ldp视图

[R1]mpls ldp

接口下开启LDP

[R1-GigabitEthernet0/0/0]mpls ldp 

配置LDP远端会话并进入会话配置视图

[R1]mpls ldp remote-peer R1toR3

配置LDP远端对等体IP地址

[R1-mpls-ldp-remote-r1tor3]remote-ip 3.3.3.3

LDP消息

运行LDP协议的LSR之间通过交换LDP消息来实现邻居发现、会话建立与维护以及标签管理等功能。

按照消息的功能,LDP消息一共可以分为四大类型:发现消息(Discovery Message),会话消息(Session Message),通告消息(Advertisement Message)和通知消息(Notification Message)。

发现消息:用来宣告和维护网络中一个LSR的存在;用于通告和维护网络中LSR的存在,如Hello报文。
会话消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization报文、KeepAlive报文。
通告消息:用来生成、改变和删除FEC的标签映射
通知消息:用来宣告告警和错误信息

LDP消息承载在UDP或TCP之上,端口号均为646 。其中发现消息用来发现邻居,承载在UDP报文上。其他消息的传递要求可靠而有序,所以LDP使用TCP建立会话,会话、通告和通知消息都基于TCP传递。

消息类型

消息名称

传输层协议

作用

Discovery(发现) Message

Hello

UDP

LDP发现机制中宣告本LSR并发现邻居

Session(会话) Message

Initialization

TCP

在LDP Session建立过程中协商参数

KeepAlive

监控LDP Session的TCP连接的完整性

Advertisement(通告)

Message

Address

宣告接口地址

Address Withdraw

撤消接口地址

Label Mapping

宣告FEC/Label映射信息

Label Request

请求FEC的标签映射

Label Abort Request

终止未完成的Label Request Message

Label Withdraw

撤消FEC/Label映射

Label Release

释放标签

Notification(通知) Message

Notification

通知LDP Peer错误信息

LDP报文

LDP协议报文包括了LDP头部LDP消息两部分。

LDP头部中携带了LDP版本、报文长度等信息

LDP头部长度为10Byte,包括Version,PDU Length和LDP Identifier三部分。

Version:占用2Byte,表示LDP版本号,当前版本号为1。

PDU Length:占用2Byte,以字节为单位表示除了Version和PDU Length以外的其他部分的总长度。

LDP Identifier:即LDP ID,长度6Byte,其中前4Byte用来唯一标识一个LSR,后2Byte用来表示LSR的标签空间。

LDP消息中携带了消息类型、消息长度等信息

LDP消息包含五个部分。

U:占用1个bit,为Unknown Message bit。当LSR收到一个无法识别的消息时,该消息的U=0时,LSR会返回给该消息的生成者一个通告,当U=1时,忽略该无法识别的消息,不发送通告给生成者。

Type:表示具体的消息类型,目前LDP定义的常用的消息有Notification,Hello,Initialization,KeepAlive,Address,Address Withdraw,Label Mapping,Label Request,Label Abort Request,Label Withdraw,Label Release。

Message Length:占用2个bytes,以字节为单位表示Message ID、Mandatory Parameters和Optional Parameters的总长度。

Message ID:占用32个bit,用来标识一个消息。 

Mandatory ParametersOptional Parameters分别为可变长的该消息的必须的参数可选的参数。 

抓包观察---LDP报文

1 LDP版本为1

2 报文总长度,除了Version和PDU Length字段以外为40字节

3 LSR ID为1.1.1.1

4 标签空间为0,表示为平台内部标签

5 Initialization消息,用于在LDP Session建立过程中协商参数

6 KeepAlive消息,用于监控LDP Session的TCP连接的完整性

7 U位0,表示向源端发送通知(Notification)消息

8 消息类型为Initialization

9 消息长度为22字节

10 消息编号为0x000004f9

11 强制参数

12 协议版本号为1

13 TCP连接的保持时间为45(只要收到LDP就会刷新)

14 标签分发方式为DU

15 环路检测功能未开启

16 LDP的最大跳数为0(只有开启环路检测时才有效)

17 LDP PDU的最大长度为4096字节

18 接收者的LSR ID为2.2.2.2

19 接收者的空间标识符为0

LDP工作原理

LDP会话状态机

LDP使用5种状态描述LDP会话状态机。

LDP会话建立

发现阶段

设备通过周期性地发送LDP链路Hello报文(LDP Link Hello),实现LDP基本发现机制。 

LDP链路Hello报文使用UDP报文,目的地址是组播地址224.0.0.2。如果LSR在特定接口接收到LDP链路Hello报文,表明该接口存在LDP邻接体。

TCP连接建立阶段

Hello报文中携带传输地址,双方后续将使用传输地址建立LDP会话。

传输地址较大的一方作为主动方,主动发起建立TCP连接。(缺省情况下,公网的LDP传输地址等于设备的LSR ID私网的传输地址等于接口的主IP地址

经过TCP三次握手之后,两者建立起TCP连接。

会话建立与保持

1 TCP连接建立成功后,主动方R2(传输地址大的一方)发送LDP初始化报文,协商建立LDP会话的相关参数。

2 LDP会话的相关参数包括LDP协议版本、标签分发方式、KeepAlive保持定时器的值、最大PDU长度和标签空间等。

3 被动方R1收到初始化报文后,若接受R2的相关参数,则回应KeepAlive报文作为确认,为了提高发送效率同时发送自己的初始化报文。

4 R2收到R1的初始化报文后,若接受相关参数,则回复KeepAlive报文给R1。

5 双方都收到对端的KeepAlive报文后,会话建立成功。后续通过周期性发送的KeepAlive报文保持会话。
 

相关报文

查看LDP对等体的信息

<R1>display mpls ldp peer

项目

描述

PeerID

对等体的LDP标识符,格式为<LSR ID>:<标签空间>,标签空间的取值为:

  • 0:表示全局标签空间。

  • 非0:表示接口标签空间。

TransportAddress

LDP对等体的传输地址,用于建立TCP连接。

DiscoverySource

发现LDP对等体的源端:
  • 本地LDP对等体的发现源为接口。

  • 远端LDP对等体的发现源为配置的远端对等体的名称。

查看LDP对等体间的会话信息

<R1>display mpls ldp session 
项目描述

PeerID

对等体的LDP标识符,格式为<LSR ID>:<标签空间>。标签空间取值:
  • “0”表示全局标签空间。

  • “1”表示接口标签空间。

Status

LDP会话的状态:

  • NonExistent:表示LDP会话的最初状态。在此状态双方互相发送Hello消息,在收到TCP连接建立成功事件的触发后变为Initialized状态。
  • Initialized:表示LDP会话处于初始化状态。
  • Open Sent:表示LDP会话进入初始化状态后,主动方给被动方发送了Initialized消息,并等待对方的回应。
  • Open Recv:表示LDP会话进入初始化状态后,当双方都收到了对方发送的Keepalive消息后,LDP会话进入Operational状态。
  • Operational:表示LDP会话建立成功。

LAM

LDP会话的标签发布方式,缺省的标签分发方式为DU。

SsnRole

LSR在LDP会话中的角色:

  • Active:LSR ID值较大的一方表示建立LDP会话的主动方。

  • Passive:LSR ID值较小的一方表示建立LDP会话的被动方。

SsnAge

LDP会话从建立至今的时间间隔,格式为:“天:小时:分钟”。

KASent/Rcv

会话发送和接收的keepalive消息数。

配置LSP触发策略

[R1-mpls]lsp-trigger ?
  all              Trigger all FEC for IGP
  bgp-label-route  Trigger Host FEC for public labeled BGP
  host             Trigger host FEC for IGP
  ip-prefix        Trigger IP-prefix list for IGP
  none             Do not trigger FEC for IGP

用来指定哪些静态路由及IGP路由会触发LDP LSP的建立,缺省情况下,根据32位地址的IP路由触发LDP建立LSP。

开启MPLS LDP后,LSP将自动建立,如果不通过策略控制,将有大量的LSP建立导致资源浪费。

配置此命令,可以设定LSP的建立策略,仅由关注的路由触发LDP建立LSP,从而控制LSP的数量,减少系统资源的浪费。

参数参数说明取值
all所有静态路由和IGP路由项触发建立LSP。-
host32位的主机IP路由触发建立LSP。-
bgp-label-route使IBGP协议能够发放标签。
ip-prefix ip-prefix-name根据IP地址前缀列表触发建立LSP。必须是已存在的IP地址前缀列表名称。
none不触发建立LSP。-

标签的发布和管理

在MPLS网络中,下游LSR决定标签和FEC的绑定关系,并将这种绑定关系发布给上游LSR。

LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系来建立LSP

标签的发布和管理由标签发布方式标签分配控制方式标签保持方式来决定。

内容

名称

默认

含义

标签发布方式

(Label Advertisement Mode)

下游自主方式(Downstream Unsolicited,DU)

对于一个特定的FEC,LSR无需从上游获得标签请求消息即进行标签分配与分发。

下游按需方式(Downstream on Demand,DoD)

对于一个特定的FEC,LSR获得标签请求消息之后才进行标签分配与分发。

标签分配控制方式

(Label Distribution Control Mode)

独立方式(Independent)

本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无需等待下游的标签。

有序方式(Ordered)

对于LSR上某个FEC的标签映射,只有当该LSR已经具有此FEC下一跳的标签映射消息、或者该LSR就是此FEC的出节点时,该LSR才可以向上游发送此FEC的标签映射。

标签保持方式

(Label Retention Mode)

自由方式(Liberal)

对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。

保守方式(Conservative)

对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。

上游与下游

MPLS根据数据的转发方向确定上、下游关系。标签报文从上游LSR发出,被下游LSR接收并处理。

如图所示,对于到达192.168.3.0/24的LSP而言,R3是R2的下游LSR,R1是R2的上游LSR。
 

标签发布方式

标签分配:LSR从本地标签空间中取出一个标签与FEC绑定。

标签分发:LSR将标签与FEC的绑定关系通知给上游LSR。

DU模式

标签发布方式为DU时,系统默认支持LDP为所有对等体分标签,即每个节点都可以向所有的对等体发布标签映射关系,不再区分上下游关系。因为在只给上游对等体分标签情况下,发送标签映射消息的时候,要根据路由信息对会话的上下游关系进行确认。

DoD模式

对于一个特定的FEC,LSR获得标签请求消息之后才进行标签分配与分发。

一般情况下,对特定FEC的访问需求会触发标签请求消息

相关命令

配置LDP标签发布模式

[R1-GigabitEthernet0/0/0]mpls ldp advertisement ?
  dod  Downstream On Demand Advertisement Mode
  du   Downstream Unsolicited Advertisement Mode

标签分配控制方式

独立(Independent)模式

在使用DU作为标签分发方式的情况下,如图所示,R2和R3对192.168.4.0/24这条FEC,可以在上游LSR无请求,且自身没有收到下游LSR的标签绑定信息的情况下,主动向上游LSR通告标签绑定信息。

采用DoD作为标签发布方式时,如图所示,R2和R3对192.168.4.0/24这条FEC,只要收到上游LSR的标签请求消息,可以在自身没有收到下游LSR的标签绑定信息的情况下,向上游LSR通告标签绑定信息。

有序(Ordered)模式

当标签控制方式为Ordered,只有当LSR收到特定FEC下一跳发送的特定FEC标签映射消息或者LSR是LSP的出口节点时,LSR才可以向上游发送标签映射消息。

当标签分发方式为DU时,如图所示,对于192.168.4.0/24这条FEC,不论上游LSR是否有请求,必须收到下游LSR对此FEC的标签绑定信息才向上游LSR发布标签绑定信息,所以必须由Egress LSR,也就是R4作为LSP建立的“起点”。

当标签发布方式采用DoD时,如图所示,对于192.168.4.0/24这条FEC,只有收到上游LSR请求的请求,且自身已经收到下游LSR的标签绑定信息的情况下,才向上游LSR通告标签绑定信息。因此,必须由Ingress LSR(R1)发起请求,逐跳请求到Egress LSR(R4),最终由R4开始,向上游建立LSP

标签保留

自由(Liberal)模式

LSR收到的标签映射可能来自下一跳,也可能来自非下一跳。 对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留。

Liberal方式的最大优点在于路由发生变化时能够快速建立新的LSP进行数据转发,因为Liberal方式保留了所有的标签。缺点是需要分发和维护不必要的标签映射。

DU标签分发方式下,如果采用Liberal保持方式,则R3保留所有LDP邻居 R2和R5发来的关于192.168.1.0/24这个FEC的标签,无论该R2和R5是否是IP路由表中到达192.168.1.0/24的下一跳。

DoD标签分发方式下,如果采用Liberal保持方式,LSR会向所有LDP邻居请求标签。但通常来说,DoD分发方式都会和Conservative保持方式搭配使用。

保守(Conservative)模式

对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留。

Conservative方式的优点在于只需保留和维护用于转发数据的标签,以达到节约标签的目的。

当使用DU标签分发方式时,LSR可能从多个LDP邻居收到到同一网段的标签映射消息,如图中R3会分别从R2和R5收到网段192.168.1.0/24的标签映射消息。如果采用Conservative保持方式,则R3只保留下一跳R2发来的标签,丢弃非下一跳R5发来的标签。

当使用DoD标签分发方式时, LSR根据路由信息只向它的下一跳请求标签。

注意:当网络拓扑变化引起下一跳邻居改变时

使用自由标签保持方式,LSR可以直接利用原来非下一跳邻居发来的标签,迅速重建LSP,但需要更多的内存和标签空间。

使用保守标签保持方式,LSR只保留来自下一跳邻居的标签,节省了内存和标签空间,但LSP的重建会比较慢。

保守标签保持方式通常与DoD方式一起,用于标签空间有限的LSR。

PHP特性

PHP(Penultimate Hop Popping,次末跳弹出),如果激活了PHP特性,那么egress节点在为本地路由分配标签的时候,会分配一个特殊标签—3,该标签被称为隐式空标签(Implicit NULL Label)。当LSR转发一个标签报文时,如果发现对应的出标签值为3,则LSR会将栈顶标签弹出,并将里面所封装的数据转发给下游LSR。

在标签发布时,R3为作为192.168.3.0/24这条FEC的Egress LSR。分配标签时,R3为该FEC分配了标签3,并将该标签绑定信息通告给R2。

在数据转发时,R2作为到达192.168.3.0的次末跳(倒数第二跳),发现出标签值为3,于是将标签头部弹出(去掉了标签),将IP报文转发给R3(采用原有的IP转发方式),而R3则仅需执行一次查询操作(查询FIB表)即可获得相应的转发信息,转发效率得到了提升。

隐式空标签与显式空标签

缺省情况下,Egress节点向倒数第二跳分配隐式空标签(implicit-null),即特殊标签3。

但在部署QoS的场景下,标签被弹出后,其中的优先级也会一并丢失。

显式空标签机制,Egress节点向倒数第二跳分配特殊标签0。 若出标签封装为0,则不会将标签头部弹出,标签头部中的QoS信息得以保存。

缺省情况下,Egress分配的是隐式空标签。

相关命令

配置PHP特性

[R1-mpls]label advertise ?
  explicit-null  Explicit-null
  implicit-null  Implicit-null
  non-null       Non-null

MPLS视图下,执行命令label advertise { explicit-null | implicit-null | non-null },配置向倒数第二跳分配的标签。

缺省情况下,使用的是implicit-null,Egress向倒数第二跳节点分配隐式空标签,值为3

如果配置的是explicit-null,Egress节点向倒数第二跳分配显式空标签,值为0

当需要支持MPLS QoS属性时,可以选用explicit-null。 如果配置的是non-null,Egress向倒数第二跳正常分配标签,即分配的标签值不小于16

配置举例

配置举例---LDP本地会话

需求:通过配置MPLS以及LDP,仅使得192.168.0.0/24网段和192.168.1.0/24网段可以通过标签交换的方式实现互访,其他地址不使用标签交换。

步骤:配置设备环回地址,接口IP地址,路由OSPF协议,开启MPLS和LDP,配置LSP触发过滤规则配置LSP触发策略

R1配置

#
 sysname R1
#
mpls lsr-id 1.1.1.1
mpls
 lsp-trigger ip-prefix PC1+2           \\配置LSP触发策略
#
mpls ldp
#
interface GigabitEthernet0/0/0
 ip address 10.1.0.1 255.255.255.0 
 mpls
 mpls ldp
#
interface GigabitEthernet0/0/1
 ip address 192.168.0.254 255.255.255.0 
#
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255 
#
ospf 1 
 silent-interface GigabitEthernet0/0/1
 area 0.0.0.0 
  network 0.0.0.0 255.255.255.255 
#
ip ip-prefix PC1+2 index 10 permit 192.168.0.0 24         \\配置LSP触发过滤规则
ip ip-prefix PC1+2 index 20 permit 192.168.1.0 24  
#

R2配置

#
 sysname R2
#
mpls lsr-id 2.2.2.2
mpls
 lsp-trigger ip-prefix PC1+2 
#
mpls ldp
#
interface GigabitEthernet0/0/0
 ip address 10.1.0.2 255.255.255.0 
 mpls
 mpls ldp
#
interface GigabitEthernet0/0/1
 ip address 10.1.1.2 255.255.255.0 
 mpls
 mpls ldp
#
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255 
#
ospf 1 
 area 0.0.0.0 
  network 0.0.0.0 255.255.255.255 
#
ip ip-prefix PC1+2 index 10 permit 192.168.0.0 24
ip ip-prefix PC1+2 index 20 permit 192.168.1.0 24
#

R3配置

#
 sysname R3
#
mpls lsr-id 3.3.3.3
mpls
 lsp-trigger ip-prefix PC1+2 
#
mpls ldp
#
interface GigabitEthernet0/0/0
 ip address 10.1.1.3 255.255.255.0 
 mpls
 mpls ldp
#
interface GigabitEthernet0/0/1
 ip address 10.1.2.3 255.255.255.0 
 mpls
 mpls ldp
#
interface LoopBack0
 ip address 3.3.3.3 255.255.255.255 
#
ospf 1 
 area 0.0.0.0 
  network 0.0.0.0 255.255.255.255 
#
ip ip-prefix PC1+2 index 10 permit 192.168.0.0 24
ip ip-prefix PC1+2 index 20 permit 192.168.1.0 24
#

R4配置

#
 sysname R4
#
mpls lsr-id 4.4.4.4
mpls
 lsp-trigger ip-prefix PC1+2 
#
mpls ldp
#
interface GigabitEthernet0/0/0
 ip address 10.1.2.4 255.255.255.0 
 mpls
 mpls ldp
#
interface GigabitEthernet0/0/1
 ip address 192.168.1.254 255.255.255.0 
#
interface LoopBack0
 ip address 4.4.4.4 255.255.255.255 
#
ospf 1 
 silent-interface GigabitEthernet0/0/1
 area 0.0.0.0 
  network 0.0.0.0 255.255.255.255 
#
ip ip-prefix PC1+2 index 10 permit 192.168.0.0 24
ip ip-prefix PC1+2 index 20 permit 192.168.1.0 24
#

查看LSP过滤效果

<R1>display mpls ldp lsp
 
 LDP LSP Information
 -------------------------------------------------------------------------------
 DestAddress/Mask   In/OutLabel    UpstreamPeer    NextHop         OutInterface
 -------------------------------------------------------------------------------

 192.168.0.0/24     3/NULL         2.2.2.2         192.168.0.254   GE0/0/1
*192.168.0.0/24     Liberal/1027                   DS/2.2.2.2
 192.168.1.0/24     NULL/1029      -               10.1.0.2        GE0/0/0
 192.168.1.0/24     1029/1029      2.2.2.2         10.1.0.2        GE0/0/0
 -------------------------------------------------------------------------------
 TOTAL: 3 Normal LSP(s) Found.
 TOTAL: 1 Liberal LSP(s) Found.
 TOTAL: 0 Frr LSP(s) Found.
 A '*' before an LSP means the LSP is not established
 A '*' before a Label means the USCB or DSCB is stale
 A '*' before a UpstreamPeer means the session is stale
 A '*' before a DS means the session is stale
 A '*' before a NextHop means the LSP is FRR LSP

分析:可见除了PC1和PC2所在的网络以外的IP都过滤成功了。

配置举例---LDP远端会话

需求:使R1与R3建立LDP远端会话。

步骤:配置各接口IP地址,配置IP协议,开启MPLS LDP,在R1与R3上配置远端会话。

R1配置

#
 sysname R1
#
mpls lsr-id 1.1.1.1
mpls
#
mpls ldp
#
#
mpls ldp remote-peer r3
 remote-ip 3.3.3.3
#
interface GigabitEthernet0/0/0
 ip address 10.1.0.1 255.255.255.0 
 mpls
 mpls ldp
#
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255 
#
ospf 1 router-id 1.1.1.1 
 area 0.0.0.0 
  network 0.0.0.0 255.255.255.255 
#

R2配置

#
 sysname R2
#
mpls lsr-id 2.2.2.2
mpls
#
mpls ldp
#
interface GigabitEthernet0/0/0
 ip address 10.1.0.2 255.255.255.0 
 mpls
 mpls ldp
#
interface GigabitEthernet0/0/1
 ip address 10.1.1.2 255.255.255.0 
 mpls
 mpls ldp
#
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255 
#
ospf 1 router-id 2.2.2.2 
 area 0.0.0.0 
  network 0.0.0.0 255.255.255.255 
#

R3配置

#
 sysname R3
#
mpls lsr-id 3.3.3.3
mpls
#
mpls ldp
#
#
mpls ldp remote-peer r1
 remote-ip 1.1.1.1
#
interface GigabitEthernet0/0/0
 ip address 10.1.1.3 255.255.255.0 
 mpls
 mpls ldp
#
interface LoopBack0
 ip address 3.3.3.3 255.255.255.255 
#
ospf 1 router-id 3.3.3.3 
 area 0.0.0.0 
  network 0.0.0.0 255.255.255.255 
#

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

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

相关文章

一种小型项目的超时机制方案

设计背景 在小型项目中&#xff0c;状态机的跳转往往依赖于某个事件的状态&#xff0c;因此监控某个事件是否处于超时状态就至关重要&#xff1b; 注意事项 超时机制应该能够准确的判断出事件是否真正超时&#xff0c;并预留出设置自定义超时处理的接口&#xff1b;超时机制…

什么是大数?大数有什么用?如何使用大数?

0 什么是大数 如果基本的整数和浮点数精度不能够满足需求&#xff0c;那么可以使用 javamath 包中两个很有用的类:BigInteger和 BiDecimal。 这两个类可以处理包含任意长度数字序列的数值。 BigInteger类实现任意精度的整数运算&#xff0c;BigDecimal实现任意精度的浮点数运算…

Android | Fragment

Android Fragment Fragment 概念 Fragment 表示应用界面中可重复的一部分&#xff0c;Fragment 定义和管理自己的布局&#xff0c;具有自己的生命周期&#xff0c;并且可以处理自己的输入事件。fragment 不能独立存在&#xff0c;而是必须由 Activity 或另一个 fragment 托管…

麦克纳姆轮(麦轮)原理

一、麦轮原理 麦克纳姆轮&#xff1a;简称麦轮&#xff0c;由轮毂和围绕轮毂的辊子组成。 辊子&#xff1a;没有动力的从动小滚轮。 麦克纳姆轮辊子轴线和轮毂轴线夹角是45度。 A轮&#xff08;左旋&#xff09;与B轮&#xff08;右旋&#xff09;互为镜像关系 麦轮在车上的…

Go语言开发小技巧易错点100例(五)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09; …

打工人必学的法律知识(五)——《女职工劳动保护特别规定》

女职工劳动保护特别规定https://flk.npc.gov.cn/detail2.html?ZmY4MDgwODE2ZjNjYmIzYzAxNmY0MTBmMWVkNTE0NTE &#xff08;2012年4月18日国务院第200次常务会议通过 2012年4月28日中华人民共和国国务院令第619号公布 自公布之日起施行&#xff09;第一条 为了减少和解决女职工…

如何减少频繁创建数据库连接的性能损耗?

为极速开发出一套某垂直领域电商系统&#xff0c;采用最简架构&#xff1a; 前端一台Web服务器运行业务代码后端一台DB服务器存储业务数据 大多系统初生时就是这样&#xff0c;只是随业务不但发展变得复杂&#xff0c;架构迭代。系统上线后&#xff0c;虽用户量不大&#xf…

第十三届蓝桥杯大赛软件类决赛Java大学B组C题——左移右移

【问题描述】 小蓝有一个长度为 N 的数组&#xff0c;初始时从左到右依次是 1, 2, 3, . . . N。 之后小蓝对这个数组进行了 M 次操作&#xff0c;每次操作可能是以下 2 种之一&#xff1a; 左移 x&#xff0c;即把 x 移动到最左边。右移 x&#xff0c;即把 x 移动到最右边。 …

数字信号处理音频FIR去噪滤波器(基于MATLAB GUI的开发完整代码+报告+课设)

1、内容简介利用MATLAB GUI设计平台&#xff0c;用窗函数法设计FIR数字滤波器&#xff0c;对所给出的含有噪声的声音信号进行数字滤波处理&#xff0c;得到降噪的声音信号&#xff0c;进行时域频域分析&#xff0c;同时分析不同窗函数的效果。将文件解压至一个目录下&#xff0…

ithewei的2022年度总结

窗外的雨&#xff0c;顺着晒衣架汇聚成豆大的珠&#xff0c;落到一楼庭院顶棚上&#xff0c;嘀嗒不停&#xff1b; 路上的车&#xff0c;由远及近&#xff0c;又由近及远&#xff0c;疾驰而过&#xff1b; 床边的猫&#xff0c;也已入睡&#xff0c;时不时发出一两声细微的鼾声…

面试问:@Resource 和@Autowired 的区别是什么?该怎么回答

Resource 和 Autowired 这两个注解的作用都是Spring生态里面去实现 Bean 的依赖注入 Autowired注解的作用 Autowired是Spring里面提供的一个注解&#xff0c;它默认是根据类型来实现Bean的依赖注入。 Autowired注解里面有一个required属性&#xff0c;它的默认值是true&#…

人大金仓数据库安装篇

图形化安装 规划安装路径与修改目录属主 先用root账户挂载金仓镜像包 mount -o loop /install/KingbaseES_V008R006C005B0023_Lin64_single_install.iso /mnt 切换kingbase用户来安装金仓数据库 进入挂载目录/mnt执行./setup.sh 将金仓注册为系统服务 /KingbaseES/V8/Scrip…

1592_AURIX_TC275_PMU_部分安全措施

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) UCB的几种状态通过寄存器的数值可以直接获取到。启动代码会识别到UCB的错误&#xff0c;如果识别到后悔停止继续&#xff0c;因此不会启动MCU。启动代码也会检查HSM是否存在以及是否需要启…

基于TensorFlow2搭建神经网络实现鸢尾花iris.txt分类

分三步&#xff1a;本地读取鸢尾花数据集搭建神经网络优化本地读取鸢尾花数据集读取本地数据集的两种方法读取本地数据集有两种方法&#xff1a;&#xff08;1&#xff09;利用pandas中的函数读取&#xff0c;并处理成神经网络需要的数据结构pd.read_csv(文件名, header第几行作…

使用码云Gitee创建代码仓库并提交代码

目录 1. 登录Gitee官网 2. 创建代码仓库 3. 克隆仓库到本地 4. 提交代码到Gitee仓库 官方文档&#xff1a;创建你的第一个仓库 - Gitee.com 1. 登录Gitee官网 官网地址&#xff1a;Gitee - 基于 Git 的代码托管和研发协作平台 2. 创建代码仓库 点击图中加号创建仓库&am…

String的不可变性

1.什么是不可变对象 如果一个对象在创建之后就不能再改变它的状态&#xff0c;那么这个对象是不可变的&#xff08;Immutable&#xff09;。不能改变状态的意思是&#xff0c;不能改变对象内的成员变量&#xff0c;包括基本数据类型变量的值不能改变&#xff0c;引用类型的变量…

数据库面试题

数据库基础知识 什么是MySQL&#xff1f; MySQL是一个数据库管理系统。 数据库是数据的结构化集合。 MySQL数据库是关系型的。 关系数据库将数据存储在单独的表中&#xff0c;而不是将所有数据放在一个大仓库中。数据库结构被组织成针对速度进行了优化的物理文件。具有对象&a…

第五届字节跳动青训营 前端进阶学习笔记(一)前端和HTML

文章目录1.前言2.什么是前端3.前端需要关注哪些问题4.HTML语法5.HTML标签6.HTML中的内容划分7.总结这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天 1.前言 本次课程主要介绍了&#xff1a; 前端要解决的基本问题HTML的基本定义和语法为什么要语义化和怎么做的语义化 …

深度学习——梯度

一、初识梯度 import torch x torch.arange(4.0) print(x) x.requires_grad_(True) y 2 * torch.dot(x, x) #torch.matmul(x, x) print(y) y.backward() print(x.grad) print(x.grad 4*x)输出&#xff1a; tensor([0., 1., 2., 3.]) tensor(28., grad_fn<MulBackward0&g…

批次标准化Batch Normalization

批次标准化Batch Normalization 目录 批次标准化Batch Normalization 为什么需要批次标准化 产生上述变化趋势不匹配的原因 处理方法 处理方法的优化 Batch Normalization的引出Testing时的相应处理 批次标准化Batch Normalization 第五节 2021 - 类神经网络训练不起来怎么…