BGP(2):BGP 的报文格式

BGP报文格式详解 BGP边界网关路由协议 一、BGP协议概述 使用范围:BGP范围,使用在AS之间的路由协议 协议的特点:路径矢量型(高级的距离矢量型),没有具体的协议算法,要说非得有个算法的话,那么人就是最好的BGP协议的算法 是否携带网络掩码:携带,并且支持VLSM、CIDR 数据包的封装:基于TCP封装,端口号179 AS:自制系统 AS的分类:公有AS和私有AS,公有AS的范围是1-64511,私有AS的范围是64512-65535 二、BGP协议的特点 1、BGP协议是一种路径矢量型路由协议 2、BGP协议的版本: 阅读详情
AI摘要

本文深入解析BGP报文格式,包括承载于TCP的BGPHeader与BGPData,重点阐述Update报文的结构,撤销路由与新增路由的路径属性,以及Origin、AS_Path、Next_Hop等关键属性的作用。

10.2 BGP 的报文格式

BGP 的报文承载于 TCP 报文,如图10-7所示。

 

图10-7 BGP 报文承载于 TCP 报文

BGP 报文所对应的 TCP 端口号是179。与其他协议一样,BGP 报文也分为2部分:BGP Header、BGP Data。下面我们分别讲述。

10.2.1 BGP 报文头格式

BGP 报文分为4种类型,所有类型的 BGP Header,都是一样的格式,如图10-8所示。

 

图10-8 BGP Header 报文格式

BGP Header 包括3个字段:Marker、Length、Type,下面我们分别讲述。

  • Marker

Marker 占有16个字节,其值全部设为“1”(This 16-octet field is included for compatibility; it MUST be set to all ones. RFC 4271)。

  • Length

Length 字段占有2个字节,其标识整个 BGP 报文的长度(计量单位是“字节”),等于 BGP Header 长度与 BGP Data 长度之和。

  • Type

Type 字段占有1个字节,标识 BGP 的报文类型。BGP 报文类型一共有4种。

(1)Open(Type = 1): 用于建立BGP对等体之间的连接关系

(2)Keepalive(Type = 2): 周期性地向BGP邻居发出Keepalive消息, 用来保持 TCP连接的有效性

(3)Update(Type = 3): 携带的是路由更新(删减、增加)信息

(4)Notification(Type = 4): 当BGP检测到错误状态时, 就向对等体发出Notification消息, 之后BGP连接会立即被关闭

BGP Update 报文(Type = 3),就是“传说”中的 BGP 路由通告报文。由于另外3种报文并不是本章的重点,所以接下来我们值讲述 BGP Update 的报文格式。

10.2.2 BGP Update报文格式

BGP 路由通告,简单地说就是:路由器将存放于自身 BGP 表中的路由信息,通过 BGP Update 消息,发送给它的 BGP 邻居(peer)。

不过需要强调的是,BGP 每次通告的是它的“变量”路由信息,而不是全量。这意味着路由器第1次将自己所有 BGP 路由信息通告给其邻居以后,后续的路由通告,只须通告“变化”的路由信息即可。

所谓“变化”,指的就是当前的路由信息与上次通告时的路由信息相比,哪些是“删除”的路由,哪些是“新增”的路由。

所以我们会在 BGP Update 报文中看到“删除路由”、“新增路由”等相关字段,如图10-9所示。

 

10-9 BGP Update 消息报文格式

图10-9所示的 BGP Update 报文格式,分为3个部分。

(1)撤销路由的信息,包含2个字段:Withdrawn Routes Length,Withdrawn Routes。当上次通告的路由,有些路由已经无效时,本次路由通告需要靠这两个字段告知邻居将这些无效的路由撤销(删除)

(2)新增路由的路径属性,包含两个字段:Total Path Attribute Length,Path Attributes。这个表示新增的路由,除了目的网段以外的其他相关的路径属性

(3)新增路由的可达信息,包含1个字段:Network Layer Reachability Information,表示的是新增路由的目的网段信息(意思是,这些网段的路由是可达的)。

 

