-
L2TP
协议原理
一
.L2TP
协议结构
图
1-1
L2TP
协议结构
< br>PPP
帧
L2TP
数据消息
p>
L2TP
数据通道(不可靠)
L2TP
p>
控制消息
L2TP
控制通道(可靠)
包传输网络(
UDP,
...
)
图
1-1
描述了
PPP
帧和控制通道以及数据通道之间的关系:
PPP
帧在不
可靠的
L2TP
数据通道内传输,控
制
消息在可靠的
L2TP
控制通道内传输。
L2TP
数据报文和控制报文全部以
UDP
报文形式发送。数据消息不重发,不能保证可靠性;控制消息使用
流控和重发机制,能保证可靠传输。
L2TP
注册了
UDP
端口
1701
< br>,这个端口号仅用于初始隧道建立过程。
L2TP
隧道发
起方任选一个空闲端口(未必是
1701
)向接收方的
1701
端口发送报文;接收方收到报文后,
也
任选一个空闲端口(未必是
1701
)
,给发送方的指定端口回送报文。至此,双方的端口选定,并在隧道
连通的时间内不再改
变。
二
.L2TP
< br>报文头
L2TP
的控制消息和
数据消息使用相同的报文头。
图
1-2
L2TP
报文头格式
0
7
Tunnel
ID
Ns (opt)
offset size (opt)<
/p>
12
Ver
16
Length (opt)
Session ID
Nr
(opt)
offset padding (opt)
31<
/p>
T
L
x
x
S
x
O
P
x
x
x
x
L2TP
报文头中标记为
可选(
opt
)的字段,是指在数据消息中可选,在控制消息中
则是必选的。
表
1-1
L2TP
报文头字段描述
字段名
T
含义
取值要求
类型
(
Type
)
,
取值为
“
0
”
时表示数据消息,
-
取值为“<
/p>
1
”时表示控制消息
< br>长度在位标志,取值为“
1
”时表示报文头中
存在长度字段
Length
保留位
控
制
消
息
中
必
p>
须
为
“
1
”
-
L
x
字段名
S
含义
顺序字段在位标志,取值为“<
/p>
1
”时表示报文
头中存在
Ns
和
Nr
字段
取值为“
1
”时表示报文
头中存在
offset
size
字段
优先级(
Priority
),只用于数据消息
取值要求
控
制
消
息
中
必
须
为
“
1
”
控
制
消
息
中
必<
/p>
须
为
“
0
”
控
制
消
息
中
必
须
为
“
0
”
对于
L2TPv2
协议取
值为“
2
”
-
Hello<
/p>
控制消息具有全
局性,
其
Tunnel ID
必
须为
0
。
-
-
数据消息中是保留字
段
-
-
O
P
Ver
版本号
Length
Tunnel ID
消息的总长度,单位为字节
隧道标识符,只具有本地意义
Session ID
Ns
Nr
会话标识符,只具有本地意义
当前消息的顺序号
希望接收的下一条控制消息的顺序号
offset size
偏移值,指示载荷数据开始的位置
offset padding
填充位
L
2TP
报文头中包含隧道标识符(
Tunnel
ID
)和会话标识符(
Session ID
< br>)信息,隧道标识符与会话标识符
由对端分配,用来标识不同的隧道和会话。隧道
标识相同、会话标识不同的报文将被复用在一条隧道上。
<
/p>
三
.L2TP
数据报文结构
用户
PPP
报文(已携带
源
IP
报文头及
PPP
报文头)在公共网络上以
IP
报文形式传输时携带以下
协议头:
?
?
?
p>
1
个
L2TP
报文
头(
16
字节)
1
个
UDP
报文头(
8
字节)
1
个新
IP
报文头(
20
p>
字节)
,指示
L2TP
隧道的源地址和目的地址
L2TP
数据报文的格式如图
1-3
。
图
1-3
L2TP
数据报文的格式
20
字节
新
IP
头
8
字节
UDP
头
16
字节
L2TP
头
2
字节
PP
P
头
20
字节
原
IP
头
Data
LAC
收
到
PPP
报文后,进行如下封装:
?
?
?
首先为其封装
L2TP
报文头;
接着封装
p>
UDP
报文头
然
后封装新的
IP
头,并从连接公共网络的接口发送出去。
L2TP
协议本
身没有数据分片功能,但是在进行
IP
封装时,可以在需要时进
行分片。为保证报文不分片,
封装后的报文大小不能超过实际接口的
MTU
。
LNS
从连接公共网络的接口收到该报文后,进行如下处理:
?
?
p>
去掉
IP
头和
UD
P
头,将报文送往
L2TP
协议模块;
L2TP
协议剥离
< br>L2TP
协议头和
PPP
头,将
该报文还原为用户
IP
报文,并发送到私
网内部服务器。
四
.
控制连接和会话连接的建立过程
消息报文
在
VRP
的实现中,控制连接和会话连接的建立过程中涉及的消息包括:
< br>
(
Start-
Control-Connection-Request
)
:
用来向对端请求建立控制连接。
(
Start-Control-
Connection-Reply
)
:用来告诉对端,本端收
到了对端的
ACCRQ
消息,允许建立控
制连接。
(
Start-Control-
Connection-Connected
)
:用来告诉对端
,本端收到了对端的
SCCRP
消息,本端已
< br>完成隧道的建立。
N
(
Stop-Control-
Connection-Notification
)
:用来通
知对端拆除控制连接,本端已清除所有会话连
接,将关闭隧道接口。
StopCCN
中携带了发送端控制连接拆除原因。
(
Incoming-Call-Re
quest
)
:只有
LAC
才会发送;每当检测到用户的呼叫请求,
LAC
就
发送
ICRQ
消息给
LNS
,请求建立会话连接。
ICRQ
中携带会话参数。
(
Incoming-Call-Re
ply
)
:只有
LNS
才会发送;收到
LAC
的
IC
RQ
,
LNS
就使用
< br>ICRP
回复,表示
允许建立会话连接。
(
Incoming-
Call-Connected
)
:只有
LAC
才会发送;
LAC
收到
LNS
的
ICRP
,
就使用
ICCN
回复,
表示
LAC
已回复用户的呼叫,通知
LNS
建立会话连接。
(
Call-Disconnect-
Notify
)
:用来通知对端拆除会话连接,并告知对端拆除
的原因。
:用来检测隧道的连通性。
(
Zero-Length Body
)
:如果本端的队列没有要发送的消息时,发送
ZLB
给对端。在会话连接和控
制连接的拆除过程中,
发送
ZLB
还表示收到
StopCCN
或
CDN
。
Z
LB
只有
L2TP
头,没有负载部分,
因此
而得名。
控制连接的建立和拆除期间包含以下过程:
1.
控制连接的建立
2.
会话连接的建立
3.
控制连接的维持
4.
会话连接的拆除
5.
控制连接的拆除
控制连接的建立
< br>控制连接的建立先于会话连接。
只有控制连接建立起来了,
会话连接才可能建立起来。
L2T
P
的控制连接建立过程如图
1-4
。
图
1-4
控制连接建立的三次握手
LAC
p>
SCCRQ
SCCRP
SCCCN
LNS
ZLB
No messages
waiting in queue
1.
LAC
和
LNS
之间路由相互可达后,
LAC
端设置相应
AVP
,
< br>向
LNS
端发出
SCCRQ
p>
报文,请求建立控制连接。
2.
LNS
收到来自
LAC
的
SCCRQ
。
根据其中的
A
VP<
/p>
,
如果同意建立隧道,
便发送
SCCRP
报文给
LAC
。
3.
L
AC
对接收到的
SCCRP
报文进行检
查,
从中取出隧道信息,
并向
LNS<
/p>
发送
SCCCN
报文,表示控制连接建立
成功。
4.
当消息队列中没有消息时,
LNS
发送
ZLB
给对端。
在
VRP
中,使用
display l2tp
tunnel
命令可以查看本设备上成功建立了哪些控制连接。
会话连接的建立
控制连接成功建立之
后,一旦检测到用户呼叫,就请求建立会话连接。与控制连接不同的是,会话连接的
建立
具有方向性。在
VRP
中,会话连接请求是由
< br>LAC
发起的。会话连接建立过程如图
1-5
。
图
1-5
会话连接建立过程
LAC
Call Detected
I
CRQ
ICRP
ICCN
LNS
ZLB ACK
No messages waiting in
queue
L2TP
的会话建立由
PPP
触发。
在
VRP
中,使用
dis
play l2tp session
命令可以查看
本设备上成功建立了哪些会话连接。
控制连接的维持
L2TP
使用
Hello
报文检测隧道的连通性。
LAC
和
LNS
定时向
对端发送
Hello
报文,若在一段时间内未收
到
Hello
报文的应答,则重复发送
Hello
报文。
如果重复发送报文的次数超过
3
次,则认为
L2TP
隧道已经
断开,该
PPP
会话将被清
除。此时需要重新建立隧道。
VRP
中
Hello
报文发送的时间间隔可以手工设置。
缺省情况下,
Hello
报文每隔
< br>60
秒发送一次。
LNS
和
p>
LAC
侧可以设置不同的
Hello
报文时间间隔。
会话连接的拆除
会话连接拆除的发起
端可以是
LAC
或
LNS
。
发
起端通过发送
CDN<
/p>
消息报文到对端来通知对端拆除会话连
接。对端收到后发送
ZLB ACK
消息作为回应。图
1-6
p>
是
LAC
侧发起会话连接拆除的过程。
p>
图
1-6
L2TP
会话连接的拆除
LAC
CDN
ZLB
ACK
LNS
控制连接的拆除
控制连接拆除的发起
端可以是
LAC
或
LNS
。
发起端通过发送
StopCCN
< br>消息报文到对端来通知对端拆除控
制连接。
对端收到后发
送
ZLB ACK
消息作为回应,
同时
在一定时间内保持控制连接以防止
ZLB ACK
消息
丢失。图
1-7
是
LA
C
侧发起控制连接拆除的过程。