在之前学习 BGP 的过程中,如下图:
配置如下:
R1
undo terminal monitor
system-view
sysname R1
interface g0/0/0
ip address 192.168.12.1 24
quit
interface loopback 0
ip address 10.10.1.1 32
quit
bgp 100
router-id 1.1.1.1
network 10.10.1.1 32
peer 192.168.12.2 as-number 200
quit
R2
undo terminal monitor
system-view
sysname R2
interface g0/0/0
ip address 192.168.23.2 24
quit
interface g0/0/1
ip address 192.168.12.2 24
quit
interface loopback 0
ip address 10.10.2.2 32
quit
ospf 1 router-id 2.2.2.2
area 0
network 192.168.23.0 0.0.0.255
network 192.168.12.0 0.0.0.255
network 10.10.2.2 0.0.0.0
quit
bgp 200
peer 192.168.12.1 as-number 100
peer 10.10.5.5 as-number 200
peer 10.10.5.5 next-hop-local
peer 10.10.5.5 connect-interface loopback 0
quit
R3
undo terminal monitor
system-view
sysname R3
interface g0/0/0
ip address 192.168.34.3 24
quit
interface g0/0/1
ip address 192.168.23.3 24
quit
interface loopback 0
ip address 10.10.3.3 32
quit
ospf 1 router-id 3.3.3.3
area 0
network 192.168.23.0 0.0.0.255
network 192.168.34.0 0.0.0.255
network 10.10.3.3 0.0.0.0
quit
R4
undo terminal monitor
system-view
sysname R4
interface g0/0/0
ip address 192.168.45.4 24
quit
interface g0/0/1
ip address 192.168.34.4 24
quit
interface loopback 0
ip address 10.10.4.4 32
quit
ospf 1 router-id 4.4.4.4
area 0
network 192.168.45.0 0.0.0.255
network 192.168.34.0 0.0.0.255
network 10.10.4.4 0.0.0.0
quit
R5
undo terminal monitor
system-view
sysname R5
interface g0/0/0
ip address 192.168.56.5 24
quit
interface g0/0/1
ip address 192.168.45.5 24
quit
interface loopback 0
ip address 10.10.5.5 32
quit
ospf 1 router-id 5.5.5.5
area 0
network 192.168.45.0 0.0.0.255
network 192.168.56.0 0.0.0.255
network 10.10.5.5 0.0.0.0
quit
bgp 200
peer 192.168.56.6 as-number 600
peer 10.10.2.2 as-number 200
peer 10.10.2.2 next-hop-local
peer 10.10.2.2 connect-interface loopback 0
quit
R6
undo terminal monitor
system-view
sysname R6
interface g0/0/1
ip address 192.168.56.6 24
quit
interface loopback 0
ip address 10.10.6.6 32
quit
bgp 600
router-id 6.6.6.6
peer 192.168.56.5 as-number 200
network 10.10.6.6 32
quit
R1 的接口 地址,通过 BGP 宣告,然后传递给 R2 ,然后R2 传给 R5 ,最后传递个 R6;、
R6 的接口地址,也通过 BGP ,最终也传给了 R1。此时 R1 和 R6都拥有了彼此的路由条目了,但是 2 个 IP 地址之间,是无法互通的。
经过分析,原因是:中间的运营商 AS 200 的内部 路由器是没有 AS 100/ AS 600 的路由,层级的解决法是 :想办法让 AS 200 的内部路由器,学习到 AS 100/ AS 600 的路由,所以,我们陆续提出了以下解决方案:
- 我们在 AS 200 的 内部路由器上,逐个添加 AS 100/AS 600 的路由
- 我们在 AS 200 的内部路由器上,运行 IBGP 协议,将 BGP 宣告进入 IGP
- 我们在 AS 200 的内部路由器上,运行 BGP 协议,通过该协议传递路由
- 但是遇见了新的问题: IBGP 邻居之间因为水平分割,无法正常传递路由
- 所以针对上述的问题,不断的提出以下解决方案( 虽然都很麻烦 )
- BGP 全互联/ BGP 联盟 / BGP 反射器
但是,除了上述的解决办法以外,我们还有更好的解决办法:MPLS,通过在 AS 200 的内部路由器上,运行 MPLS ,可以让每个路由器变成 LSR。所谓的 LSR ,叫做 label switch router ,即标签交换路由器,此时仅关心标签;不像传统的路由器:仅仅关心路由表。
既然 AS 200 内部的路由器,以后转发都靠标签,不靠路由。那么我们就没有必要在 AS 200 内部的所有路由器上运行 BGP 了,所以通过运行 MPLS ,就可以大大的简化 AS 200 内部的网络架构,让整个网络更加具有扩展性。那么接下来,我们就需要了解下:运行 MPLS 的路由器是如何干活的。
传统的路由器靠“ 路由表 ” 的“ 路由 ” ,转发数据。标签交换路由器 (LSR)靠的是 “ 标签转发表” 的 “ 标签 ” 转发数据。
那么,标签从何而来呢?
如果想要搞清楚这个问题,我们首先需要知道的是: 在 LDR 的" 标签转发表 "中,包含的是啥,其实,包含的是:路由条吧和标签对应条目,即一个 路由对应一个 标签,称之为: 标签绑定信息
所以,我们就需要搞清楚“ 到底是什么 ” 可以为“ 每个路由 ” 分配一个“ 标签 ”,同时标签长得什么样子?
其实,在 MPLS 这个“ 多协议标签交换 ” 机制中,完全是依靠 LDP 协议来工作的。
LDP 的全称是 : label distribution protocol ,标签分发协议
该协议工作过程如下:
- 分配一个标签
- 每个运行 MPLS 的协议,都会为自己本地路由表中的非 BGP 路由分配标签
- 标签的样子,也是由该协议指定的:
- MPLS 中 的 LDP 所分配的标签,很小:在报文中,仅仅占用 4个字节
- 标签的结构也非常的简单:
- Label :表示标签值,长度占用了 20 bit
- Exp :experiment ( 试验位),长度占用了 3 bit ,用来表示标签的 “ 优先级 ”
- S :bottom of statck ( 栈底位),长度占用了1 bit,永利来表示当前这个标签是不是“ 标签栈 ” 的底:这是不是“ 最后 1 个 ” 标签。
- TTL ( time to live ),占用了 8 bit ,用来表示标签的存活时间的,( 特点与 IP 头部中的 TTL 值是相同的 ),每经过 1 个 LSR ,TTL 值就会减 1 ,当减为 0 时,该标签就被丢弃了
- 传输一个标签
- 传给谁:--传输给自己的邻居,存在于 LDP 的邻居表,( 如何形成 LDP 邻居表呢)
- 怎么传---因为路由和标签的对应对,很关键,所以传递这个标签,必须得很稳定( 靠TCP传输)
- 存在哪?--本地生产的路由和标签信息,以及从邻居学习过来的,都保存在 LDP 数据库
- 选择一个标签
- 所谓的“ 选择 ” 标签,就是在 LDP 协议的数据库中,针对每个路由,选择一个“ 最好”的标签
- 将最好的标签信息,存放在一个表中,专门用来转发带有标签的数据,该表叫做 :LDP 标签的转发表
通过上面的工作过程分析,我们可以将 LDP 的工作原理,汇总为:
- 建立 LDP 邻居表
- LDP 协议虽然是每个启用了 MPLS 的路由器;给自己路由表中的那些非BGP 路由分配标签的。但是该协议在 OSI 模型中,依然是属于第 7 层的,即 应用层。
- 所以,LDP 发送的报文,是要使用传输层协议的, LDP 在建立邻居表的时候,使用的是 UDP 协议,源端口号和目标端口号都是固定的 646;并且发送报文的方式,默认情况下是组播:224.0.0.2 ,表示该网段中的所有路由器。
- IP 头部中的 TTL 字段,默认是 1 ,所以意味着默认情况下,LDP 的邻居只能在直接相连的 2 个设备之间建立。
- 如果以后想要在没有直接相连的设备之间建立 LDP 的邻居关系,那么就只能采用 target hello 报文的方式【 后续介绍非直连设备建立 LDP邻居表 】
- 在 LDP 的hello 报文中,包含了以下几个重要的字段信息:
- lsr-id ,即表示发送这个 LDP hello 报文的那个设备的 LSR-ID
- Hold-time ,默认取值是 15 s ,表示:如果在 15 S 内没有收到对方发送的 LDP hello 报文,就默认该邻居关系断开了
- transport-address :该字段默认情况下,等于 LSR-ID .该字段非常重要,因为是要使用该字段表示的 IP 地址进行后续的 LDP 邻居之间的 TCP 回话的建立,为的是实现 LDP " 标签绑定信息 " 的传输,从而在设备之间形成“ 标签绑定信息 ” 数据库,最终形成“ 标签转发表 ”
所以,经过上面的报文分析,我们简单的总结了以下“影响 LDP 邻居建立 ”的因素:
- 设备之间的互联接口的 IP 地址,必须互通
- 设备之间的 UDP 646 的报文,不能被策略/防火墙干掉
- 确保设备之间的 LSR-ID 不能相同
- 确保设备之间的 LDP 的认证,必须成功
但是,需要注意的是;
即使报文中的 tansport-addrss 是无效的,或者是 两个 transport 地址是相同的,都不
会影响到 LDP 邻居表的建立。因为 LDP 邻居建立,使用的是 UDP 报文;
而这个transport 地址,是用来建立后续使用的 TCP 连接的;两者互不相干。
如果想要查看一个设备上的所有的启用了 MPLS 的接口,可以使用命令:
<R3>display mpls interface
Interface Status TE Attr LSP Count CRLSP Count Effective MTU
GE0/0/0 Up Dis 4 0 1500
GE0/0/1 Up Dis 2 0 1500
如果想要查看一个设备上的所有启用了 LDP 的接口,可以使用命令:
<R3>display mpls ldp interface
LDP Interface Information in Public Network
Codes:LAM(Label Advertisement Mode), IFName(Interface name)
A '*' before an interface means the entity is being deleted.
------------------------------------------------------------------------------
IFName Status LAM TransportAddress HelloSent/Rcv
------------------------------------------------------------------------------
GE0/0/0 Active DU 10.10.3.3 2175/2159
GE0/0/1 Active DU 10.10.3.3 2174/2168
--------------------------------------------------
如果查看一个设备上的 LDP 邻居表,可以使用:
<R3>display mpls ldp peer
LDP Peer Information in Public network
A '*' before a peer means the peer is being deleted.
------------------------------------------------------------------------------
PeerID TransportAddress DiscoverySource
------------------------------------------------------------------------------
10.10.2.2:0 10.10.2.2 GigabitEthernet0/0/1
10.10.4.4:0 10.10.4.4 GigabitEthernet0/0/0
------------------------------------------------------------------------------
TOTAL: 2 Peer(s) Found.
如果想要查看 LDP 邻居表中某个特定的邻居设备信息:
<R3>display mpls ldp peer 10.10.4.4
LDP Peer Information in Public network
------------------------------------------------------------------------------
Peer LDP ID : 10.10.4.4:0 # 邻居设备的 LSR-ID
Peer Max PDU Length : 4096 Peer Transport Address : 10.10.4.4 # 传输地址
Peer Loop Detection : Off Peer Path Vector Limit : ----
Peer FT Flag : Off Peer Keepalive Timer : 45 Sec # 后续 TCP 连接最大的存 活时间
Recovery Timer : ---- Reconnect Timer : ----
Peer Type : Local # 邻居的类型是“ 本地 ” ,即设备之间是通过组播的 hello 报 文,建立的邻居关系
Peer Label Advertisement Mode : Downstream Unsolicited # 邻居标签的分配模式
Peer Discovery Source : GigabitEthernet0/0/0 # 表示建立邻居的时候,所使用的端口
Peer Deletion Status : No
Capability-Announcement : Off
Peer P2MP Capability : Off
---------------------------------------
如果要查看一个设备上的某接口的 LDP 的详细信息
<R3>display mpls ldp interface GigabitEthernet 0/0/1
LDP Interface Information
------------------------------------------------------------------------------
Interface Name : GigabitEthernet0/0/1
LDP ID : 10.10.3.3:0 Transport Address : 10.10.3.3 # 默认的关于 LSR-ID
Entity Status : Active Effective MTU : 1500
Configured Hello Hold Timer : 15 Sec # 本地接口上配置的 邻居的 hold 时间,默认是 15S
Negotiated Hello Hold Timer : 15 Sec # 两个设备之间协商出来的 hold 时间,取值最小
Configured Hello Send Timer : ---
Configured Keepalive Hold Timer : 45 Sec # 设备之间配置 TCP 连接的存活时间
Configured Keepalive Send Timer : ---
Configured Delay Timer : 10 Sec
Label Advertisement Mode : Downstream Unsolicited
Hello Message Sent/Rcvd : 2260/2255 (Message Count)
Entity Deletion Status : No
-------------------------------------------------
想要修改一个接口的LCP 的参数:
[R4-GigabitEthernet0/0/0]mpls ldp ?
advertisement Specify Label Advertisement mode # 修改标签的分配模式
frr Fast reroute configuration # 配置 LDP 的 FRR 特性
timer LDP Timer value # 修改 LDP 的计时器
transport-address Specify Session Transport Address In TCP Connection # 修改 LDP 的 传输地址
<cr> Please press ENTER to execute command # 在该端口上启用 LDP 协议
- 同步 LDP 数据库
在 LDP 的数据库中,包含的是 “ 标签 ” 和 “ 路由条目 ” 的绑定信息,或者叫 “ 对应关系 ”
- 上游和下游的概念的区分:是按照“ 数据包 ” 的传输方向来确定的,源端叫上游,目标端叫下游
-
这些“ 标签绑定信息 ” 分为两部分:
-
自己产生的
-
从邻居学习过来
-
而最终的 LSR 用来转发数据,所用的 “ 标签转发表 ” 的条目,全部都来自与 “ LDP 数据库 ” 。所以说,LDP 数据库中的条目,非常重要。当一个 LSR 从其他的 LSR 学习/ 接收 这些 “ 标签绑定信息 ” 的时候,这个过程必须是稳定的,不能丢包,
-
所以,在 LDP 协议中,为了实现“ 标签绑定信息 ” 的可靠传输,我们使用的方法是 :底层传输协议,使用 TCP
-
在上个阶段中 ,;LSR 之间,通过 hello 报文,建立 LDP 邻居关系的时候,在 hello 报文中,包含了一个重要的地址 : transport-address ,该地址就是专门用来建立此处的 LDP TCP连接的。
-
该地址默认情况下等于 LSR-ID ,所以之前提刀 : LSR 的 LSR-ID 必须是一个非常稳定的,并且设备直接可以互相访问的接口,通常是 loopback
-
在建立 TCP 连接 ( 回话/ session ) 的时候,都存在 “ 主动连接 ” 和 “ 被动连接 ” 的说法,在 LDP 的 TCP 回话中,主动发起 TCP 连接的一方,永远是 transport-address 大的一方,那么最终 TCP 的连接时:
-
大的 transport-address -随机端口-----》 小的 transport-address :646
-
-
<R4>display mpls ldp session
LDP Session(s) in Public Network
Codes: LAM(Label Advertisement Mode), SsnAge Unit(DDDD:HH:MM)
A '*' before a session means the session is being deleted.
------------------------------------------------------------------------------
PeerID Status L AM SsnRole SsnAge KASent/Rcv
------------------------------------------------------------------------------
10.10.3.3:0 Operational DU Active 0000:02:14 539/539
10.10.5.5:0 Operational DU Passive 0000:02:14 537/537
------------------------------------------------------------------------------
TOTAL: 2 session(s) Found.-
<R4>display mpls ldp session verbose # 查看回话的详细信息
LDP Session(s) in Public Network
------------------------------------------------------------------------------
Peer LDP ID : 10.10.3.3:0 Local LDP ID : 10.10.4.4:0
TCP Connection : 10.10.4.4 -> 10.10.3.3
Session State : Operational Session Role : Active
Session FT Flag : Off MD5 Flag : Off
Reconnect Timer : --- Recovery Timer : ---
Keychain Name : ---Negotiated Keepalive Hold Timer : 45 Sec # TCP 连接的最大保持时间是 45s 每15 S 发送一次keepalive 报文
Configured Keepalive Send Timer : ---
Keepalive Message Sent/Rcvd : 546/545 (Message Count) #设备之间发送 和接收 keepalive 报文的数量
Label Advertisement Mode : Downstream Unsolicited
Label Resource Status(Peer/Local) : Available/Available
Session Age : 0000:02:16 (DDDD:HH:MM) # 当前 TCP 连接建立的时间
Session Deletion Status : NoCapability:
Capability-Announcement : Off
P2MP Capability : OffOutbound&Inbound Policies applied : NULL
Addresses received from peer: (Count: 3) # 以下这些地址是属于邻居设备 ---lsr-id : 10.10.3.3
10.10.3.3 192.168.23.3 192.168.34.3
------------------------------------------------------------------------------<R4>
-
-
<R4>display tcp status 查看设备上,所有的 TCP 连接的状态
TCPCB Tid/Soid Local Add:port Foreign Add:port VPNID State
b4aceaa8 6 /1 0.0.0.0:23 0.0.0.0:0 23553 Listening
b4acf894 167/6 10.10.4.4:646 10.10.5.5:51065 0 Establishedb4acf4c8 167/3 10.10.4.4:49258 10.10.3.3:646 0 Established
<R4>
-
建立了稳定的 TCP 连接/会话之后,设备之间就开始传输“ 自己的标签绑定信息 ” 了,进行互相分享,所以,我们接下来需要研究的是:
-
每个 LSR 如何分配/产生标签?【 label advertise ( 发布 ) mode 】
-
DU ( downstrem unsolicated ): 下游自主模式,即只要本地设备有路由骂自己就会 通过 LDP 协议为其分配一个标签。
-
DOD (downstrem on demand ):下游按需分配,即只有当 “ 上游设备 ”需要这个标签的时候,当前设备才会为路由产生一个标签;我们要清楚的时候:什么时候“ 上游设备 ” 才会需要一个标签呢?
-
当这个设备将要转发数据包的时候,才会使用到标签。发现自己没有,所以就像下游设备请求。
-
-
-
如何传输标签?【 label distribution control ( 传输 ) mode 】
-
独立的“ 分配控制 ”方式:即只要自己本地为路由分配了标签,就会立刻传输给自己的 LDP 会话的对端设备( 同时包含上游和下游设备 )
-
有序的“ 分配控制 ”方式:即只有收到了 下游 LSR 设备发送的关于某个 FEC 的标签信息后,自己才会将这个 FEC 的标签信息继续转发给上游设备
-
-
如何保留标签?
-
自由保留
-
表示从任何一个 LSR 对等体发送过来的标签绑定信息,都会保存在自己的标签数据库中,这种保留方式,会在 LSR 中占用了更多的内存空间。
-
但是如果网络拓扑发生了变化,导致下一跳 IP 转发设备发生了变化,那么当前的 LSR 可以快速的在标签数据库中选择一个去往目标 地址的备份的最好的标签路径,快速的解决了标签数据转发路径的故障。
-
-
保守保留
-
表示仅仅接收“ 该路由在路由表中”的下一跳 IP 地址所发送过来的标签绑定信息,即仅仅保留从该路由的“ 下游 LSR ” 所发送过来的 标签绑定信息。
-
这种保留方式下的标签数据库,在面对“ 下一跳 IP 转发设备变化 ” 的情况,需要自己重新计算一个新的 “ 下游 LSR ”,这个过程就有点长,导致故障恢复的比较慢。
-
-
-
如何选择标签?
-
该过程,指的是,针对任何一个 FEC / 路由条目,在 LDP 的标签数据库中,选择一个最好的标签,放入到 LSR 的核心转发表---. 标签转发表(display mpls lsp )
-
所谓的最好的标签,是来自于: 该 FEC / 路由条目在路由表中的 下一跳 IP 地址,所发送过来的标签信息;即就是那些 “ 下游 LSR ”发送过来的标签绑定信息。
-
<R4>display mpls lsp
-------------------------------------------------------------------------------
LSP Information: LDP LSP # 表示下面的 ( LSP)条目都是 LDP 协议产生
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.10.4.4/32 3/NULL -/-
10.10.2.2/32 NULL/1024 -/GE0/0/1
10.10.2.2/32 1024/1024 -/GE0/0/1
10.10.3.3/32 NULL/3 -/GE0/0/1
10.10.3.3/32 1025/3 -/GE0/0/1
10.10.5.5/32 NULL/3 -/GE0/0/0
10.10.5.5/32 1026/3 -/GE0/0/0
<R4>
-
-
-
- 计算 LDP 标签转发表
- LDP 的标签转发表,就是 LSR 的核心转发表,收到标签数据包以后,都是直接来查看这个表的:
-
<R4>display mpls lsp
-------------------------------------------------------------------------------
LSP Information: LDP LSP#表示下面的 ( LSP)条目都是 LDP 协议产生
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.10.4.4/32 3/NULL -/-
10.10.2.2/32 NULL/1024 -/GE0/0/1
10.10.2.2/32 1024/1024 -/GE0/0/1
10.10.3.3/32 NULL/3 -/GE0/0/1
10.10.3.3/32 1025/3 -/GE0/0/1
10.10.5.5/32 NULL/3 -/GE0/0/0
10.10.5.5/32 1026/3 -/GE0/0/0
<R4>
-
<R4>display mpls lsp
- 上述的显示信息,是 R4 的标签转发表中的每个 LSP 条目的“ 简要信息 ”
- 此处的 LSP ,指的是: label switch path ,标签转发路径,即:标签数据张过程中所经过的路径。这个表中的每一个 LSP 条目,都是由于 LDP 协议产生的。
-
FEC:forwarding equal class ,转发等价类。即按照同一个路由条目转发的所有数据包,归为一类,称之为 FEC.
- 从我们工程师应用和配置的角度来说,我们所关注的就是“ 这一类的数据包 ” 的路由,所以我们通常将 FEC 就看做是一个“ 路由条目 ”。
- 但是,在华为官方文档中,FEC 是可以按照很多元素进行分类的:源地址、目标地址、源端口、目标端口、VPN 等要素进行划分
- 同时我们也发现了,在 LSR 的标签转发表中,所有的 FEC 都是 /32 的主机路由,没有其他的掩码的路由条目。这是因为:在华为设备上 ,LDP 分配标签的时候,只为 /32 的主机路由分配标签。
- 所以,我们以后在配置 MPLS 的时候,所有使用的 Loopback 的掩码,都强烈建议设置为 / 32.
-
In Label :表示的是入标签。
- 即:当前这个设备为前面的这个 FEC ,所分配的标签信息;
- 当接收数据包的时候:要将标签数据包的标签提取出来,在标签转发表中的所有“ in label ”中进行查找,如果有相同的,则按照该条目的后续的 “ out label ” ,进行标签交换,然后转发出去
- 如果没有相同的 in label ,则直接丢弃
-
Out Label:表示的是出标签.
- 即:这个标签是由前面的这个 FEC ,在本地路由表中的下一跳转发设备所产生的,即下游设备产生的
- 当发送数据包的时候:如果按照某个条目要转发出去,那么出去的时候,该数据包所需要的携带的标签是什么。
-
Label Operation:针对标签的操作:
- PUSH:压入。指的是在边缘的LSR 上将 IP 数据包,添加一个 MPLS 标签,变成标签数据包
- SWAP:交换:指的是传输LSR,将受到的标签数据包的标签,更换成另外一个,然后发送出去;
- POP:弹出。指的是 LSR ,将当前数据包中的顶层标签,弹掉,继续向后面的设备转发
- Null:干掉。指的是,当前 LSR,将标签数据包的所有标签,全部干掉,变成IP 数据包;
- 而上述的这些“ 标签操作行为 ”,体现在标签转发表中是通过 in label/ out lebel 之间的数值变化体现出来的:不同的标签组合,表示不同的标签动作
- Label 的取值:在 MPLS 头部中 ( 32 bit ),仅仅有 20 BIT 表示 Label
- 0-15:系统保留标签;每个标签都有一定的特定的含义;
- 标签 0.
- 表示“ 显示的空标签 ”,即华为设备会为自己本地的之类的 /32 主机路由,分配一个 标签 0 ,那么其他设备在收到这样的标签绑定信息之后,就会进行普通的“ 标签交换 ” 行为,然后将其他标签变成 0。
- 然后发送给最终的目标设备,该设备首先查找标签转发表,然后弹掉标签,变成 IP 数据包,然后再次查找 IP 路由表,最终确定数据包的出端口,转发出去,从而针对任何一个数据包,都要查 2 次表,效率低。
- 标签 3
- 表示“ 隐式的空标签 ”,即华为设备运行 LDP 后,默认情况下,会为自己的本地的直连的 /32 主机路由,分配标签 3,其他设备在收到一个标签 3 “ 标签绑定信息 ”之后,后续转发数据包的时候,就会在数据包达到最终目的之前设备之前的那个路由器上,提前将标签弹掉。从而节省最后一个目标设备上“ 查表 ” 的次数,提升效率
- 标签2
- 真的是 IPV6 的数据包的“ 显示空标签 ”
- 标签 0.
- 16-1023:
- 静态的 LSP
- 1024以及以上:
-
动态 LSP ,此时我们要知道的是:能够产生标签的协议,
- 不仅仅只有LDP,还有 MP-BGP, RSVP-TE.
-
动态 LSP ,此时我们要知道的是:能够产生标签的协议,
- 0-15:系统保留标签;每个标签都有一定的特定的含义;
- 另外,针对 标签,我们需要知道的是:
- 任何一个 LSR 所使用的标签空间都是相同的,即 2 的 20 次方;所以有可能我们会发现:不用的 LSR 针对同一个路由,所分配的标签的数值,是相同的
- 一个标签的作用范围,仅仅是建立了 LDP 会话的两个设备之间。
-
In/Out If:表示的是标签数据包的入端口和出端口
-
In If:
- 表示的是 incoming interface ,即入端口,通常都是 - ,表示不关心入端口到底是什么
-
Out If:
- 表示的是 outgoing interface ,即出端口,通常有两种取值
-
- , 表示没有明确的出端口
- 如果当前的数据包依然是由标签的,并且还没有明确的出口,则直接丢弃这个数据包
- 如果当前的数据包的标签已经被弹掉了,没标签。并且还没有明确的出口,则直接查看 IP 路由表
- gi0/0/x ,表一个具体的端口,数据包应该从这歌端口上转发出去
-
- , 表示没有明确的出端口
- 表示的是 outgoing interface ,即出端口,通常有两种取值
-
VRF:virtual routing forwarding ,表示的是虚拟路由表
- 该字段的取值通常是两种
- 空
- 表示如果需要查找路由表的话,那么就查找这歌设备上的大路由表:display ip routin-table
- 非空
- 那么此时应该是一个名字,比如 ABC,那么此时在查找路由表的时候,就要查找这个虚拟路由器 ABC 的路由表了: display ip routing-table vpn-instance ABC
- 空
- 该字段的取值通常是两种
-
In If:
-
FEC:forwarding equal class ,转发等价类。即按照同一个路由条目转发的所有数据包,归为一类,称之为 FEC.
- LDP 的标签转发表,就是 LSR 的核心转发表,收到标签数据包以后,都是直接来查看这个表的:
-
案例:认识 LDP 的基本配置
- 拓扑如下:
需求
- 在 AS 200 中,仅仅在 R2和 R5 之间,建立 IBGP 邻居关系,其他路由器没有 BGP
- 在 AS 200 中,运行 MPLS
- 确保 R1 和 R6 的回环口互通
思路
- 在 AS 200 的 每个路由器上,全局开启 MPLS 功能
- 在 AS 200 的每个路由器上 ,全局开启 LDP 功能
- 在 AS 200 内的每个路由器之间的接口上,开启 MPLS 和 LDP 功能
配置
[R2]mpls lsr-id 10.10.2.2 # 该 lsr-id 不是随便写的,必须是一个真是稳定的接口 IP 地址,并且 这个地址必须得宣告进入到 OPSF 协议才可以
[R2]mpls # 全局开启 MPLS
[R2]quit
[R2]mpls ldp # 全局开启 LDP
[R2-mpls-ldp]quit
[R2-GigabitEthernet0/0/0]mpls # 进入接口开启 MPLS 和 LDP功能
[R2-GigabitEthernet0/0/0]mpls ldp
[R2-GigabitEthernet0/0/0]quit
[R2]route recursive-lookup tunnel
R3
[R3]mpls lsr-id 10.10.3.3 # 该 lsr-id 不是随便写的,必须是一个真是稳定的接口 IP 地址,并且 这个地址必须得宣告进入到 OPSF 协议才可以
[R3]mpls # 全局开启 MPLS
[R3]quit
[R3]mpls ldp # 全局开启 LDP
[R3]mpls-ldp]quit
[R3-GigabitEthernet0/0/0]mpls # 进入接口开启 MPLS 和 LDP功能
[R3-GigabitEthernet0/0/0]mpls ldp
[R3-GigabitEthernet0/0/0]quit
[R3-GigabitEthernet0/0/1]mpls # 进入接口开启 MPLS 和 LDP功能
[R3-GigabitEthernet0/0/1]mpls ldp
[R3-GigabitEthernet0/0/1]quit
R4
[R4]mpls lsr-id 10.10.4.4 # 该 lsr-id 不是随便写的,必须是一个真是稳定的接口 IP 地址,并且 这个地址必须得宣告进入到 OPSF 协议才可以
[R4]mpls # 全局开启 MPLS
[R4]quit
[R4]mpls ldp # 全局开启 LDP
[R4]mpls-ldp]quit
[R4-GigabitEthernet0/0/0]mpls # 进入接口开启 MPLS 和 LDP功能
[R4-GigabitEthernet0/0/0]mpls ldp
[R4-GigabitEthernet0/0/0]quit
[R4-GigabitEthernet0/0/1]mpls # 进入接口开启 MPLS 和 LDP功能
[R4-GigabitEthernet0/0/1]mpls ldp
[R4-GigabitEthernet0/0/1]quit
R5
[R5]mpls lsr-id 10.10.5.5 # 该 lsr-id 不是随便写的,必须是一个真是稳定的接口 IP 地址,并且 这个地址必须得宣告进入到 OPSF 协议才可以
[R5]mpls # 全局开启 MPLS
[R5]quit
[R5]mpls ldp # 全局开启 LDP
[R5-mpls-ldp]quit
[R5-GigabitEthernet0/0/0]mpls # 进入接口开启 MPLS 和 LDP功能
[R5-GigabitEthernet0/0/0]mpls ldp
[R5-GigabitEthernet0/0/0]quit
[R5]route recursive-lookup tunnel R2/R5 必须配置的命令
查看 LSR 设备上的核心“ 标签转发表”
<R3>display mpls lsp
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.10.2.2/32 NULL/3 -/GE0/0/1
10.10.2.2/32 1024/3 -/GE0/0/1
10.10.3.3/32 3/NULL -/-
10.10.4.4/32 NULL/3 -/GE0/0/0
10.10.4.4/32 1025/3 -/GE0/0/0
10.10.5.5/32 NULL/1026 -/GE0/0/0
10.10.5.5/32 1026/1026 -/GE0/0/0
分析数据转发: R1 ---> R6
1、R1 是一个传统的 IP 路由器,所以转发数据包,依靠的是 IP 路由表,所以:
<R1>display ip routing-table 10.10.6.6
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.10.6.6/32 EBGP 255 0 D 192.168.12.2 GigabitEthernet0/0/0
<R1>display ip routing-table 10.10.6.6 verbose
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination: 10.10.6.6/32
Protocol: EBGP Process ID: 0
Preference: 255 Cost: 0
NextHop: 192.168.12.2 Neighbour: 192.168.12.2
State: Active Adv Age: 00h40m44s
Tag: 0 Priority: low
Label: NULL QoSInfo: 0x0
IndirectID: 0x1
RelayNextHop: 0.0.0.0 Interface: GigabitEthernet0/0/0
TunnelID: 0x0 Flags: D
在上述 显示的信息中,因为该路由条目的 tunnel ID 为 0x0,所以,数据包直接在结构 gi0/0/0 转发出去,不使用任何的标签
【 rib = routing information base ,路由信息表,就是平时的路由表 】
在设备上查看命令是:display ip routing-table
【 FIB = forwarding information base :转发信息表】
在设备上查看命令是:display fib
FIB 表的内容,其实就是 FIB 中的每个路由条目的“ 镜像 ”,但是解决了 RIB中的递归查询,更快了。
FIB 技术还产生了另外一个表,叫做FIB 邻接表,其内容是 ARP镜像,包含了从某个指定端口转发数据时,所使用的" 完整的MAC 地址头部 " 信息,所以通过 FIB 技术转发数据,就不需要额外的进行 ARP 请求了,所以通过 FIB 转发数据,比 RIB ,又快了
2、R2 在接口 gi0/0/1 上接收到一个数据包:
首先需要判断该数据包,到底是 IP 数据包,还是标签数据包;
原则:查看该数据包的 2 层头部中的 type 字段;
type 为 0x0800,表示后面的数据包是 IP 数据包
type 为 0x8847 ,表示后面的数据包标签数据包
基于数据包的类型,查看不同的 ” 核心转发表 “
如果是 IP 数据包,则查看 FIB 表 ( display fib )
如果是 标签数据包,则查看标签转发表 ( display mpls lsp )
此时 R2 收到的是 R1 发送过来的 IP 数据包,所以,结果如下:
<R2>display fib 10.10.6.6
Route Entry Count: 1
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
10.10.6.6/32 192.168.23.3 DGHU t[1663] GE0/0/0 0xf
<R2>
以上的显示信息中,必须关注 : tunnel ID 字段
如果是 0 ,则从改条码关联的接口中发送出去,比如此处的: interface= ge0/0/0;
如果不是 0 ,则需要继续查看该设备上的 MPLS 标签转发表中的条目:
每个条目,都是一个标签转发路径,也称之为“ 标签隧道 ”
每个“ 标签隧道 ” ,都对应着一个“ 隧道 ID ”,但是这个名字在 MPLS 标签转发表 中,称之为 “ Token ”,我们需要找到的就是那个“ Tunnel ID ” 和“ Token ”字段的取值, 相同的“ 标签转发条目 ”
<R2>display mpls lsp verbose
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
No : 6
VrfIndex :
Fec : 10.10.5.5/32
Nexthop : 192.168.23.3
In-Label : NULL
Out-Label : 1029 # 数据包出去的时候,需要携带着的标签
In-Interface : ----------
Out-Interface : GigabitEthernet0/0/0 # 数据包的出接口时 gi0/0/0
LspIndex : 6149
Token : 0xf # 该字段要和 FIB 中的 Tunnel ID ,相同
FrrToken : 0x0
LsrType : Ingress # 当前值这个 LSR 的类型是“ 入向 LSR ” ,即 IP 数据包通过该设 备,正式进入到 MPLS 标签转发网路
Outgoing token : 0x0
Label Operation : PUSH # 标签的操作,称之为“ 压入 ,即讲一个 IP 数据包,标成一个标 签数据包
Mpls-Mtu : 1500
TimeStamp : 6084sec
Bfd-State : ---
BGPKey : ------
所以。此时从 gi0/0/0 转发出去的数据包应该是这个样子的:
2层头部:( 源 MAC ----目标 MAC --type :0x8847)
MPLS 头部: 1029, 0 , 1 254
IP 头部: 10.10.1.1-----》 10.10.6.6
3、 R3 在 g0/0/1 接口上收到以上的数据包,通过分析其中的type 字段,判断该数据包为标签数据包,所以,R3 查看自己的MPLS 标签转发表,命令如下:
[R3]display mpls lsp
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.10.2.2/32 NULL/3 -/GE0/0/1
10.10.2.2/32 1027/3 -/GE0/0/1
10.10.3.3/32 3/NULL -/-
10.10.4.4/32 NULL/3 -/GE0/0/0
10.10.4.4/32 1028/3 -/GE0/0/0
10.10.5.5/32 NULL/1026 -/GE0/0/0
10.10.5.5/32 1029/1026 -/GE0/0/0
通过以上的信息可知:
进来的数据包的标签,去匹配表中的条目“ 如标签 ”= 1029,对应这个“ 出标签 ” 的动作是 1026,这个对标签的处理动作,称之为“ 标签交换 ”--wap
并且,该条目指明了数据包的出接口时 gi0/0/0
所以,此时从gi0/0/0 转发出去的数据包,因该是这样子的
MPLS 头部: 1026, 0 , 1 253
IP 头部: 10.10.1.1-----》 10.10.6.6
4、R4在 gi0/0/0接口上收到以上的数据包,同分析其中的type 字段,判断该数据包为标签数据包,所以,R4在查看自己的 MPLS 标签转发表,命令如下:
<R4>display mpls lsp
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.10.4.4/32 3/NULL -/-
10.10.2.2/32 NULL/1027 -/GE0/0/1
10.10.2.2/32 1028/1027 -/GE0/0/1
10.10.3.3/32 NULL/3 -/GE0/0/1
10.10.3.3/32 1029/3 -/GE0/0/1
10.10.5.5/32 NULL/3 -/GE0/0/0
10.10.5.5/32 1026/3 -/GE0/0/0
通过以上信息可知:
进来的数据包的标签,去匹配表中的条目“ 入标签 ” 1026,对应的“ 出标签 ” 的动作是 3,这个标签的处理动作,称之为“ 标签交换 ”--wap ,并且
该条指明了数据包的出接口时= gi0/0/0.但是,此时的标签“ 3 ”是一个特殊的“ 系统保留标签 ”改标签表示不仅仅是“ 数值3 ”,它有一定的系统含义:将刚才的标签弹掉。
即将“ 收到的数据包所携带的标签中的最顶层的标签----1026 ” 弹掉【该场景下,数据包没有跟多的标签,所以顶层的标签就是此时的 1026】
所以此时从g0/0/0 转发出去的数据包,应该是 “ 一个 IP 数据包 ”:
2 层头部:(源 MAC---目标 MAC-type :0x8847)
IP 层头部: 10.10.1.1 -----> 10.10.6.6
5、 R5 在接收到一个 IP 数据包以后,就直接查看自己的 FIB 表
<R5>display fib 10.10.6.6
Route Entry Count: 1
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
10.10.6.6/32 192.168.56.6 DGHU t[1645] GE0/0/0 0x0
通过以上信息可知:数据包从 gi0/0/0 出去,发送给下一跳的 IP 地址 192.168.56.6,因为
Tunnel ID 是0x0,所以 :该数据包是不用标签的。
6、接收到了目标 IP 地址为自己的数据包,然后开始返回一个数据包给 10.10.1.1 。
<R6>display ip routing-table 10.10.1.1
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.10.1.1/32 EBGP 255 0 D 192.168.56.5 GigabitEthernet
0/0/1
<R6>
<R5>display fib 10.10.1.1
Route Entry Count: 1
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
10.10.1.1/32 192.168.45.4 DGHU t[9801] GE0/0/1 0x9
<R5>display mpls lsp verbose
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
No : 1
VrfIndex :
Fec : 10.10.2.2/32
Nexthop : 192.168.45.4
In-Label : NULL
Out-Label : 1028
In-Interface : ----------
Out-Interface : GigabitEthernet0/0/1
LspIndex : 6144
Token : 0x9
FrrToken : 0x0
LsrType : Ingress
Outgoing token : 0x0
Label Operation : PUSH
Mpls-Mtu : 1500
TimeStamp : 1367sec
Bfd-State : ---
BGPKey : ------
<R4>display mpls lsp
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.10.4.4/32 3/NULL -/-
10.10.2.2/32 NULL/1027 -/GE0/0/1
10.10.2.2/32 1028/1027 -/GE0/0/1
10.10.3.3/32 NULL/3 -/GE0/0/1
10.10.3.3/32 1029/3 -/GE0/0/1
10.10.5.5/32 NULL/3 -/GE0/0/0
10.10.5.5/32 1026/3 -/GE0/0/0
<R3>display mpls lsp
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.10.2.2/32 NULL/3 -/GE0/0/1
10.10.2.2/32 1027/3 -/GE0/0/1
10.10.3.3/32 3/NULL -/-
10.10.4.4/32 NULL/3 -/GE0/0/0
10.10.4.4/32 1028/3 -/GE0/0/0
10.10.5.5/32 NULL/1026 -/GE0/0/0
10.10.5.5/32 1029/1026 -/GE0/0/0
<R2>display mpls lsp
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.10.3.3/32 NULL/3 -/GE0/0/0
10.10.3.3/32 1027/3 -/GE0/0/0
10.10.4.4/32 NULL/1028 -/GE0/0/0
10.10.4.4/32 1030/1028 -/GE0/0/0
10.10.5.5/32 NULL/1029 -/GE0/0/0
10.10.5.5/32 1031/1029 -/GE0/0/0
10.10.2.2/32 3/NULL -/-
<R2>
Route Entry Count: 1
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
10.10.1.1/32 192.168.12.1 DGHU t[9313] GE0/0/1 0x0
<R2>display ip routing-table 10.10.1.1 verbose
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination: 10.10.1.1/32
Protocol: EBGP Process ID: 0
Preference: 255 Cost: 0
NextHop: 192.168.12.1 Neighbour: 192.168.12.1
State: Active Adv Age: 00h36m57s
Tag: 0 Priority: low
Label: NULL QoSInfo: 0x0
IndirectID: 0x7
RelayNextHop: 0.0.0.0 Interface: GigabitEthernet0/0/1
TunnelID: 0x0 Flags: D
<R2>
<R2>display ip routing-table 10.10.1.1
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface文章来源:https://www.toymoban.com/news/detail-494395.html
10.10.1.1/32 EBGP 255 0 D 192.168.12.1 GigabitEthernet
0/0/1文章来源地址https://www.toymoban.com/news/detail-494395.html
到了这里,关于HCIE - 2204-MPLS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!