下面我们分别讲述这3部分内容。

10.2.2.2 撤销路由的信息

由于所要撤销的路由(Withdrawn Routes)是一个变长字段(包含 0~n 个撤销路由),所以需要用 Withdrawn Routes Length(撤销路由长度,占用2个字节)来标识所有的撤销路由的长度(计量单位是字节)。

当然,如果 Withdrawn Routes Length = 0,则表示没有需要撤销的路由(Withdrawn Routes Length 字段的后面,也不会再有 Withdrawn Routes 字段)。

Withdrawn Routes,是一个列表(List),包含 N 个二元组“<Length, Prefix>”,其数据结构如图10-10所示。 

图10-10 Withdrawn Routes 数据结构

图10-10表达了 n 个二元组<Length, Prefix>,其中 Length 占有1个字节,Prefix 是变成的,其长度由 Length 字段的值表示(计量单位是“bits”)。

1个路由表项中表达目的地址的方法是“网段 + 掩码长度”,二元组(Length, Prefix)中的“Length”表述的就是掩码长度,“Prefix”表述的就是网络号。比如“1.1.1.0/24”用这种二元组的方法表示就是<24(length), 1.1.1(prefix)>,当然“1.1.1”要用bit的形式表示:111111100000000111111111(1 * 2553 + 1 * 2552 + 1 * 255)。

如果二元组的 Length = 0(Prefix 也就不用填写了,因为也没地方填写了),那么意味着所有路由都撤销。

 

10.2.2.3 新增路由的可达信息

新增路由的可达信息(Network Layer Reachability Information,NLRI)的根本含义就是路由表项中的“目的地址”,所以它的数据结构与 Withdrawn Routes 是一样的,也是一个 list,包含 N 个二元组<Length, Prefix>。

NLRI 表示路由表项中的“目的地址”,那么路由表项中的“下一跳”该是什么呢?这就涉及到了“新增路由中的路径属性”。

10.2.2.4 新增路由中的路径属性

BGP Speaker 向它的邻居不能仅仅通告1个“目的地址”,最起码还要包含“下一跳”,这个路由表项才会完整。

BGP 将“下一跳”的信息放到了 BGP Update 报文中的“新增路由中的路径属性”字段。除了“下一跳”以外,“路径属性”还包括很多内容,而且非常复杂。

我们先从属性的分类讲起。

1)路径属性的分类

我们知道,一个 BGP Speaker,在收到邻居的路由通告(BGP Update 报文)时,还会继续通告给它的其他邻居(注意前面介绍过的 eBGP 和 iBGP 的区别)。这些属性分类,其目的是为了约束路由器是否支持这些属性,以及是否传递这些属性。

路径属性一共分为4类。

(1)Well-known mandatory(公认/必选)。这些属性必须支持,而且必须体现在 BGP Update 报文中,而且必须再次传递给邻居(在接下来的路由通告报文中,必须包含这些属性),如果需要再次通告给邻居的话

(2)Well-known discretionary(公认/自选)。这些属性必须支持,但是第1个路由公告路由时,不是必须体现在 BGP Update 报文中.如果第1个路由公告路由时,包含了这些属性,那么后续路由通告中必须再传递给邻居

(3)Optional transitive(可选/可传递)。这些属性不要求必须支持。有的路由器支持,有的路由器不支持,这没关系。当1个支持此属性的路由器,通告给一个不支持此属性的路由器时,这个不支持此属性的“吃瓜”路由器,再次通告路由时,是丢弃还是传递此属性,取决于报文中其中一个 bit 的值(1,必须传递;0 必须不传递)

(4)Optional non-transitive(可选/非传递)。这些属性不要求必须支持。有的路由器支持,有的路由器不支持,这没关系。当一个支持此属性的路由器,通告给一个不支持此属性的路由器时,这个不支持此属性的“吃瓜”路由器,再次通告路由时,必须丢弃此属性,不能在 Update 报文中带上此属性

