两个LSR之间交换LDP Discovery Hello以后就建立会话。建立是一个两步的过程:

  •  传输连接的建立。
  •  会话初始化。

传输连接建立:

目的:在两个LSR之间建立一个可靠的TCP连接。

为了避免建立两个TCP连接,LSR首先确定在会话建立中的主动角色和被动角色。过程是将自己的传输地址和通过HELLO交换获得的传输地址比较,地址高的是主动角色,地址底的是被动角色,由主动角色使用端口646发起TCP 连接。

说明具体过程非常复杂可以参考RFC5039.

会话初始化:

传输建立以后就进入会话初始化阶段

在此阶段,协商会话的参数。这些协商的参数包括LDP协议版本,标记分发方式,时间值,标记控制ATM的VPI/VCI范围,标记控制的帧中继的DLCI范围,等等。

下面大体叙述一下建立过程:(详细过程参考RFC5039)

1、当LSR1 扮演被动角色:
a) 如果LSR1接收到一个初始化消息,它试图把消息PDU携带的LDP标识符与一个Hello邻接相匹配。
b) 如果有一个匹配的Hello邻接,邻接指定了会话的本地标记空间。
接下来,LSR1检查在消息里面的提议的会话参数是否可以接受。如果可以接受,LSR1回应一个它希望使用的参数提议的初始化消息,并发送一个KeepAlive消息表示它接受了LSR2的参数。如果参数不可接受,LSR1回应一个Rejected/Parameters Error Notification消息,并关闭TCP连接。
c) 如果LSR1不能找到一个匹配的Hello邻接,它发送一个Session Rejected/No Hello Error Notification消息,并关闭TCP连接。
d) 如果LSR1接收到一个KeepAlive消息回应它的初始化消息,从LSR1的角度会话是可操作的了。
e) 如果LSR1接收到一个Error Notification消息,LSR2拒绝了它建议的会话,LSR1关闭TCP连接。
2、当LSR1扮演主动的角色:
a) 如果LSR1接收到一个Error Notification消息,LSR2拒绝了它建议的会话,LSR1关闭TCP连接。
b) 如果LSR1接收到一个初始化消息,它检查会话参数是否可以接受。如果可以接受,LSR1回应一个KeepAlive消息。如果参数不可接受,LSR1回应一个Session Rejected/Parameters Error Notification消息,并关闭TCP连接。
c) 如果LSR1接收到一个KeepAlive消息回应它的初始化消息,LSR2接受了它建议的会话消息。
d) 当LSR1接收到一个可接受的初始化消息和一个KeepAlive消息后,从LSR1的角度来看,会话是可操作的。

当两个LSR彼此交换了“初始化”和KEEPALIVE 消息时,就完成了会话的初始化,LDP会话被认为正在运行。

说明:此过程包括很多细节,有水平有限不能具体给出,如果需要了解可以对照RFC5039.