PPTP------点到点隧道协议

来源:互联网 发布:ubuntu skype闪退 编辑:程序博客网 时间:2024/05/11 21:07


1 介绍
特点:厂商联盟开发,主要成员为微软

术语:PAC------PPTP接入集中器,位置以及功能类似于L2F中的NAS
         PNS------PPTP网络服务器,位置以及功能类似于L2F中的终点网关
作用:通过internet以隧道方式将PPP数据转发给PNS,在隧道模式中,PAC接受客户的呼叫,LCP协商,以及一些必要的验证,而后PAC和PNS建立隧道,PNS执行与客户端的LCP协商PPP CHAP或者PAP验证以及NCP协商,这样客户的PPP数据就可以透明的通过隧道传输给PNS了,而且PPTP支持另外一种工作模式:这种模式客户端直接和企业边界建立隧道,这样客户端充当了PNS而企业边界承担被呼叫任务(PAC),这种模式叫做自发模式,并且自发模式是常用的。

L2F和PPTP的区别:
1 L2F只支持隧道模式,PPTP只支持自发模式。
2 L2F可以通过隧道转发PPP以及SLIP数据,PPTP只支持通过隧道转发PPP数据
3 L2F没有流量控制以及拥塞管理,PPTP支持
4 L2F中控制消息和数据都是通过UDP封装,PPTP控制信息使用TCP而数据消息使用增强版GRE封装
5 L2F中终点网关最后同客户进行LCP,CHAP阶段实际上是和NAS协商的,PPTP中不是这样的,因为PAC不支持
6 L2F不支持主动呼出,PPTP可以
7 L2F建立隧道时NAS和终点网关会彼此验证,PPTP不会

注:在CISCO设备上使用PPTP时只支持自发模式

2 数据包结构
PPTP的自发模式建立的隧道在于客户(PNS)和企业边界(PAC)之间,不同于L2F,PPTP是使用带外管理的,也就是控制消息和数据消息是分开的,那么它们封装时的包结构是什么样呢?
原始分组:L2头 L3头 L4头 数据 L2尾
PPTP控制消息:L2头 L3头 TCP头 控制消息 L2尾
PPTP隧道内的数据封装:L2头 L3头 E.GRE头 PPP数据 L2尾
PPTP控制消息是用TCP端口号1723

要想在隧道中传输数据首先要建立控制连接,控制连接有两种类型消息:
类型1:控制消息
类型2:管理消息
CISCO并没有定义管理消息的作用,这应该是不支持隧道模式的原因。这里说下控制消息的类型一共有15种:
编码        消息                作用
1        StartCCRQ        开始连接请求
2        StartCCRP                开始连接应答
3        StopCCRQ        终止连接请求
4        StopCCRP                终止连接应答
5        Echo requst        回应请求
6        Echo reply                回应应答
7        OCRQ                呼出请求
8        OCRP                呼出应答
9        ICRQ                呼入请求
10        ICRP                呼入应答
11        ICCN                呼入连接成功
12        ClearRQ                呼叫拆除
13        CDN                呼叫断开通知
14        WEN                广域网错误通知
15        SLI                设置链路信息

这些消息的作用各不相同,但是都有一些共同拥有的字段:
长度:包括PPTP头在内的PPTP消息长度
PPTP消息类型:永远是1,指出这是一个控制消息
Magic Cookie:永远是0x1A2B3C4D,主要用于TCP同步
控制消息类型 :上述的15中编码,指出消息类型

下面主要解释几种常用控制消息的特有字段:
1 StartCCRQ:
        1 协议版本:由发送方指出的2字节版本号+2字节修订号
        2 成贞功能:定义了两位,第一位置位表示支持异步贞,第二位置位表示支持同步贞
        3 载波功能:定义了两位,第一位置位表示支持模拟接入,第二位置位表示支持数字接入
        4 最大信道数:这个字段表示隧道中支持多少个会话,在自发模式中一个信道只能有1个会话,而且CISCO只支持自发模式,所以在CISCO设备中,这位永远是0
        5 固件修订号:客户的驱动版本
        6 主机名:发送这个消息的主机的DNS名称
        7 厂商号:厂商信息