以上所说的分类,其实是表达了路由通告的两个行为:是否必须支持、是否必须传递,如表10-1所示。

表10-1  路径属性分类的含义

 

是否必须支持

是否必须传递

公认/强制

Well-known mandatory

必须支持

必须传递

公认/自定

Well-known discretionary

必须支持

路由器必须支持,但是第1个公告路由的路由器,可以不带上这些属性

必须传递

如果第1个公告路由的路由器,没带上这些属性,那么所谓传递,无从谈起;

如果第1个公告路由的路由器,带上了这些属性,那么以后的路由通告,必须传递

可选/可传递

Optional transitive

N

不一定

是否传递,取决于报文中有一个 bit 位设置的值:1,必须传递;0 必须不传递

可选/非传递

Optional non-transitive

N

必须不能传递

从某种意义上讲,“必须支持”的属性,就是 BGP 协议规定的“公有属性”,不是“必须支持”的属性,就是厂商的私有属性,厂商可以任意扩展。

当前 BGP Update 消息中的路径属性,我们举例如表10-2所示。

表10-2  路径属性举例

属性名称

属性类型

Origin

Well-known mandatory

AS_Path

Well-known mandatory

Next hop

Well-known mandatory

MED

Optional non-transitive

Local_Preference

Well-known discretionary

Atomic_Aggregate

Well-known discretionary

Aggregator

Optional transitive

Community

Optional transitive

Originator_ID

Optional non-transitive

Cluster_List

Optional non-transitive

Destination Pref (MCI)

 

Advertiser (Baynet)

 

Rcid-Path (Baynet)

 

MP_Reach_NLRI

 

MP_Unreach_NLRI

 

Extended_Communities

 

2)路径属性的数据结构

BGP Update 消息中,有两个字段表示路径路径属性(如图10-9所示):Total Path Attribute Length,Path Attributes。

Total Path Attribute Length 占有2个字节,它指明了 Path Attributes 字段的所有长度(计量单位是字节)。

Path Attributes 是个变长字段,它是一个 list,包含 N 个三元组<attribute type, attribute length, attribute value>。下面我们分别介绍这3个字段。

  • attribute type

attribute type 占有2个字节。attribute type,又细分为2个字段。第1个字段是Attr.Flags(属性标签),第2个字段是Attr.Type Code(属性类型值),如图10-11所示。

 

图10-11 Attribute Type 的数据结构

Attr.Type Code,是一个整数,表示一个属性类型,比如“ORIGIN”属性的 Attr.Type Code = 1。

而 Attr.Flags 则比较复杂,其前4个 bit,每个 bit 都表示1个含义(后4个 bit,暂时没有使用),如图10-12所示。

图10-12 Attr. Flags 报文结构

 

这8个 bit 的解释,如下表所示。

表10-3  Attr. Flags 各 bit 的含义

bit

含义

0

Optional

如果值等于1,则表示属性是可选的(optional)

如果值等于0,则表示属性是公认的(well-known)

1

Transitive

针对可选属性,如果值为1,则表示必须传递,如果值为0,则表示必须不传递

针对 well-known 属性,其值必须设置为1(必须传递)

2

Partial

针对 Optional Transitive 属性,如果值为1,表示这个属性仅仅是部分,如果值是0,表示这个属性已经是完整的(complete)

针对 well-known 属性 和 optional non-transitive 属性,其值必须为0(complete)

3

Extend Length

如果值等于0,则表示接下来的属性长度字段占用1字节

如果值等于1,则表示接下来的属性长度字段占用2字节

4~7

unused

4~7 bit,没有使用,必须设置为0

通过表10-3可以看到,我们在“属性的分类”中所讲述的“well known/optional、transitive/non-transitive”,实际上就是由这 4 个 bits 来表示。

  • attribute length

attribute length,可能占有1个字节,也可能占有2个字节,取决于表10-3中的“Extend Length”这个 bit 的值。如果 Extend Length = 0,attribute length 占有1个字节,如果 Extend Length = 1,attribute length 占有2个字节。

