通常,MPLS包头有32Bit,其中有:
20Bit用作标签(Label)范围0~1048575,0~15为系统使用,其中4~15保留。3个Bit的EXP, 协议中没有明确,目前被用于QoS;1个Bit的S,用于标识是否是栈底,S-bit为1标明该标签为栈底。8个Bit的TTL,作用和IP报文头中TTL相同。
通常标签位于链路层帧头和网络层报文之间,称为帧模式。以太网/SONET/SDH分组封装即采用这种格式。在ATM网络中,在链路层封装报文时可以采用帧模式,也可以采用信元模式。信元模式直接用VPI/VCI作为标签。
-----------------------------------------------------------------------------------------------
MPLS 标签栈
当一个链路层协议收到一个MPLS报文后,如何判断这是一个MPLS报文,应该送给MPLS处理,而不是象普通的IP报文那样,直接送给IP层处理?
在PPP中增加了一种新的NCP:MPLSCP,使用0x8281来标识。
在以太网中使用值是0x8847(单播)和0x8848(组播)来表示承载的是MPLS报文(0800是IP报文)。
MPLS分组上可以承载一系列按照“后进先出”方式组织起来的标签,这种结构称做标签栈,从栈顶开始处理标签。
若一个分组的标签栈深度为m,则位于栈底的标签为1级标签,位于栈顶的标签为m级标签。未打标签的分组可看作标签栈为空(即标签栈深度为零)的分组。S-bit 通过0或1来标明下一个头部为MPLS的头部还是IP的头部。
接受MPLS报文的路由器只使用最外层的标签进行转发。
MPLS对TTL的处理有两种方式:一种方式MPLS的TTL值不记入IP的TTL中,即将整个MPLS域看作一跳,IP报文在离开MPLS域时,IP 报文的TTL值减1;一种方式将MPLS的TTL记入到IP的TTL,IP报文在进入到MPLS域时,入口LER在插入标签时将IP的TTL值拷贝到MPLS 的TTL域中,每经过一次标签交换MPLS的TTL值减1,IP的TTL值不变,在出口LER,将MPLS 的TTL值拷贝到IP的TTL域中。
------------------------------------------------------------------------------------------------------
LSP建立方式与信令协议:
MPLS中,Label的分发可以使用流驱动,也可以使用拓扑驱动。
当使用流驱动时,数据流被动态分配标签,LSP Ingress和LSP Egress动态地变化。在MPLS网络的核心,也有LSP的边缘节点。流驱动中,LER不是一个固定的物理设备。
当使用拓扑驱动时,连接只在两个MPLS Domain的边缘节点之间建立,LSP是静态的。拓扑驱动中,MPLS Domain的边缘节点就是LER。
MPLS没有规定建立连接的策略,如何决定建立连接,由各个节点自己决定。
要建立LSP,还必须借助于信令协议,目前被广大厂商所认同也比较成熟的有LDP(Label Distribution Protocol)。在流量工程中会使用CR-LDP,约束路由-LDP协议。此外也有人提出可以在路由协议中进行扩展(如BGP扩展),使其可以携带标签分发的信息,从而达到建立LSP的目的。这里我们介绍在实际中使用最为广泛的LDP协议
LDP标签分发协议:
LDP是 Label Distribution Protocol(即“标记分发协议”)的缩写,是MPLS技术的核心协议之一。LDP协议包括一组用于在LSR之间建立LSP的消息和处理过程。LDP协议通过将网络层的路由信息直接映射到建立在数据链路层的 交换式通道(LSP)上。
LDP协议建立在UDP和TCP之上,使用的端口号为646。LDP协议可以建立两种邻居关系,本地邻居和远程邻居。
LDP4种消息:
1)发现(Discovery)消息,用于通告和维护网络中LSR的存在。
2)会话(Session)消息,用于建立维护和结束LDP对等实体之间的会话连接。
3) 通告(Advertisement)消息,用于创建、改变和删除特定FEC-标记绑定。
4) 通知(Notification)消息,用于提供建议性的消息和差错通知。
发现消息提供了这样一种机制,LSR可以通过周期性地发送HELLO消息表明它在网络中的存在。使用“发向所有路由器”的子网组播地址,HELLO消息将以UDP分组的形式发往LDP端口。当LSR决定要与通过HELLO消息发现的其它LSR建立LDP会话时,LSR将通过TCP端口发起LDP初始化进程。
一旦初始化过程成功结束,两个LSR就成为LDP对等实体,并且可以交换通告消息。本地LSR可以自行决定何时发送标记请求或标记映射消息。通常,当LSR需要标记的时候,LSR就可以向LDP对等实体发送标记请求消息;当LSR希望LDP对等实体使用某一标记的时候,LSR就可以向LDP对等实体发送标记映射消息。
为了保证LDP正确操作,需要可靠并有序的消息传输,因此LDP使用TCP协议来传送会话、通告和通知消息,实际上,只有发现消息是使用UDP协议来传送的。
---------------------------------------------------------------------------------------
两个LSR之间交换LDP Hello消息将触发LDP会话建立过程。 下面简要介绍LDP会话的建立和维护。以LSR1和LSR2为例来说明会话的建立和维护。
1、在建立会话之前,LSR1、LSR2在每个接口的UDP端口646发送Hello消息,消息中包括一个LDP标识符,同时也要接收UDP端口646的消息。
2、LSR1、LSR2接收到Hello消息后,判断是否已经同发送方建立会话,如果没有,开始准备建立会话。
3、LSR1、LSR2根据双方地址决定在会话建立中哪个是主动方,哪个是被动方,地址大的一方为主动。(NON EXISTENT状态)
4、建立支持会话的TCP连接(INITIALIZED状态)。
5、主动方发送Init消息,进入OPENSENT状态;
被动方接收到可以接收的Init消息,进入OPENREC状态,同时向对方发送Init消息和KeepAlive消息;
6、进入OPENSEND的一方接收到可以接收的Init消息进入OPENREC状态,同时向对方发送KeepAlive消息。
进入OPENREC的一方接收到KeepAlive消息进入OPERATIONAL状态。
1.【NON EXISTENT】开始时双方用组播地址224.0.0.2发送Hello消息,双方收到对方的Hello消息如果没有建立连接则开始建立TCP连接。
接着是建立TCP连接三次扬过程。建立连接后双方进入到INITIALIZED状态。
2.【INITIALIZED】
地址大的一方(2.2.2.2)发送Initialization Message ,进入OpenSent状态
1.1.1.1收到Initialization Message 消息将状态改为OpenRec状态,同时给2.2.2.2发送Initialization Message和KeepAlive消息。
2.2.2.2收到1.1.1.1的Initialization Message消息后状态变为OpenRec收到KeepAlive时状态变为Operational,同时向1.1.1.1KeepAlive消息。
OpenRec状态下收到KeepAlive后变为Operational状态
标签分发模式:
1.DoD :下游按需标记分发(上游向下游请求标签)
2.DU :下游自主标记分发(不用请求建立连接后下游自主向上游分配标签)
标签控制方式:
1.有序(orderde):只有收到下游返回的标签映射消息后才向其上游发送标签映射消息。
2.独立(independent):不管有没有收到下游返回的标签映射消息都立即向其上游发送标签映射消息。
标签保持方式:
1.自由(全保留)
2.保守(只保留下游邻居)
自由标记保持方式的主要优势在于LSR可以快速对路由变化作出响应,这主要是由于标记映射已经存在。自由标记保持方式的主要缺点在于当前不需要的标记映射同样也需要被分配和维护