2 StartCCRP:
        其他字段和1 StartCCRQ一样,多了2个字段
        1 结果编码:指出建立隧道时的结果                
        2 错误编码:如果结果编码指出有一个错误,那么错误编码将指出错误原因

3 OCRQ:
        1 控制消息类型 7
        2 呼叫ID 用于区分不同会话,类似于L2F技术中的MID,cisco在自发隧道下只支持一个会话,这个ID在本地有意义,对等体两端可能不同
        3 呼叫序列号 用于呼叫记录,类似于呼叫ID,但是全局统一
        4 最小BPS 告诉PAC,client接受的最小线路速度
        5 最大BPS 告诉PAC,client接受的最大线路速度
        6 载波类型 同SCCRP
        7 成帧类型 同SCCRP
        8 接受窗口大小 流控,指定缓存分组数量
        9 分组处理延迟 流控,指定缓冲区存储数据量所需时间
        10 电话号码长度 只用于强制模式,cisco不支持,必须为0

4 OCRP:
        1 控制消息类型 8
        2 呼叫ID 意义同OCRQ
        3 呼叫序列号 复制于OCRQ
        4 结果编码 用于通知结果:1 成功 2 失败 3 管理性关闭
        5 错误编码 错误ID
        6 原因编码 错误原因

E.GRE的封装
        增强型GRE不同于普通的GRE有一些特有的功能,用于转发PPTP的数据帧
        1 C 指出是否支持校验和
        2 R 指出是否支持路由选择
        3 K 指出是否支持键值
        4 S 指出是否支持序号
        5 s 指出是否支持源路由
        6 A 指出是否支持确认
        7 递归控制 0
        8 标记 0
        9 版本 1
        10 键值 左边2字节为数据长度 右边两字节指出呼叫ID
        11 序号 当S置位有效
        12 确认号 当A置位有效

3 工作过程
1
隧道建立工作过程:
第一大阶段:客户端使用SCCRQ发起控制连接,目的端口1723,源端口为任意未使用端口,选择一个客户ID,呼叫序列号,PAC收到消息把呼叫序列号复制到SCCRP响应客户端的请求,这个消息指出控制信道是否成功建立还是发生了某种错误。

第二大阶段:第一阶段成功建立之后,客户端发起OCRQ指出自己想在PPTP中建立一个PPP会话,PAC收到消息使用OCRP告知客户端是否建立成功

第三大阶段:交换完成OCRQ/OCRQ之后进行普通的PPP协商即:LCP,PAP/Chap,NCP,当协商完成利用增强型GRE转发数据包

2
隧道的维护
PPTP提供一种隧道保活机制,避免隧道由一方面原因终止导致隧道卡住,利用的是PPTP的回波请求以及回波回应
当隧道空想超过60s一方就会发送回拨请求,如果在60s内没有收到回波回应,就断开连接,这个请求任意一方都可以发起

3
隧道的终止以及其他
1 隧道的终止
        1 client发起CCRQ/clearRQ
        2 PAC回复CDN
        终止会话
        3 PAC马上发起stopCCRQ
        4 client回应stopCCRP
        终止控制连接

2 SLI消息:有client发起,设置链路信息


4 实验:
PAC
hostname PAC
vpdn enable
vpdn-group zu
accept-dialin
  protocol pptp
  virtual-template 1

username zhanghao password 0 mima

interface Loopback0
ip address 10.1.1.1 255.255.255.0

interface FastEthernet0/0
ip address 1.1.1.121 255.255.255.255

interface Virtual-Template1 
ip unnumbered Loopback0
peer default ip address pool ippool
ppp encrypt mppe 40 required
ppp authentication ms-chap

ip local pool ippool 10.1.1.10 10.1.1.100
ip route 0.0.0.0 0.0.0.0 FastEthernet0/0