attribute length 表示的是 attribute value 的长度(计量单位是字节)

  • attribute value

attribute value 是一个变长字段,表示属性的值。至于属性的值具体代表什么含义,与具体的属性类型相关。

3)路径属性的说明

表10-2中列举了 16 个路径属性,这里我们挑选几个比较重要的属性进行介绍。

  • Origin

Orgin 是一个 Well-known mandatory 属性,Attr.Type Code = 1。它指的是这次路由通告(Update 报文)中的路由来源是什么,不同的值,代表不同的来源。

(1)IGP(attribute value = 0),表示 NLRI 来源于本 AS 的 IGP 导入

(2)EGP(attribute value = 1),表示 NLRI 来源于 EGP(EGP 已经废弃)

(3)INCOMPLETE(attribute value = 1),表示 NLRI 从其他方式获得,比如路由重分布(redistribute)

  • AS_Path

AS_Path 是一个 Well-known mandatory 属性,Attr.Type Code = 2。

AS_Path 的数据结构是一个三元组  <path segment type, path segment length, path segment value>。这3个字段的含义如下。

(1)path segment type,表明 path segment value 里的 AS ID 的排列顺序。

        如果 path segment type = 1,表明是 AS_SET,无序排列;

       如果 path segment type = 2,表明是 AS_SEQUENCE,顺序排列。

       值得一提的是,这个顺序排列,其实是倒叙排列。比如通告顺序是:R1(AS1) -> R2(AS2),R2(AS2) -> R3(AS3),

        R3(AS3) -> R4(AS4),那么 path segment value = AS4,AS3,AS2,AS1。

(2)path segment length,1个字节长,表明 path segment value 中包含多少个 AS ID(1个字节长,意味着最多有 255 个 AS ID)。

(3)path segment value,是一批 AS ID,表明到达此次通告中的路由,所经过的 AS。这是个变长字段,取决于有多少个 AS ID,每个 AS ID 占用2个字节

AS_Path 的赋值规则是如下。

(1)如果是 iBGP 通告,则不会改变原来的 AS_Path 值,保持不变,通告下去。

(2)如果是 eBGP 通告,则在“path segment value”里面 insert 自己的 AS ID(注意区分path segment type)。

AS_Path 有两大作用,第1个作用是防止 eBGP 路由通告环路,第2个作用是在 BGP 选择最优路径时,发挥作用。

第2个作用,我们放到10.3节讲述,这里我们先讲述第1个作用(防止 eBGP 路由通告环路)。

eBGP 的路由通告是“一传十十传百”,这有可能会引发路由回路。为了阅读方便,我们将图10-4重新贴一下,如图10-13所示。 

 

图10-13 eBGP 的路由通告

图10-13中,R1 自己的路由,经过“R1-R2-R3-R4-R1”这样一个循环,又通告给自己。然后,R1 再通告给 R2 ...... 如此循环反复,无穷无尽。而且,图10-13这样的场景,不仅会造成路由通告环路,还会引发路由环路。

eBGP 解决这个问题的方法就是,在 BGP Update 消息中,在路径属性里附加上 AS_Path 这个字段。比如 R1 通告给 R2,AS_Path 的值是“AS1”(AS_Path 的值实际上是1个三元组列表,这里只是简单示例)。这个路由再通过 R2 通告给 R3 时,AS_Path 的值是“AS2-AS1”,以此类推,当这个路由通过 R4 通告给 R1 时,AS_Path 的值变成了“AS4-AS3-AS2-AS1”。当 AS1 得到这个路由通告时,它发现 AS_Path 里面有自己“AS1”,那么它就将这条路由丢弃。这样就避免了环路。

  • Next_Hop

Next_Hop 是一个 Well-known mandatory 属性,Attr.Type Code = 3。

BGP Speaker,会将路由通告给它的 peer。那么其所通告的路由中的下1跳(Next_Hop)应该是什么呢?我们从1个例子入手来讲解。如图10-14所示。

 

