转自:http://lijt100616.blog.51cto.com/1338011/343527
五、L2TP的Tunnel和Session建立过程
① 1(SCCRQ)Start-Control-Connection-Request
控制链接发起请求,由LAC或LNS向对端发送,用来初始化LAC和LNS之间的tunnel,开始tunnel的建立过程。
② 2(SCCRP)Strat-Control-Connection-Reply
表示接受了对端的连接请求,tunnel的建立过程可以继续。
③ 3(SCCCN)Start-Control-Connection-Connected
对SCRRP的回应,完成tunnel的建立。
④ ZLB
零长度消息报文,一般为查询报文,LAC可以用Hello报文进行恢复,也可以直接丢弃。
⑤ 10(ICRQ)Incoming-Call-Request
当LAC检测到有用户拨入电话的时候,向LNS发ICRQ,请求在已建立的tunnel中建立session。
⑥ 11(ICRP)Incoming-Call-Reply
用来回应ICRQ,表示ICRQ成功,LNS也会在ICRP中标识L2TP session必要的参数。
⑦ 12(ICCN)Incoming-Call-Connected
用来回应ICRP,L2TP session建立完成。
六、其它主要控制消息了解
控制报文:
0(reserved)
1(SCCRQ)
2(SCCRP)
3(SCCCN)
4(STOPCCN)Stop-Control-Connection-Notification
由LAC或LNS发出,通知对端tunnel将要停止,控制链接将要关闭。另外,所有活动的会话都会悄悄的被清除,原因会显示在Result Code AVP中。
5(reserved)
6(HELLO)
会话报文:
8(OCRP)Outgoing-Call-Reply
9(OCCN)Outgoing-Call-Connected
10(ICRQ)
11(ICRP)
12(ICCN)
13(reserved)
14(CDN)Call-Disconnect-Notify
由LAC或LNS发出,通知对端session将要停止。
错误报告报文:
15(WEN)WAN-Error-Notify
PPP链接控制报文:
16(SLI)Set-Link-Info
7(OCRQ)Outgoing-Call-Request
LNS发向LAC用来设置PPP协商的选项,这些选项在call的生存周期中可以随时变化,因此LAC有能力在活动的PPP session上更新内部的呼叫信息和行为。
七、L2TP报文头格式
Type(T):标识消息的类型,0表示是数据消息,1表示控制消息。
Length(L):置1时,说明Length域的值是存在的,对于控制消息L位必须置1。
X bit:保留位,所有保留位均置0。
Sequence(S):置1时,说明Ns和Nr是存在的,对于控制消息S必须置1。
Offset(O):置1时,说明Offset Size域是存在的,对于控制消息O必须置0。
Priority(P):只用于数据消息,对于控制消息P位置0,当数据消息此位置1时,说明该消息在本列队和传输时应得到优先处理。
Ver:必须是2,表示L2TP数据报头的版本。
Length:标识整个报文的长度(以字节为单位)。
Tunnel ID:标识L2TP控制链接,L2TP Tunnel标识符只有本地意义,一个Tunnel两端被分配的Tunnel ID可能会不同,报头中的Tunnel是指接收方的Tunnel ID,而不是发送方的。本端的Tunnel ID在创建Tunnel时分配。通过Tunnel ID AVPs和对端交换Tunnel ID信息。
Session ID:标识Tunnel中的一个session,只有本地意义,一个session两端Session ID可能不同。
Ns:标识发送数据或控制消息的序号,从0开始,以1递增,到216再从0开始。
Nr:标识下一个期望接收到的控制消息。Nr的值设置成上一个接收到的控制消息的Ns+1。这样是对上一个接收到的控制消息的确认。数据消息忽略Nr。
Offset Size:如果值存在的话,标识有效载荷数据的偏移。
八、 AVP介绍及其格式
1、AVP介绍
控制消息中要携带的相关参数,使用AVP(Attribute Value Pair,属性值对)的形式来表示,使协议具有很好的扩展性。
2、AVP格式
● 开始的6个bit是一个位掩码,用来描述AVP的普通属性,RFC2661定义了前2位,其余被保留。
● (M)命令位:用来控制收到不认识的AVP时必须执行的动作。如果在一个关联特殊的会话消息中M位被置为不认识的AVP,这个会话一定会被终止。如果在一个关联全部通道的消息中M位被置为不认识的AVP,整个通道包括通道内的会话一定会被终止。如果M为没有被设置,这个不认识的AVP会被忽略掉。
● (H)隐藏位:用来识别一个AVP的属性域里的隐藏数据。
● 保留位一定要置0,收到一个保留位为1的AVP,会把收到的AVP当做不认识。
九、部分主要AVP含义
(1) Control Connection Management AVP
(2) Protocol Version AVP :标识L2TP协议的版本。
(3) Framing Capabilities AVP :倒数第二bit位A置1,标识支持帧异步;倒数第二bit位S置1,标识支持帧同步。
(4) Beaer Capabilities AVP :
(5) Tie Breaker AVP
标识发送者希望在LAC和LNS之间只存在一个tunnel;如果LAC和LNS同时都发起了SCCRQ,那么需要选择一个单一的tunnel。接收到SCCRQ端检查自己是不是向对端发送了SCCRQ,如果已经发送了,就比较Tie Breaker值的大小,值小的继续tunnel建立,值大的必须放弃tunnel。如果两个值相等,都放弃。
(6) Host name AVP :标识发送端的主机名称。
(7) Assigned Tunnel ID :本端(发送端)分配的tunnel ID。
(8) Receive Window Size :
标识接收窗口的大小:如果没有发送这个AVP,对端必须假设接收窗口是4,远端在发送指定数量的控制消息后,必须等待对方确认。
(9) Challenge :标识发送端希望对tunnel对端进行CHAP认证。
(10) Challenge Response :对接收到Challenge的响应。
(11) Assigned Session ID :
本端分配的Session ID,当LAC检测到用户呼叫的时候,向LNS发送ICRQ,请求在已经
存在的tunnel中建立session链接,LAC在本端为需要建立的session分配一个session ID,这个session ID只具有本地意义。LNS接收ICRQ后回应ICRP,在ICRP中也包含了LNS为这个session分配的一个具有本地意义的session ID。通过ICRQ和ICRP,本地就可以获得对端为这条session分配的session ID了。
注意:在L2TP包头中的session ID是指对端对session分配的session ID。
(12)Minimum BPS :标识呼叫链接可接受的最低的连接速率。
(13)Maximum BPS :标识呼叫链接可接受的最高的连接速率。
(14)Bearer Type :标识呼叫连接的是模拟信道还是数字信道。
(15)Framing Type :标识支持帧同步还是帧异步,如果A和S都置位说明都支持或者是不清除。
(16)Called Number :被呼叫方的电话号码。
(17)Calling Number :呼叫方的电话号码。
(18)Rx Connect Speed :LAC的接收速率,可能和发送速率是不对称的。
(19)Private Group ID :LAC用来标识客户属于某个特定的组织。