轉自: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用來標識客戶屬於某個特定的組織。