图10-14 Next_Hop 组网图

我们先描述一下图10-14中的 TOPO 关系,如下所示。

(1)R1(1.1.1.1/24)/R3(1.1.3.3/24),iBGP peer

(2)R1(1.1.1.1/24)/R4(1.1.1.4/24),eBGP peer

(3)R4(1.1.4.4/24)/R5(1.1.4.5/24),eBGP peer

(4)R5(1.1.5.5/24)/R6(1.1.5.6/24),iBGP peer

(5)R3 连接 8.8.8.0/24 网段

Next_Hop 的赋值规则如下。

(1)iBGP 通告,目的地址也在 iBGP 这个 AS 域内(图10-14中 R3 通告给 R1,目的网段 8.8.8.0/24),Next_Hop 就是宣告路由器的地址(1.1.3.3)

(2)iBGP 通告,目的地址不在 iBGP 这个 AS 域内(图10-14中 R5 通告给 R6,目的网段 8.8.8.0/24),Next_Hop 是上一个 eBGP 宣告时的宣告者地址(图10-14中,上一个 eBGP 宣告,是 R4 宣告给 R5,Next_Hop 是 R4 的 IP 地址:1.1.4.4)

(3)eBGP 通告,Next_Hop 就是宣告路由器的地址(图10-14中:R1 通告给 R4,目的网段 = .8.8.0/24,Next_Hop = 1.1.1.1;R4 通告给 R5,目的网段 = 8.8.8.0/24,Next_Hop = 1.1.4.4)

 

我们把 Next_Hop 属性叠加到图10-14中,可以有更加直观的认识,如图10-15所示。

 

图10-15 Next_Hop 示意图

  • Multi_Exit_Disc

Multi_Exit_Disc 是 Multi_Exit_Discriminate 的缩写,有时也简写为 MED。它是一个  optional non-transitive 属性,Attr.Type Code = 4。

MED 是一个 4 字节的无符号整数,正如其名称“Multi_Exit_Discriminate(多出口辨别)”所暗示的那样,它的目标确实也就是在路由选择时,帮助 BGP 选择哪个出口,如图10-16所示。

 

图10-16 MED 示意图

图10-16是1个简化的组网图,而且其他条件都不考虑,只考虑 MED 这一个因素。图10-16中,R1/R2,R1/R3,分别建立 eBGP peer。R2 与 R3,都向 R1 公告了路由,目的网段是 8.8.8.0/24,下一跳分别是 R2,R3。这样,R1 就会有两条 BGP 路由,都是前往 8.8.8.0/24,但是下一跳分别是 R2 和 R3。

现在问题来了,R1 该选择哪一个作为下一跳?

BGP 在选择路由时,在其他条件都相同的情况下,会优先选择 MED 小的那条路由。也就是说,图10-16中,BGP 优先会选择 R2 作为下1跳(去往 8.8.8.0/24)。

  • Local_Pref

Local_Perf 是 Local_Preference的缩写,是一个 well-known 的属性,Attr.Type Code = 5。

Local_Perf(本地优先级),也是“人如其名”,只会在1个 AS 域内的 iBGP 路由通告中传递,不会在 eBGP 路由通告中传递。如果哪位“大哥”故意在 eBGP 通告中附带了这个属性,那么接收者,也得忽略并丢弃这个属性。

Local_Perf 这个属性的目的,也是为了选路,如图10-17所示。

 

图10-17 Local_Pref 示意图

我们先描述一下图10-17中的 TOPO 关系,如下所示。

(1)R4/R2、R4/R3,分别是 eBGP peer

(2)R2/R1、R3/R1,分别是 iBGP peer

(3)R4 能够到达 8.8.8.0/24 网段

图10-17中,R1 所学习到 BGP 路由信息中,去往 8.8.8.0/24 网段的有2条路由,这2条路由,体现在出接口不同(不同的接口,对应着不同的 iBGP peer)。

那么 R1 会选择哪条路由呢?

