L2TP協議筆記

李江林發表於2020-11-08

一、概述

    L2TP是第二層隧道協議。隧道建立在LAC(L2TP客戶端)和LNS(L2TP伺服器)之間。隧道由一個控制連線和0-n個L2TP會話(用來傳輸PPP資料包的會話)組成。一對LAC和LNS之間可以有若干個隧道。L2TP由兩種型別的報文,一種是控制報文一種是資料包文。控制報文用於隧道和通話的建立、維護和清除。資料包文封裝PPP幀,並在隧道上傳輸。

形象點說是這樣的,隧道是一條有N條車道的高速公路,一臺撥號PC的資料流就是一條會話,佔用了一條公路,這條公路上只能傳輸這臺PC的報文,運載報文在隧道上跑的車就是L2TP的資料包文,建立、維護、清除隧道和會話的是L2TP的控制報文。

二、控制報文型別

  1. SCCRQ(Start-Control-Connection-Request):用來向對端請求建立控制連線。
  2. SCCRP(Start-Control-Connection-Reply):用來告訴對端,本端收到了對端的ACCRQ訊息,允許建立控制連線。
  3. SCCCN(Start-Control-Connection-Connected):用來告訴對端,本端收到了對端的SCCRP訊息,本端已完成隧道的建立。
  4. StopCCN(Stop-Control-Connection-Notification):用來通知對端拆除控制連線,本端已清除所有會話連線,將關閉隧道介面。StopCCN中攜帶了傳送端控制連線拆除原因。
  5. ICRQ(Incoming-Call-Request):只有LAC才會傳送;每當檢測到使用者的呼叫請求,LAC就傳送ICRQ訊息給LNS,請求建立會話連線。ICRQ中攜帶會話引數。
  6. ICRP(Incoming-Call-Reply):只有LNS才會傳送;收到LAC的ICRQ,LNS就使用ICRP回覆,表示允許建立會話連線。
  7. ICCN(Incoming-Call-Connected):只有LAC才會傳送;LAC收到LNS的ICRP,就使用ICCN回覆,表示LAC已回覆使用者的呼叫,通知LNS建立會話連線。
  8. CDN(Call-Disconnect-Notify):用來通知對端拆除會話連線,並告知對端拆除的原因。
  9. Hello:用來檢測隧道的連通性。
  10. 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個屬性

相關文章