
## MPLS基础
- 使用标签的进行数据转发
- ATM技术是虽然没有成功,但还是
- label大师,吸取了ATM的精华,定义在`2.5层`

- `multi-protocol label switching,多协议标签交换`
- 一种根据`标签`转发的技术
- 可以承载在各种链路层协议上,如ppp、ATM、帧中继、以太网
- 可以承载各种网络层报文,如ipv4、ipv6
- 采用`无连接的控制平面`,实现路由信息的传递和标签的分发(类似于tcp、udp)
- 采用`面向连接的数据平面`。实现报文在建立标签转发路径上传送(有lsp)
**应用场景**
- `vpn`(virtual private network,虚拟专用网)
- `TE`(traffic engineering,流量工程)
- `QOS`(quality of service ,服务质量)
**MPLS VPN应用**
- 基于mpls vpn,将不同私有网络的不同分支联结起来,形成一个统一的网络。网络时延降到最低。
**MPLS TE应用**
- 动态控制网络的流量和网络单元的负载,实时调整管理参数,路由参数和资源约束。优化网络,避免不均的拥塞。
## 网络及体系架构
| 属于 | 备注 |
| ---- | ------------------------------------------------------------ |
| LER | `label edge router,标签边缘路由器,入门弟子`。负责标签的压入和弹出 |
| LSR | l`abel switch router,标签转发路由器,入室弟子`,负责标签的交换 |
| LSP | `label switch path,标签交换路径`,到达同一目的地的地址在mpls网络中经过的路径,lsp是一个单向路径,与数据流方向一致 |
| FEC | `forwarding equivalentclass,转发等价类`,具有相同特征的报文,在转发过程中被lsp以相同的方式处理。fec划分灵活,可以是sip\dip\smac\dmac\protocol-type\vpn等划分的任意组合(公众号:网络技术干货圈) |
**入接点、中间节点和出节点**
- lsp是一个单向节点路径,lsp中的lsr可以分为
| 术语 | 备注 |
| ------------------- | ------------------------------------------------------------ |
| 入节点,`ingress` | lsp的起始节点,一条lsp只能有一个ingress,压入一个新的标签,封装成mpls报文进行转发 |
| 中间节点,`transit` | lsp的中间节点,一条lsp可能有多个transit,,查找标签转发信息表,通过标签交换完成mpls转发 |
| 出节点,`egress` | lsp的为节点,一条只能有一个。弹出标签,恢复原来的io报文进行相应的转发 |
**体系架构**
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJcAYZJU-1594134182474)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200706145622026.png)]](https://img-blog.csdnimg.cn/20200707230613510.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Fyb3Vyb3Vh,size_16,color_FFFFFF,t_70)
**控制平面**
- `产生和维护路由信息以及标签信息`
- 路由信息表(RIB):有ip路由协议生成,用于选择路由
- 标签分发协议(LDP):负责标签的分配、转发信息表的建立、标签交换路径的建立、拆除
- 标签信息表(LIB):由标签分发协议生成,用于管理标签信息。
**数据平面**
- 转发信息表FIB:从RIB提取必要的路由信息生成,负责普通IP报文的转发。
- 标签转发信息表LFIB):简称标签转发表,由标签分发协议建立LFIB,负责带MPLS标签报文的转发。
**转发过程**
- 当收到普通IP报文时,查找FIB表,
- 如果Tunnel ID为0x0,则进行普通IP转发;
- 如果查找FIB表,Tunnel ID为非0x0,则进行MPLS转发。
- 当收到带标签的报文时,查找LFIB表,
- 如果对应的出标签是普通标签,则进行MPLS转发;
- 查找LFIB表,如果对应的出标签是特殊标签,如标签3,则将报文的标签去掉,进行IP转发。
## MPLS报文结构
- routed:被路由,ip、http包
- routing:路由,ospf(ip=89)、bgp(tcp 179)
- 相辅相成