BGP 为了解决这个问题,提出了 Local_Pref 属性。Local_Pref 是1个 4 字节无符号整数,它的值代表一个度量(metric),值越大,优先级越高,路由选择时,就会优选。

图10-17中,如果其他条件都一样,那么 R1 就会选择出接口 inf1,即通过 R2 出去。

BGP的5种交互报文、6种状态机、对等体关系建立与路由交互过程介绍 启用BGP后,开始准备建立TCP的连接时的状态。任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。Connect已发送TCP Syn报文,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。(Connect Retry 重置连接计时器,默认32S)如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。如果TCP连接失败,那么BGP转至Active状态。 阅读详情

相关推荐

网络基础:BGP协议

BGP(边界网关协议,Border Gateway Protocol)是一种用于在不同自治系统(Autonomous Systems,AS)之间交换路由信息的路径向量协议。BGP是互联网的核心路由协议之一,负责管理和维护互联网范围内的路由信息,确保数据能够在不同网络之间正确传输。

WolvenSec的博客 3870

【博客459】BGP(边界网关协议)-----报文格式

一条Update报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRI(Network Layer ReachableInformation,网络层可达信息)字段中,PathAttributes字段携带了这些路由的属性,BGP根据这些属性进行路由的选择;同时Update报文还可以携带多条不可达路由信息,被撤销的路由放在WithdrawnRoutes字段中,用来通知对等体要撤销的路由。①Marker:占16字节,用于标明BGP报文边界,固定值为所有比特均为“1”,相当于一个报文的头部标识符。

qq_43684922的博客 2284

蓝易云 - 动态BGP与静态BGP的区别

动态BGP与静态BGP的核心差异在于路由选择机制:动态BGP能自动选择最优路径并实时切换,适用于高可用性业务(如游戏、直播);静态BGP路径固定,依赖人工配置,适合成本敏感型业务。两者本质区别不在速度快慢,而在于是否具备自动路由能力。选型需根据业务需求——动态BGP保障稳定性但成本高,静态BGP简单经济但对故障不敏感。关键是要匹配业务对网络中断的容忍度,而非盲目追求技术指标。

高性价比服务器就选:蓝易云 1300

BGP报文格式分析

BGP报文种类: 由于BGP是承载在TCP之上的协议,在建立一个BGP对等体之前必须建立标准的TCP三次握手,并且在目标端打开一个到端口为179的连接,TCP能够提供可靠的传输方式,可以进行重传、确认及排序功能。BGP不需要开发确认报文,因为所有的确认都由TCP层来提供,从而可以减少BGP的报文数量,BGP 所有报文均采用单播的方式来发送,因此不能够自动地发现邻居。 BGP的运行是通过消息驱动的,共有Open、Update、Notification、Keepalive和Route-Refresh等5种消息

tushanpeipei的博客 8880

BGP属性、BGP选路原则、BGP选路实验

BGP属性、BGP选路原则、BGP选路实验

weixin_72194028的博客 2936

C++游戏开发入门:从环境配置到第一个完整项目

C++ 作为游戏开发领域的关键语言,其学习路径常因语法枯燥而令初学者却步。以项目驱动的方式学编程,能帮助学习者将变量、循环、函数、指针等基础概念融入实际游戏逻辑中,获得即时反馈与完整项目经验。掌握合适的开发环境是高效实践的前提,例如在 Windows 下使用 VS Code 搭配 MinGW-w64 编译器,配合调试器与构建脚本,即可搭建轻量可扩展的 C++ 游戏开发工作流。此类课程通常面向无基础人群,从控制台小游戏逐步过渡到带游戏循环的完整作品,过程中还需关注性能观察、素材授权与版本管理。无论你是刚接触编

weixin_30621959的博客 540

一个报文的路由器之旅_BGP(2):BGP 的报文格式

