L2TP協議筆記
一、概述
L2TP是第二層隧道協議。隧道建立在LAC(L2TP客戶端)和LNS(L2TP伺服器)之間。隧道由一個控制連線和0-n個L2TP會話(用來傳輸PPP資料包的會話)組成。一對LAC和LNS之間可以有若干個隧道。L2TP由兩種型別的報文,一種是控制報文一種是資料包文。控制報文用於隧道和通話的建立、維護和清除。資料包文封裝PPP幀,並在隧道上傳輸。
形象點說是這樣的,隧道是一條有N條車道的高速公路,一臺撥號PC的資料流就是一條會話,佔用了一條公路,這條公路上只能傳輸這臺PC的報文,運載報文在隧道上跑的車就是L2TP的資料包文,建立、維護、清除隧道和會話的是L2TP的控制報文。
二、控制報文型別
- SCCRQ(Start-Control-Connection-Request):用來向對端請求建立控制連線。
- SCCRP(Start-Control-Connection-Reply):用來告訴對端,本端收到了對端的ACCRQ訊息,允許建立控制連線。
- SCCCN(Start-Control-Connection-Connected):用來告訴對端,本端收到了對端的SCCRP訊息,本端已完成隧道的建立。
- StopCCN(Stop-Control-Connection-Notification):用來通知對端拆除控制連線,本端已清除所有會話連線,將關閉隧道介面。StopCCN中攜帶了傳送端控制連線拆除原因。
- ICRQ(Incoming-Call-Request):只有LAC才會傳送;每當檢測到使用者的呼叫請求,LAC就傳送ICRQ訊息給LNS,請求建立會話連線。ICRQ中攜帶會話引數。
- ICRP(Incoming-Call-Reply):只有LNS才會傳送;收到LAC的ICRQ,LNS就使用ICRP回覆,表示允許建立會話連線。
- ICCN(Incoming-Call-Connected):只有LAC才會傳送;LAC收到LNS的ICRP,就使用ICCN回覆,表示LAC已回覆使用者的呼叫,通知LNS建立會話連線。
- CDN(Call-Disconnect-Notify):用來通知對端拆除會話連線,並告知對端拆除的原因。
- Hello:用來檢測隧道的連通性。
- ZLB(Zero-Length Body):如果本端的佇列沒有要傳送的訊息時,傳送ZLB給對端。在會話連線和控制連線的拆除過程中,傳送ZLB還表示收到StopCCN或CDN。ZLB只有L2TP頭,沒有負載部分。
三、報文頭
L2TP資料包用於控制通道和資料通道共享一個公共報頭格式。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T|L|x|x|S|x|O|P|x|x|x|x| Ver | Length (opt) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Tunnel ID | Session ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ns (opt) | Nr (opt) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Offset Size (opt) | Offset pad... (opt)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T:報文型別。資料包文,設定為0。控制報文,設定為1。
L:如果L位為1,則存在長度欄位。對於控制報文,L位必須設定為1。
X:保留位。
S:S位設定為1,表示存在Ns和Nr欄位。控制報文的S位必須設定位1
O:O位設定為1,表示存在offset size欄位。控制資訊的O位必須設定為0
P:P位設定為1,表示這個資料包文被優先處理。所有的控制報文的P位設定為0
Version:L2TP的版本
Tunnel id:用來標識一條隧道。這個隧道ID是目的隧道ID
Session id:用來標識在隧道上一個會話
Ns:報文的序列號
Nr:希望下一個接收的報文的序列號
Offset Size:標識負載資料的大小,也就是AVP的大小
四、AVP格式
L2TP為了提高可擴充套件性,在L2TP中使用訊息型別和訊息體這種編碼方式。這種編碼被稱為AVP(屬性值對)
+--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|H| rsvd | Length | Vendor ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Attribute Type(兩個位元組) | Attribute Value...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
[until Length is reached]... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
前六位是位掩碼,描述了AVP的一般屬性。rfc中定義了兩個位,其餘的為將來的擴充套件保留。保留位必須設定為0。接收到的保留位設定別的AVP為1的AVP必須視為無法識。
M:表示收到無法識別的AVP時如何處理這個AVP。M位被設定為1時,收到無法識別的AVP時會關閉隧道。M位被設定為0時,收到無法識別的AVP時會將這個AVP忽略。Rfc設定所有的訊息型別M位必須為1。
H:表示是否隱藏AVP的屬性值欄位中的資料。將屬性值欄位的值不以明文傳輸
Length:記錄這個AVP包含的位元組數。這個長度大於等於6。Length這個欄位本身是10位,單個AVP中最多是1023個位元組。
Vendor id:供應商ID
Attritube type:屬性型別。兩個位元組大小
Attribute value:屬性值。有可能是一個或多個。長度不定
五、AVP
Note:小括號裡的是這個屬性會出現在那種控制報文中
1、所有的控制報文都必須有的屬性
Control message AVP(所有的控制資訊): Attribute Type 0,兩個位元組。標識控制報文的型別。必須是緊跟控制報文後的第一個屬性
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2、random vecotr avp: Attribute Type 36 ,不定長。用於隱藏任意屬性的屬性值。如果H位為1,改控制報文中就會出現這個屬性。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Random Octet String ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3、Result code avp:Attribute Type 1。(CDN,StopCCN)不定長,描述終止隧道或會話的原因。
Result code:兩個位元組的無符號整數。Error code:兩個位元組的無符號整數。Error Message:不定長的字串。錯誤程式碼和錯誤資訊不一定會存在,取決於AVP的長度,avp.length == 8,只有result code,avp.length == 10,有result code 和 error code,avp.length > 10,有result code ,error code 和 error message
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Result Code | Error Code (opt) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Error Message (opt) ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
4、Protocol Version AVP (SCCRP,SCCRQ):Attribute Type 2,標識傳送方L2TP協議的版本
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ver | Rev |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Ver和rev都是一位元組的無符號整數
5、Framing Capabilities AVP(SCCRP,SCCRQ) :Attribute Type 3,32位掩碼,定義了兩位,標識接收或傳送幀的型別。bit位A置1,標識支援幀非同步;bit位S置1,標識支援幀同步。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved for future framing type definitions |A|S|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6、Beaer Capabilities AVP(SCCRP,SCCRQ) :Attribute Type 4,32位掩碼,定義了兩位,標識傳送方用於outgong call的硬體介面型別。定義了兩位,Bit位A置為1,標識支援模擬訪問,bit位D置為1,標識支援數字訪問。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved for future bearer type definitions |A|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7、Tie Breaker AVP(SCCRQ):Attribute Type 5,8位元組。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Tie Break Value...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...(64 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
標識傳送者希望在LAC和LNS之間只存在一個tunnel;如果LAC和LNS同時都發起了SCCRQ,那麼需要選擇一個單一的tunnel。接收到SCCRQ端檢查自己是不是向對端傳送了SCCRQ,如果已經傳送了,就比較Tie Breaker值的大小,值小的繼續tunnel建立,值大的必須放棄tunnel。如果兩個值相等,都放棄。
8、Firmware Revision (SCCRP, SCCRQ):Attribute Type 6,2位元組。標識執行L2TP機器的版本。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Firmware Revision |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
9、Host name AVP (SCCRP, SCCRQ):Attribute Type 7,不定長,標識傳送端的主機名稱。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Host Name ... (arbitrary number of octets)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
10、 Vendor Name (SCCRP, SCCRQ):Attribute Type 8,不定長,標識客戶端或伺服器的供應商名稱。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vendor Name ...(arbitrary number of octets)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
......共32個屬性
相關文章
- Raft協議學習筆記Raft協議筆記
- Raft 協議學習筆記Raft協議筆記
- SPI通訊協議筆記協議筆記
- IIC通訊協議筆記協議筆記
- 學習筆記 - DNS協議筆記DNS協議
- IP協議學習筆記協議筆記
- GRE/PPTP/L2TP/L2隧道協議-VeCloudpptp協議Cloud
- 網路協議課堂筆記協議筆記
- Internet安全協議 學習筆記協議筆記
- OAuth 2.0 協議學習筆記OAuth協議筆記
- 趣談網路協議筆記(1)協議筆記
- CAN匯流排協議 學習筆記協議筆記
- MQTT工作筆記0001---MQTT協議概述MQQT筆記協議
- 計算機網路學習筆記(10) TCP/IP協議棧 之TELNET協議計算機網路筆記TCP協議
- TCP/IP學習筆記之協議和郵件TCP筆記協議
- 系統架構設計筆記(95)—— TCP 協議架構筆記TCP協議
- ZooKeeper一致性協議ZAB學習筆記協議筆記
- 學習筆記-Verilog實現IIC匯流排協議筆記協議
- 比特幣學習筆記————附錄2 比特幣改進協議比特幣筆記協議
- 隨記(四):簡述HSTS協議協議
- 協同過濾筆記筆記
- Raft協議和ZAB協議Raft協議
- 華為帳號服務學習筆記(五):OpenID Connect協議詳解筆記協議
- Gossip協議也叫Epidemic協議(流行病協議)Go協議IDE
- 微信登入協議分析記錄協議
- 某幫的app協議逆向記錄APP協議
- [swift 進階]讀書筆記-第十章:協議 C10P1 面向協議程式設計 Overload Resolution for Free FunctionsSwift筆記協議程式設計Function
- [swift 進階]讀書筆記-集合型別協議 C3P1_序列Swift筆記型別協議
- 華為帳號服務學習筆記(二):OAuth2.0協議詳解筆記OAuth協議
- 頁面連結跳轉--指定協議,半協議,無協議協議
- 協議協議
- 淺談WebSocket協議、WS協議和WSS協議原理及關係Web協議
- Gossip協議和Grpc協議的區別Go協議RPC
- 系列TCP/IP協議-TCP協議概述(011)TCP協議
- 二進位制協議 VS 文字協議協議
- 匯流排協議系列——USART協議初探協議
- 生成樹協議與多生成樹協議協議
- FFmpeg開發筆記(四十六)利用SRT協議構建手機APP的直播Demo筆記協議APP