**字段**
| 字段 | 备注 |
| ------------------------- | ---------------------------------------------- |
| `label` | 20bit,用于报文转发 |
| `exp(experimental use)` | 3bit,用于承载ip报文中的优先级(qos) |
| `s (bottom of stack)` | 1bit,栈底,表明是否多个,(标签可以多层嵌套) |
| `TTL` | 8bit,类似于ip头部的ttl,用于防止环路 |
- 标签(label):较短,定长,只偶遇本地有意义,用于标识去往同一目的地址的报文
| 标签空间 | 备注 |
| -------- | ---------------------------------------- |
| 0-15 | 特殊保留标签,如3(隐式空标签,用于PHP) |
| 16-102 | 静态lsp和静态CR-LSP共享标签空间 |
| 1024以上 | LDP、REVP-TE\MP-BGP等动态协议的标签空间 |
**标签多嵌套:`对于一个lsr来说,只处理第一个(最顶层)便签**`
## 标签转发行为
- push、SWAP、POP
**lsp的建立**
- mpls需要为报文实现分配好标签,建立一条lsp,才能进行报文转发
- lsp仅本地有效,lsp和数据流方向一致,lsp和便签分配方向相反
| 方式 | 备注 |
| ---- | ----------------------------------------- |
| 静态 | 同归手动方式为各个FEC分配标签建立转发隧道 |
| 动态 | 通过标签发布协议动态建立转发隧道 |
**静态LSP**
- 适用于结构简单稳定的小心网络
- `上游节点出标签=下游节点入标签`
**动态LSP**
- 标签由下游lsp分配,按下游到上游的方向分发
**转发过程**
- **tunnel id**:为了给使用隧道的上层应用(如vpn、路由管理)提供统一的接口、系统自动为隧道分配了一个id,也成为tunnel id,长度2 bit,只是本地有效。
- **LNHFE** :`next hop label forwarding entry,下一跳标签转发项`
- 用于指导mpls报文的转发
- 包括:tunnel id、出接口、下一跳、出标签、标签操作类型等信息
- fec到一组NHLFE的映射成为FTN(FEC-TO-NHKFE)
- FIB表中tunnel id值不为`0x0`的表项,能够获取FIN的详细信息
- FIN只在lngreess存在
- **ILM**:`incoming label map,入标签映射`
- 入标签到一组下一跳标签转发表项的映射
- 包括:tunnel id、入标签、出标签、标签操作类型等信息
- ILM在transit节点的作用是将标签和NHLFE绑定
- 通过标签索引ILM表,就相当于使用目的的io地址查询FIB,能够得到所有的标签转发信息
## 环路检测机制
| 机制 | 备注 |
| ----------------- | ------------------------------------------------------------ |
| igp环路检测机制 | rip、odpf各自的防环机制 |
| `TTL环路检测机制` | 帧模式的mpls中使用TTL,信元模式的mpls中无TTL,使用ldp环路检测机制 |
| ldp环路检测机制 | 距离向量法,最大跳数法 |
**mpls对TTL的处理模式**
| 术语 | 备注 |
| ------- | ----------------------------------------------------- |
| uniform | mpls TTL 和ip TTL相互同步,中间节点只处理mpls tll |
| pipe | mpls TTL设置为固定值,ip TTL只在入节点和出节点分别减1公众号:网络技术干货圈 |
- pipe可以隐藏mpls ip ttl的内部细节
**TTL环路检测**
- 递减
**LDP环路检测**
| 机制 | 备注 |
| ---------- | ------------------------------------------------------------ |
| 距离向量法 | lsr发送标签请求时添加自己的lsr id,如果收到的lsr发现了袭击的lsr id,丢弃 |
| 最大跳数法 | lsr发送标签请求时,更新hop count,如果到达预设的最大值,丢弃 |
## 静态LSP配置
- vrp没有缺省的lsr id,必须手工配置,保证唯一。推荐使用loopback接口ip,如果要修改lsr id ,必须执行 `undo mpls`(会导致mpls业务中断)
**配置命令**
| 命令 | 备注 |
| ------------------------------------------------------------ | -------------------- |
| `mpls lsr-id` x.x.x.x | 配置lsr id |
| `mpls` | 开启mpls,全局和接口 |
| `static -lsp ingress` lsp1 \ `destination` x.x.x.x xx \ `nethop` x.x.x.x `out-label` xxx \ `static transit` lsp1 | 配置节点静态lsp |
| `static -lsp transit` lsp1 \ `incoming-interface` xxx `int-label` xx \ `nexhop` x.x.x.x `out-label` xxx | 配置中间节点静态lsp |
| `static-lsp egress` lsp1 \ `incoming-interface` g0/0/0 \ `in-label` xxx | 配置出节点静态lsp |
| `dis mpls static-lsp` | 验证今天lsp |
| `ping lsp ip` x.x.x.x xx | 测试静态lsp |
**静态lsp实验**
- 开启出接口需要开启代理arp
- 抓包看包头
## LDP
- 标签的产生
- `label distribution protocol,标签分发协议,RFC5036`
- 在LSR之间建立`LDP session(LDP会话)`
- 建立了LDP session的两台设备称为`LDP PEERS(ldp邻居\对等体)`
**消息类型**
- 封装在UDP或TCP之上,`端口号=646`
| 类型 | 备注 | 协议 |
| --------------- | ------------------------------------------------------------ | ---- |
| `discovery` | 发现,发现、维护邻居(hello) | UDP |
| `session` | 会话,会话的建立、维护、终止(lnitialization、keepalive) | TCP |
| `advertisement` | 宣告,创建、改变、删除fec的标签映射(address、label mapping) | TCP |
| `notification` | 通知,告警和错误消息、。 | TCP |
**LDP发现机制**
| 机制 | 备注 |
| --------------- | ------------------------------------------------------------ |
| LDP基本发现机制 | 发现直连邻居,使用组播,周期性的发送ldp link hello,建立本地ldp会话 |
| LDP扩展发现机制 | 发现非直连邻居,使用单播,周期性的发送ldp target hello,建立远端ldp会话 |
**LDP邻居发现过程**
- hello消息中,携带有`transport address(传输地址)`字段,该字段默认与设备配置的`lsr id 一致`,表明与对端建立邻居关系所使用的ip地址`(保证路由可达)`