10.2 BGP 的报文格式BGP 的报文承载于 TCP 报文,如图10-7所示。图10-7BGP 报文承载于 TCP 报文BGP 报文所对应的 TCP 端口号是179。与其他协议一样,BGP 报文也分为2部分:BGP Header、BGP Data。下面我们分别讲述。10.2.1 BGP 报文头格式BGP 报文分为4种类型,所有类型的 BGP Header,都是一样的格式,如图10-...

weixin_39668408的博客 659

DSSAT模型建模教程

随着数字农业和智慧农业的发展,基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。现有版本V4.7能模拟27种主要农作物的生长发育和产量形成过程,被广泛应用于精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等诸多与农业生产和科研有关的领域。如果你是个模型入门者,这次将让你体验一键模拟的乐趣。

weixin_55561616的博客 1413

【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )

一、路由选择协议分类、 二、BGP 协议 简介、 三、BGP 协议 信息交换过程、 三、BGP 协议 报文格式、 四、BGP 协议 特点、 五、BGP-4 协议的 四种报文、 六、RIP 、OSPF、BGP 对比、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4017

Cisco Firepower FMCv修改管理Ip方法

Cisco Firepower FMCv修改管理Ip方法

funnycoffee123的博客 1091

OpenCv案例(七): 基于OpenCvSharp计算图像的清晰度(自动对焦)

自动对焦,其实是对相机成像的清晰值得计算,若对焦不清晰,成像的清晰度低,视觉效果模糊。若是在工业检测行业,对焦不准确,可能会造成严重后果;对焦准确的图像,其清晰度高,对比度鲜明,层次明显。

qq_37835727的博客 7113

BGP笔记的基本概要

整个网络规模扩大,路由数量进一步增加,路由表与LSDB规模变大,路由收敛变慢,设备性能消耗加大1)BGP基于TCP,只要能够建立TCP连接即可建立BGP2)只传递路由信息,不会暴露AS内的拓扑BGP存在两种对等体:EBGP与IBGP位于相同自治系统的BGP Speaker(BGP发言者)之间的BGP对等体关系,通常用环回口配置IBGP邻居关系位于不同自治系统的BGP Speaker之间的BGP对等体关系,并且两台EBGP路由器之间peer所指定的对等体地址必须路由可达。

数通Dinner的博客 2264

cuRobo 入门教程(二)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供正向/逆向运动学、碰撞检测、数值优化等核心功能,支持在NVIDIA Jetson Orin等平台上实现毫秒级运动规划。该库创新性地采用并行轨迹优化技术,结合nvblox工具实现深度摄像头避障功能,并通过多层ESDF结构处理动态障碍物。性能测试显示,在RTX 6000 Ada显卡上可实现99.85%的成功率,平均规划时间仅39毫秒。cuRobo还提供Python API支持神经网络集成,并具备批量环境处理能力,特别适用于工业机器人应用场景。最新版本通过算法

2506_90492529的博客 1295

BGP的5种报文类型

一条Update报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRI(Network Layer Reachabl Information,网络层可达信息)字段中,Path Attributes字段携带了这些路由的属性,BGP根据这些属性进行路由的选择。BGP-4协议有5种报文:Open(建立)、Update(更新)、Notification(通知)、Keepalive(保持活跃)和Route-refresh(路由刷新),其中Keepalive报文为周期性发送,其余报文为触发式发送。

Fanmeang的博客 1521

22h2版本的win10安装Docker Desktop时页面空白

摘要:Windows10 22H2系统重装Docker时出现安装界面卡死问题,通过管理员CMD执行静默安装命令解决。命令指定了WSL-2后端及多个自定义数据存储路径(安装目录、Hyper-V数据、Windows容器数据、WSL数据),安装需等待几分钟。最终验证安装成功。

猿小白的博客 650

【大语言模型 85】IA3与其他PEFT方法对比

在大语言模型时代,参数高效微调(PEFT)技术成为了降低微调成本的关键。本文深入解析IA3(Infused Adapter by Inhibiting and Amplifying Inner Activations)方法,并与LoRA、AdaLoRA、Prefix Tuning等主流PEFT技术进行全面对比,通过理论分析、代码实现和实验验证,帮助读者理解不同PEFT方法的优劣势和适用场景,为实际项目中的技术选型提供科学依据。

