• PPTP协议握手流程分析


    一  PPTP概述


            PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网,可以通过密码验证协议,可扩展认证协议等方法增强安全性。远程用户可以通过ISP、直接连接Internet或者其他网络安全地访问企业网;

            它能够将PPP(点到点协议)帧封装成IP数据包,以便能够在基于IP的互联网上进行传输。PPTP使用TCP是实现隧道的创建、维护与终止,并使用GRE(通用路由封装)将PPP帧封装成隧道数据。被封装后的PPP帧的有效载荷可以被加密或压缩;

            PPTP通信过程中需要建立两种连接,一种是控制连接,另一种是数据连接。控制连接用来协商通信过程中的参数和进行数据连接的维护。而真正的数据通信部分则交由PPTP数据连接完成。以下两个章节分别介绍PPTP的控制连接和数据连接


    二  PPTP控制连接的建立流程分析


        PPTP控制连接建立过程可以分为以下几步:

        1、  建立TCP连接

        2、  PPTP控制连接和GRE隧道建立

        3、  PPP协议的LCP协商

        4、  PPP协议的身份验证

        5、  PPP协议的NCP协商

        6、  PPP协议的CCP协商

        以下以抓包的方式分析上述几个步骤,

        pptp client     :      192.168.163.56 

        pptp server    :      192.168.162.196


    2.1  建立TCP连接


        PPTP控制层协议是建立在TCP协议的基础上,所以刚开始即使普通的TCP三次握手


    图2-1  TCP三次握数据包


    图2-2  TCP三次握手时序图


        1、  Client端向Server的1723端口发TCPSYN包,请求建立TCP连接。

        2、  Server接收TCP连接请求,回SYN ACK。

        3、  Client端向Server发送确认包ACK


    2.2  PPTP控制连接和隧道的建立


        在此过程,完成PPTP控制层连接和Gre隧道建立的工作

    图2-3 PPTP控制层连接建立过程



     

    图2-4 PPTP控制层连接时序图


        1、  Client向Server发送Start-Control-Connection-Request,请求建立控制连接

        2、  Server向Client发送Start-Control-Connecton-Reply,应答客户端的请求

        3、  Client向Server发送Outgoing-Call-Request,请求建立PPTP隧道,该消息包含GRE报头中的Callid,该id可唯一地标识一条隧道

        4、  Server向Client发送Outgoing-Call-Reply,应答客户端的建立PPTP隧道请求

        5、  有Client或者Server任意一方发出Set-Link-info,设置PPP协商的选项

    2.3 PPP协议的LCP协商


        LCP是PPP协议的链路控制协议,负责建立、拆除和监控数据链路。协商链路参数,如认证方法,压缩方法,是否回叫等。


    图2-5  PPP协议的LCP协商过程



    图2-6  PPP协议的LCP协商时序图


        1、  Client发送一个Configuration Request,把自己的配置参数发送给Server

        2、  Server发送一个Configuration Request,把自己的配置参数发送给Client

        3、  Server发送一个Configuration Reject,将自己不能识别的参数告知Client,让Client进行修正

        4、  Client发送一个Configuration Ack,表示所有配置参数全部认识且可以接受,应答Server

        5、  Client修改配置项后再次发送Configuration Request

        6、  Server发送一个Configuration Ack,标示所有配置参数全部认识且可以接受,应答Client


    2.4  PPP协议的身份认证


        LCP协商完成后,PPP协议的Server端会对Client端进行身份验证,在LCP协商中已经协商好身份验证协议,本文以MS-CHAP-2为例说明


    图2-7  PPP协议的Chap身份认证过程



    图2-8  PPP协议的Chap身份认证时序图


        1、  Server向Client发送Challenge,其中包括一个Challenge string(value字段)和Server Name(pptpd)

        2、  Client向Server发送Response,其中用户名使用明文发送,密码(syberos)和Challenge字段混合hash后以密文(value字段)形式发送

        3、  Server读取密码文件,对用户身份进行验证,验证成功,向Client发送Success,表示身份验证成功


    2.5  PPP协议的NCP协商


            NCP协议是PPP协议的网络控制协议,主要用来协商双方网络层接口参数,配置虚拟端口,分配IP,DNS等信息。图中的IPCP是NCP基于TCP/IP的接口协商协议。Server和Client都要把自己的Miniport信息发送给对方


    图2-9  PPP协议的NCP协商过程



    图2-10  PPP协议的NCP协商时序图


        1、  Server把自己的Miniport信息通过Configuration Request发送给Client

        2、  Client接收Server的接口配置,向Server发送Configuration ACK,应答上一步骤的Request

        3、  Client把自己的Miniport信息(无效数据,等待Server分配)通过Configuration Request发送给Server

        4、  Server发现Client的配置是无效的,则给Client发送一条有效的配置信息,使用Configuration Nak发送,其中主要是给Client分配ip

        5、  Client根据Server端发送过来的配置,修改自己的Miniport的接口,再次发送Configuration Request

        6、  Server接受Client的配置,发送Configuration Ack应答Request


    2.6  PPP协议的CCP协商


        CCP协议协商PPP通讯中数据加密的协议


    图2-11  PPP协议的NCP协商过程



     

    图2-12  PPP协议的NCP协商时序图


        1、  Server向Client发送Configuration Request,标识服务端支持的加密协议

        2、  Client向Server发送Configuration Request,标识客户端支持的加密协议

        3、  Client向Server发送Configuration ack,标识接受服务端的加密协议

        4、  Server向Client发送Configuration ack,标识接受客户端的加密协议


    三  PPTP数据连接的分析


        PPTP数据隧道化过程采用多层封装的方法,下图显示了封装后在网络上传输的数据包格式

    图3-1 PPTP数据包格式


        我们以应用层使用HTTP连接为例说明PPTP数据包的封装和解析过程;


    3.1  PPTP数据包封装过程



    图3-2 PPTP数据包封装过程



        封装过程:

        1、  应用层数据封装成IP数据包

        2、  将IP数据包发送到VPN的虚拟接口

        3、  VPN的虚拟接口将IP数据包压缩和加密,并增加PPP头

        4、  VPN的虚拟接口将PPP帧发送给PPTP协议驱动程序

        5、  PPTP协议驱动程序在PPP帧外添加GRE报头

        6、  PPTP协议驱动程序将GRE报头提交给TCP/IP协议驱动程序

        7、  TCP/IP协议驱动程序为GRE驱动添加IP头部

    8、  为IP数据包进行数据链路层封装后通过物理网卡发送出去

    3.2  PPTP数据包解析过程



    图3-2 PPTP数据包解析过程


        解析过程:

        1、物理thernet帧

        2、剥掉Ethernet帧后交给TCP/IP协议驱动程序

        3、TCP/IP协议解析剥掉IP头部

        4、IP协议解析剥掉GRE头部

        5、将PPP帧发送给VPN虚拟网卡

        6、VPN虚拟网卡剥掉PPP头并对PPP有效负载进行解密或者解压缩

        7、解密或者解压缩完成后将数据提交给上层应用

        8、上层应用对数据进行处理



              从应用层看,Service和Client是直接点对点连接的,他们之间的媒介就是GRE。而这个GRE的底层并不是真正的点对点连接,

    而是建立在物理网络上的一个隧道,保护传输的数据;

  • 相关阅读:
    已知有一个Worker 类如下:  public class Worker  { private int age;  private String name;  private double salary;  public Worker (){}  public Worker (String nam
    设计Account 对象如下:  private long id;       private double balance;       private String password; 要求完善设计,使得该Account 对象能够自动分配id。 给定一个List 如下: &#
    有如下Student 对象,  private String name;       private int age;       private int score;   private String classNum;  其中,classNum
    写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如:  List list = new ArrayList();  list.add(“Hello”);  list.add(“World”);  list.add(“Learn”); //此时list 为Hello World Learn  reverseList
    已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数
    (Map)利用Map,完成下面的功能:  从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。  附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录 (Map)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1
    完善一下银行的相关练习
    Java--输入输出
    java 基础--接口
    (2)java基础继承
  • 原文地址:https://www.cnblogs.com/gordon0918/p/5280587.html
Copyright © 2020-2023  润新知