## 便签发布和管理
| 术语 | 备注 |
| ---------------- | --------------------- |
| 标签发布方式 | DU\DOC |
| 标签分配控制方式 | odered、independent |
| 标签保持方式 | liberal、conservative |
**上游和下游**
- 针对转发方向而言
**标签发布方式**
- `label advertisement mode`,
| 类型 | 备注 |
| ---- | ------------------------------------------------------------ |
| DU | downstream unsolicited,下游自主。 |
| DOD | distribution on demand,下游按需 |
| PS | 华为思科默认是采用DU,因为topo变化时,可以快速反应为新的topo分发标签 |
**标签分配控制方式**
- `label distribution control mode`,为路由前缀邓培标签的前提条件。标签设备自动随机生成
| 类型 | 备注 |
| ----------- | ------------------------------------------ |
| independent | 独立,lsr可以主动分配,无需等下游标签 |
| ordered | 有序,lsp只有收到下游的标签后才能分配标签 |
| ps | 华为默认使用ordered,cisco默认 independent |
**标签保持模式**
- `label retention mode`如何保留从邻居收到的标签
- **liberal**:自由
- 保留邻居所有的标签,无论自己还是下一跳
- **conservative**:保守
- 只保留来自下一跳邻居的标签
- **PS**:华为和cisco摩尔恩都采用liberal
**组合**
- DU+ORD+LIB,缺省方式
- DOD+ORD+CON
- DU+IND+LIB
- DOD+IND+CON
## PHP
- `倒数第二跳弹出,penultimate hop popping`
- 在最后一条节点,标签没有使用价值,这种情况下,在倒数第二条节点处标记弹出,减少诸侯一跳的负担
**特殊保留标签**
| 标签 | 备注 |
| ----- | ------------------------------------------------------------ |
| 标签3 | 隐式空标签,`implicit-null`,通知倒数第二跳路由移除顶层标签(注意:标签3永远不会出现在mpls报文的标签栈中) |
| 标签0 | 显式空标签,`explicit-null`,通知路由器直接弹出标签 |
| os | 在实施qos是,最后一跳必须携带exp位,因此标签不能被弹出,需要配置显式空标签,此时分配给特定路由器的标签值为0并传递给ldp邻居公众号:网络技术干货圈 |
## LDP命令
LDP配置(华为)
| 命令 | 备注 |
| ------------------------------------------------------------ | ---------------------------------------- |
| mpls lsr-id xxxx | 配置lsr id |
| mpls | 开启mpls,全局和接口 |
| mpls ldp | 开启ldp,全局和接口 |
| mpls ldp remote-peer | 创建亚UNDAU你邻居 |
| remote-ip xxxx | 配置远端邻居ip |
| mpls ldp transport-address interface \ 接口 | 配置传输地址 |
| label advertise explicit-null、implicit-null、non-null | 配置PHP,默认支持PHP |
| mpls ldp advertisement dod、du | 配置标签发布模式,默认为DU |
| undo ttl propagate | 配置mpls ttl的处理模式为pipe模式 |
| lsp-trigger all、host、ip-prefix名称 | 配置LSP触发策略,默认host即 32位主机路由 |
| reset mpls ldp | 重启LDP |
| dis mpls ldp \ dis mpls ldp peer \ dis mpls ldp remote-peer \ dis mpls ldp interface \ dis mpls ldp sesion | 检查命令 |
## 问题
**问题一**
**mpls环境下的bgp路由**
- mpls默认不会为bgp路由分配标签,但是会为bgp路由的下一跳分配标签
- bgp中的路由条目是相当多的,因此通过mpls,可大大简化路由器的性能损耗,bgp的transit AS 的路由黑洞也得到了很好的解决。
**问题二:路由汇总对mpls的影响**
- 路由汇总将原先的LSP分割成两段
- 看似没有问题,但是在LSP环境下就有问题,入 mpls vpn ,TE
**问题三:LDP与IGP同步**
- igp和ldp都认可某条链路为待转发报文的出站链路
- ```
由于LDP的收敛依赖于IGP的收敛,即LDP的收敛速度比IGP的收敛速度慢,
```
存在主备链路汇总的问题
- 主链路故障,lsp流量丢失
- igp正常运行,但主节点ldp会话发生故障,lsp流量丢失
**解决方法**
**开启LDP和IGP同步**
- 原理:预支igp发布正常路由,保证ldp和igp同步完成收敛
- 定义了3个定时器,5个状态
**命令(华为)**
| 命令 | 备注 |
| ----------------------------------- | ---------------- |
| ospf/isis ldp-sync | 接口模式下开启 |
| ospf timer ldp-sync hold-down value | 配置同步保持时间 |
**命令(cisco)**
| 命令 | 配置 |
| -------------------------------- | ------------------ |
| mpls ldp sync | 路由协议模式下开启 |
| no mpls ldp igp synv | 接口模式下单独关闭 |
| mpls ldp igp sync holddown msecs | 配置同步保持时间 |
口模式下开启 |
| ospf timer ldp-sync hold-down value | 配置同步保持时间 |
**命令(cisco)**
| 命令 | 配置 |
| -------------------------------- | ------------------ |
| mpls ldp sync | 路由协议模式下开启 |
| no mpls ldp igp synv | 接口模式下单独关闭 |
| mpls ldp igp sync holddown msecs | 配置同步保持时间 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。