熵数实验室 752

BGP基础

AS:自治系统,同一个组织管理管理下,使用统一选路由策略的设备集合。

lulinhao的博客 1106

AI自瞄原理剖析(四)从Yolo推理坐标到屏幕坐标:基于FOV视角与焦距的坐标变换与精准瞄准

从Yolo推理框架得到的坐标到屏幕坐标的转换是一个涉及到FOV视角、焦距以及分辨率的复杂过程。通过数学公式,我们可以将推理框坐标反推为游戏内的实际坐标,并最终映射到屏幕坐标系中。利用这些信息,AI自瞄系统能够精确计算出准星从当前位置移动到敌人位置的距离,实现精准的自动瞄准。通过这种方法,AI自瞄系统能够在不同的游戏环境下灵活应对,提供高度精确的操作体验。在AI自瞄系统中,目标检测仅仅是第一步,获取到预测框的坐标后,我们还需要将这些坐标转换为实际屏幕上的精确位置。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1332

f协议 openmessage_BGP报文格式

BGP报文头基本格式(RFC4271)报文格式BGP报文由BGP报文头和具体报文内容两部分组成。(RFC4271)BGP的运行是通过消息驱动的,共有5种消息类型,这些消息有相同的报文头。这些消息通过TCP协议进行传播(端口号是179)。消息最长为4096字节,最短为19字节(只包含报文头)。BGP报文头包括三的部分,总长19字节。各个部分的格式和功能如下:(RFC4271)图1BGP报文头格式Ma...

weixin_39805906的博客 863

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

BGP 报文格式

BGP 报文格式

forinput的博客 804

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

三十六、BGP协议

文章目录1、BGP协议2、BGP协议交换信息的过程3、BGP协议报文格式4、BGP协议的特点5、BGP-4协议的4种报文6、三种路由选择协议的比较THE END 路由选择协议的分类: 1、BGP协议 \qquadBGP协议是一种用于自治系统内之间的应用层路由选择协议。BGP协议需要解决的问题如下: \qquad和谁交换? 与其他AS的邻站BGP发言人交换信息,BGP发言人指的是BGP边界路由器; \qquad交换什么? 交换网络可达性的信息,即要到达某个网络所要经过的一系列AS。 \qquad多久交换?

dragon Fly的博客 1866

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

BGP 报文格式

简单来说,BGP 报文包括头部与负载两部分,其中负载根据报文类型的不同而变化,

沉默的溪 687

BGP相关知识笔记

整个网络规模扩大,路由数量进一步增加,路由表与LSDB规模变大,路由收敛变慢,设备性能消耗加大为此在AS之间专门使用BGP协议进行路由传递,相较于传统的IGP路由协议:BGP基于TCP,只要能够建立TCP连接即可建立BGP只传递路由信息,不会暴露AS内的拓扑3。

Richardlygo的博客 1591

BGP学习笔记2

BGP建立对等体的对等体都会发起TCP三次握手,所以会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小,如果本端Router ID小于对端Router ID,则会关闭本地建立的TCP连接,使用由对端主动发起创建的TCP连接进行后续的BGP报文交互R3的Router ID: 10.1.34.3,R4的Router ID:10.1.34.4。

jianghuxiake的博客 1187

BGP - 32张图详解BGP路由协议:BGP基本概念、BGP对等体、BGP报文类型、BGP状态机等

32张图详解BGP路由协议:BGP基本概念、BGP对等体、BGP报文类型、BGP状态机等

StudyMaterials的博客 3425

BGP总结

(1)OSPF:宣告网段,计算路由,简单来说就是,

m0_73627109的博客 1586
上一篇: BGP(1):BGP 的基本机制
下一篇: BGP(3):BGP 的路径优选
废言Pro
博客等级 码龄16年 1092粉丝 142原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值