最近都比较忙,好久没有更新了。前面文章学习了LDP的一些基本概念,今天来学习一下LDP的基本工作原理。LDP的工作原理主要分为会话建立、标签分发、标签保持与维护等过程管理。今天先来了解LDP的会话建立过程与状态变化。
一、LDP会话建立
LDP(标签分发协议)是一种用于在MPLS网络中分发标签信息的协议。LDP会话状态机描述了LDP会话的建立、维护和拆除过程。以下是LDP的工作原理与状态变化的详细描述:
LDP使用五种状态来描述LDP会话状态机:Non-Existent、Initialized、OpenRec、OpenSent、Operational。
1.1 Non-Existent状态
描述:LDP会话的初始状态。在此状态下,双方发送HELLO消息,选举主动方。在收到TCP连接建立成功的消息后变为Initialized状态。
动作:发送HELLO消息,类似于OSPF的hello包,先进行邻居发现,确定主动方和被动方。
1.2 Initialized状态
描述:该状态下分为主动方和被动方两种情况。主动方将主动发送Initialization消息,转向OpenSent状态,等待回应的Initialization消息;被动方在此状态下收到主动方发给自己的Initialization消息,如果收到的Initialization消息的参数可以接受,则发送Initialization和KeepAlive消息转向OpenRec状态。如果收到的Initialization消息参数不能接受或Initialization消息超时则转向Non-Existent状态。
动作:主动方发送Initialization消息;被动方发送Initialization和KeepAlive消息。
1.3 OpenSent状态
描述:此状态为主动方发送Initialization消息后的状态。 在此状态下等待被动方回应Initialization消息和KeepAlive消息。如果收到的Initialization消息中的参数可以接受则转向OpenRec状态;如果参数不能接受或Initialization消息超时则转向Non-Existent状态。
动作:等待被动方回应Initialization消息和KeepAlive消息。
1.4 OpenRec状态
描述:在此状态下不管主动方还是被动方都是发出KeepAlive后的状态。 在等待对方回应KeepAlive,只要收到KeepAlive消息就转向Operational状态;如果收到其它消息或KeepAlive超时则转向Non-Existent状态。
动作:发送KeepAlive消息。
1.5 Operational状态
描述:此状态是LDP会话成功建立的标志。 在此状态下可以发送和接收所有其他的LDP消息。在此状态如果KeepAlive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态。
动作:发送和接收所有其他的LDP消息。
二、LDP发现阶段与TCP连接建立
发现阶段:
- 设备通过周期性地发送LDP链路Hello报文(LDP Link Hello),实现LDP基本发现机制。
- LDP链路Hello报文使用UDP报文,目的地址是组播地址224.0.0.2。如果LSR在特定接口接收到LDP链路Hello报文,表明该接口存在LDP邻接体。
TCP连接建立阶段:
- Hello报文中携带传输地址,双方后续将使用传输地址建立LDP会话。
- 传输地址较大的一方作为主动方,主动发起建立TCP连接。
- 经过TCP三次握手之后,两者建立起TCP连接。
简单理解就是路由器在接口通过携带IP地址和端口的hello包发送到组播地址224.0.0.2:646,如果有收到其它路由器的hello包说明有LDP邻居可能存在。双方以IP地址大的为主动方,开始建立TCP三次握手。TCP连接建立成功后状态变更转换为Initialized后。
Non-Existent–>发送hello包–>TCP连接–>Initialized
三、LDP会话建立 - 会话建立与保持
- TCP连接建立成功后,主动方R2(传输地址大的一方)发送LDP初始化报文,协商建立LDP会话的相关参数。
- LDP会话的相关参数包括LDP协议版本、标签分发方式、KeepAlive保持定时器的值、最大PDU长度和标签空间等。
- 被动方R1收到初始化报文后,若接受R2的相关参数,则回应KeepAlive报文作为确认,为了提高发送效率同时发送自己的初始化报文Initialization消息。
- R2收到R1的初始化报文后,若接受相关参数,则回复KeepAlive报文给R1。
- 双方都收到对端的KeepAlive报文后,会话建立成功。后续通过周期性发送的KeepAlive报文
在上面TCP连接建立成功,状态转换为Initialized后,主动方发送初始化Initialization消息,被动方回应KeepAlive报文并附上自己的Initialization消息,主动方收到并回复KeepAlive报文,双方会话建立成功,状态变化为Operational状态。
最后,在此状态如果KeepAlive超时或收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向Non-Existent状态。
四、LSR ID与LDP ID
在前面的文章我们学习了每一台运行了LDP的LSR除了必须配置LSR ID,还必须拥有LDP ID,例如2.2.2.2:0。
这里还有一个TransportAddress表示用来建立TCP连接的地址。缺省情况下,公网的LDP传输地址等于设备的LSR ID,私网的传输地址等于接口的主IP地址。 在接口视图下,使用mpls ldp transport-address
命令,可以修改传输地址。
五、LDP会话状态
通过display mpls ldp session
可以查看LDP会话的状态。
Status:LDP会话的状态;Operational表示LDP会话建立成功;还有如下的状态:
- NonExistent:表示LDP会话的最初状态。在此状态双方互相发送Hello消息,在收到TCP连接建立成功事件的触发后变为Initialized状态。
- Initialized:表示LDP会话处于初始化状态。
- Open Sent:表示LDP会话进入初始化状态后,主动方给被动方发送了Initialized消息,并等待对方的回应。
- Open Recv:表示LDP会话进入初始化状态后,当双方都收到了对方发送的KeepAlive消息后,LDP会话进入Operational状态。
LAM:标签发布模式:
- 标签发布模式有DU和DoD两种模式
- 此例中采用的是DU
SsnRole:LSR在LDP会话中的角色;
- Active表示建立LDP会话的主动方;
- Passive表示建立LDP会话的被动方;
总结:今天主要学习LDP会话建立的几种状态和过程管理。LDP使用五种状态来描述LDP会话状态机:Non-Existent、Initialized、OpenRec、OpenSent、Operational。通过发送hello包、建立TCP连接、会话状态管理实现LDP的管理。