当前位置:文档之家› 【原创】L2TP封装详解

【原创】L2TP封装详解

L2TP端口为UDP 1701
1. L2TP控制报文
IP网上的L2TP控制消息以UDP数据报形式发送。

在Windows 2000实现中,L2TP控制消息即UDP数据报经过IPSec ESP的加密,见下图:
由于UDP提供的是无连接的数据包服务,因此L2TP采用将消息序列化的方式来保证L2TP 消息的按序递交。

在L2TP控制消息中,Next-Received字段(类似于TCP中的确认字段)和Next-Sent字段(类似于TCP中序列号字段)用于维持控制消息的序列化。

无序数据包将被丢弃。

Next-Received字段和Next-Sent字段同样用于用户传输数据的按序递交和流控制。

L2TP支持一条隧道内的多路呼叫。

在L2TP的控制消息中以及L2TP数据帧的报头内,Tunnel ID标识了一条隧道而Call ID标识了该隧道内的一路呼叫。

2. L2TP协商参数过程:
L2TP的PPP LCP协商报文结构:
3. L2TP数据报文封装结构
L2TP用户传输数据的隧道化过程采用多层封装的方法。

下图显示了封装后在隧道中传输的基于IPSec的L2TP数据包格式。

1)L2TP封装
初始PPP有效载荷如IP数据报、IPX数据报或NetBEUI帧等首先经过PPP报头和L2TP 报头的封装。

2)UDP封装
L2TP帧进一步添加UDP报头进行UDP封装,在UDP报头中,源端和目的端端口号均设置
为1701。

3)IPSec封装
基于IPSec安全策略,UDP消息通过添加IPSec封装安全负载ESP报头、报尾和IPSec 认证报尾(Auth trailer),进行IPSec加密封装。

4)IP封装
在IPSec数据报外再添加IP报头进行IP封装,IP报头中包含VPN客户机和服务器的源端和目的端IP地址。

5)数据链路层封装
数据链路层封装是L2TP帧多层封装的的最后一层,依据不同的外发物理网络再添加相应的数据链路层报头和报尾。

例如,如果L2TP帧将在以太网上传输,则用以太网报头和报尾对L2TP帧进行数据链路层封装;如果L2TP帧将在点-点WAN上传输,如模拟电话网或ISDN 等,则用PPP报头和报尾对L2TP帧进行数据链路层封装。

6)基于IPSec的L2TP隧道化数据的解封装过程
在接收到L2TP帧后,L2TP客户机或服务器将做如下解封装处理:
1.处理并去除数据链路层报头和报尾
2.处理并去除IP报头
3.用IPSec ESP认证报尾对IP有效载荷和IPSec ESP报头进行认证
4.用IPSec ESP报头对数据报的加密部分进行解密
5.处理UDP报头并将数据报提交给L2TP协议
6.L2TP协议依据L2TP报头中Tunnel ID和Call ID分解出某条特定的L2TP隧道
7.依据PPP报头分解出PPP有效载荷,并将它转发至相关的协议驱动程序做进一步处理
L2TP数据的封装具体步骤如下:
1.IP数据报、IPX数据报或NetBEUI帧由各自协议提交给对应于VPN连接的虚拟接口。

该接口符合网络驱动程序接口规范NDIS。

2.NDIS将数据报提交给NDISWAN,NDISWAN可选择对数据进行压缩处理后,添加PPP
报头进行第一步封装。

该PPP报头仅含一个PPP协议标识域,不附加任何帧校正序列FCS
或其他标记。

3.NDISWAN将PPP帧提交给L2TP协议驱动程序,该驱动程序负责在PPP帧外添加L2TP 报头进行第二步封装。

在L2TP报头中,Tunnel ID 和Call ID的组合标识了一条隧道。

4.L2TP协议驱动程序再将封装后的数据报提交给TCP/IP协议驱动程序,并告之驱动程序,将L2TP数据报作为UDP消息发送,两端UDP端口号均为1701。

5.TCP/IP协议驱动程序对报文添加IP报头和UDP报头。

然后由IPSec对报文进行分析,
选择与之相匹配的安全策略,并在此安全策略的基础上,给数据报的UDP消息部分添加相应的ESP报头、报尾,进行IPSec加密、封装。

完成IPSec封装后,将原先的IP报头中协议字段值设置为50,同时将该IP报头添加在ESP报文外。

之后,TCP/IP协议驱动程序将结果报文提交给拨往本地ISP的拨号连接接口,该接口符合网络驱动程序接口规范NDIS。

6.NDIS再次将数据报提交给NDISWAN。

7.由NDISWAN提供数据链路层PPP报头、报尾,并将最终形成的PPP帧提交给与拨号硬件相对应的WAN微端口驱动程序。

相关主题