LDP 消息头部格式
为保证 LDP 消息的可靠发送, 除了 Discovery(Hello)消息使用 UDP(端口 646)外, LDP 的 Session 消息, Advertisement 消息和 Notification 消息都使用 TCP(端口 646)传输.
LDP 协议消息头部格式如下(PDU, 协议数据单元, 每个 LDP PDU 有个 LDP 消息头, 后面跟着一个或多个 LDP 消息内容).
字段 长度 说明
Version 2 字节 表示版本号. 目前 LDP 的版本号始终为 1.
PDU Length 2 字节 表示 PDU 的总长度, 包括 LDP ID 和整组 LDP 消息, 不包括 Version 和 PDU Length 字段.
例如某个 LDP 报文中包含 3 个 Hello 消息, 则该报文的 PDU length = 3 * Message length.
LSR-ID 4 字节 LDR-ID 标识一台 LSR, 必须全局唯一.
LaberSpace ID 2 字节 标识了 LSR 内的标签空间. 对于平台范围标签空间, 这些数值都应当为 0.
Bunch of messages 变长 是一组 LDP 消息的集合, 可以是一个或者多个 LDP 消息.
当 LDP 报文以 UDP 方式传输时,"Bunch of messages" 只能是 Hello 消息的集合.
当 LDP 报文以 TCP 方式传输时,"Bunch of messages" 可以是除 Hello 消息外任意类型的 LDP 消息的集合.
LDP 消息格式
所有 LDP 消息的格式如下:
字段 长度 说明
U 1 比特 未知的消息.
如果对端收到的 LDP 消息中 "Message type" 字段为未知的 LDP 消息类型, 且 "U" 字段的值为 "0", 则向源端发送通知 (Notification) 消息.
如果对端收到的 LDP 消息中 "Message type" 字段为未知的 LDP 消息类型, 且 "U" 字段的值为 "1", 则忽略该未知消息.
Message Type 15 比特 LDP 消息的类型.
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Mandatory Parameters 变长 LDP 消息的强制参数.
Optional Parameters 变长 LDP 消息的可选参数, 包含 0~n 个 TLV.
通告 (Notification) 消息
LSR 发送通告消息来通知重要事件到 LDP 对等体. 通告消息通知致命错误或提供咨询信息, 如处理 LDP 消息的结果或 LDP 会话的状态.
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Status TLV 变长 标识一个事件.
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
Hello 消息
用于通告和维护网络中 LSR 的存在.
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
Hold Time 16 比特 保持时间, 以秒为单位的 Hello 保持时间. LSR 维护来自潜在同伴的 Hello 的记录. 为 0 的数值意味着使用缺省值. 0xffff 的数值意味着无穷大.
T 1 比特 T(Targeted Hello)值为 1 表示为远端 Hello 消息, 值为 0 表示本地 Hello 消息.
R 1 比特 R(Request Send Targeted Hellos)值为 1 表示请求接收者周期性发送远端 Hello 消息给该 Hello 的发送源端, 值为 0 表示没有此需求.
Reserved 14 比特 保留字段, 必须置 0, 接收端忽略此字段.
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
Initialization 消息
LDP 的 Initialization 消息在 LDP 回家建立阶段发送, 格式如下:
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
Protocol Version 16 比特 表示协议版本号 = 1.
KeepAlive Time 16 比特 TCP 连接的保持时间, 这个定时器的刷新并不是收到 KeepAlive 消息才会刷新, 而是通过 TCP 连接收到的 LDP PDU 时都会刷新
A 1 比特 表明标签分配方式 ( 0 = DU ;1 = DoD)
D 1 比特 表明是否使能了环路检测功能(0 = Disable ; 1 = Enable).
Reserved 6 比特 保留字段, 必须置 0, 接收端忽略此字段.
PVLim 8 比特 PVLim (Path Vector Limit),LSP 支持的最大跳数(只有在使能了 Loop detection 功能时有效, 默认值为 32).
Max PDU Length 16 比特 LDP PDU 的最大长度, 默认值为 4096 字节.
Receiver LDP Identifier 6 字节 Initialization 消息的接收者的 LDP 标识符(LDP ID).
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
KeepAlive 消息
Keepalive 消息无 Mandatory Parameters 字段及后面的字段, 用于维护 SESSION 的状态, 所以这里不需要什么特别的内容, 只要对方知道自己还存在就好.
地址 (Address) 消息
Address 消息用于 LSR 发送地址消息到 LDP 邻居, 以公告其接口地址.
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
Address Family 16 比特 地址族编号.
Addresses 变长 指定地址族的地址列表, 格式取决于地址族类型:
IPv4 地址为 4 字节
IPv6 地址为 16 字节
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
地址撤销 (Address Withdraw) 消息
LSR 发送 Address Withdraw 消息到 LDP 对等体, 以撤销之前公告的接口地址. 当接口地址被删除或接口 down 后, 就会发送 Address Withdraw 消息.
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
Address Family 16 比特 地址族编号.
Addresses 变长 指定地址族的地址列表, 格式取决于地址族类型:
IPv4 地址为 4 字节
IPv6 地址为 16 字节
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
Label Mapping 消息
对于特定的 FEC, 下游使用 Label Mapping 消息为上游分配标签.
Label Mapping 消息均由下游发往上游节点, Label Mapping 消息的发送方式因标签分配方式或者标签控制方式的不同而不同:
DU 模式下: 下游无需等待上游的 Label Request 消息可以直接为某 FEC 向上游 LDP 邻居发送 Label Mapping 消息;
DoD 模式下: 下游必须等待上游的 Label Request 消息才能为指定的 FEC 向上游 LDP 邻居发送 Label Mapping 消息;
Independent 模式下: 中间节点无需等待收到下游为指定 FEC 发送的 Label Mapping 消息后才向它的上游 LDP 邻居发送 Label Mapping 消息;
Order 模式下: 中间节点必须等待收到下游为指定 FEC 发送的 Label Mapping 消息后才能向它的上游 LDP 邻居发送 Label Mapping 消息.
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
FEC Element 1 to FEC Element n 每个 Element 1 字节 表明该标签是为哪个 FEC 而分配的.
FEC Element 的格式定义:
Type = 0x01: 反掩码. 只在 Label Withdraw 和 Label Release 消息中使用.
Type = 0x02: 前缀.
Label TLV 52 比特 表明下游为该 FEC 分配了什么标签.
Label 字段是个 20 比特的标签值.
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
Label Request 消息
LSR 发送 Label Request 消息给 LDP 对等体请求 FEC 对应的标签.
Label Request 消息只能由作为 Ingress 的 LSR 发起, 不能由作为 Transit 的 LSR 发起(Order+dod). 下游收到 Label Request 消息后需要向上游返回 Label Mapping 消息, Label Mapping 消息中携带 Label Request 消息中的 Message ID TLV.
下列情况下, 下游收到 Label Request 消息后不会向上游返回 Label Mapping 消息:
下游找不到与 Label Request 中 FEC TLV 中对应的路由, 此时返回 No Route 的 Notification 消息;
下游没有足够的标签来分配, 此时返回 No Label Resource 的 Notification 消息;
下游检测到有环路发生, 此时返回 Loop Detected 的 Notification 消息.
图 12 Label Request 消息格式
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
FEC Element 1 to FEC Element n 每个 Element 1 字节 表明该标签是为哪个 FEC 而分配的.
FEC Element 的格式定义:
Type = 0x01: 反掩码. 只在 Label Withdraw 和 Label Release 消息中使用.
Type = 0x02: 前缀.
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
Label Abort Request 消息
上游 LSR 发送了 Label Request 消息后但还没有收到 Label Mapping 消息前, 发现 FEC 对应的下一跳变化了或者其他可能的原因需要发送新的 Label Request 消息时, 上游会向下游发送 Label Abort Request 消息.
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
FEC Element 1 to FEC Element n 每个 Element 1 字节 表明该标签是为哪个 FEC 而废弃的.
FEC Element 的格式定义:
Type = 0x01: 反掩码. 只在 Label Withdraw 和 Label Release 消息中使用.
Type = 0x02: 前缀.
Label Request Message ID TLV - 要被废弃的 Label Request 消息的消息 ID.
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
Label Withdraw 消息
Label Withdraw 消息一般由下游 LSR 发往上游 LSR, 通知上游 LSR 之前通告的与某 FEC 对应的 Label 不再使用, 上游 LSR 需要解除 Label 和 FEC 的映射关系.
下列情况下会发送 Label Withdraw 消息:
下游节点不再有某条 FEC, 如果已经为该 FEC 发送了 Label Mapping 消息, 则发送 Label Withdraw 消息;
下游单方面的决定不再使用标签转发时也会发送 Label Withdraw 消息.
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
FEC Element 1 to FEC Element n 每个 Element 1 字节 表明该标签是为哪个 FEC 而撤销的.
FEC Element 的格式定义:
Type = 0x01: 反掩码. 只在 Label Withdraw 和 Label Release 消息中使用.
Type = 0x02: 前缀.
Label TLV 52 比特 表明该 FEC 对应的标签.
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
Label Release 消息
Label Release 消息一般由上游发往下游, 通知撤销 Label 和 FEC 的邦定, 该消息相当于 Label Request 消息的逆过程.
在下列情况下会发送 Label Release 消息:
上游 LSR 的标签保持方式是保守方式, 发送 Label Mapping 消息的 LSR 不再是 FEC 的下一跳时, 上游 LSR 需要发送 Label Release 消息来撤销 Label 和 FEC 的映射关系;
上游 LSR 的标签保持方式是保守方式, 从不是 FEC 的下一跳收到 Label Mapping 消息后, 上游 LSR 需要发送 Label Release 消息;
LSR 收到 Label Withdraw 消息后需要发送 Label Release 消息.
字段 长度 说明
Message Length 16 比特 LDP 消息的长度, 是 Message ID, 强制参数和可选参数的长度的总和.
Message ID 32 比特 LDP 消息的编号, 用于唯一地标识一个 LDP 消息.
Length 16 比特 LDP 消息是以 LDP PDU 中的 TLV 形式定义的. 每个 LDP TLV 有一个 2 字节的 Type 域, 2 字节的 Length 域和变长的 Value 域. 这里的 Length 就表示 TLV 的 Value 域的字节数.
FEC Element 1 to FEC Element n 每个 Element 1 字节 表明该标签对应的 FEC.
FEC Element 的格式定义:
Type = 0x01: 反掩码. 只在 Label Withdraw 和 Label Release 消息中使用.
Type = 0x02: 前缀.
Label TLV 52 比特 图 21 Label TLV 的格式
Optional Parameters 变长 可选参数, 包含 0~n 个 TLV.
来源: http://www.bubuko.com/infodetail-2853360.html