当前位置: 首页 > news >正文

PPTP 隧道建立、收发数据与断开流程简单总结

PPTP(点对点隧道协议)是一种早期(1999 年)的二层隧道协议,采用C/S架构,成员协议包括PPP、GRE等,PPTP隧道分为控制通道(TCP原生流量)和数据通道(GRE封装),由微软等厂
商推出,主要用于在公网上建立虚拟点对点连接,它依赖TCP 1723端口建立控制通道来完成隧道的协商、建立和维护,同时通过GRE协议(IP 协议号 47)封装 PPP 数据包形成数据通道,先
将用户数据封装成PPP帧,加密后再用GRE进行二次封装后在互联网传输,认证依靠PPP的PAP或CHAP等方式,加密则采用MPPE(微软点对点加密)的 RC4 算法,虽然配置简单、兼容性好、系统
原生支持广泛,但因为认证和加密机制存在大量已知安全漏洞,极易被破解,且对 NAT 和防火墙穿透能力较差,如今已不再安全,基本被 IKEv2、OpenVPN、WireGuard 等更安全的现代 VP
N 协议取代。


(1)PPTP配置过程
1 服务端开启RAS功能
2 RRAS配置界面启用VPN
3 RRAS配置界面配置虚拟IP地址池
4 注册允许接入的用户及其密码
5 配置防火墙、NAT放通PPTP数据包
6 客户端输入PPTP服务器IP地址,用户名和密码发起连接


(2)PPTP隧道建立过程
1 客户端已预创建PPTP虚拟网卡驱动实例,服务端已预创建WAN微型端口驱动实例
2 客户端随机端口发起TCP连接请求,服务端1723端口RAS服务接收,建立TCP控制通道基础连接
3 客户端RAS通过TCP控制通道发送PPTP Start-Control-Connection-Request请求,包含PPTP控制信息,服务端RAS响应PPTP Start-Control-Connection-Reply确认,PPTP控制通道协商成功
4 客户端RAS通过TCP控制通道发送Outgoing-Call-Request请求,包含GRE封装所需的Call ID、链路MTU等控制信息,服务端RAS回复Outgoing-Call-Reply确认,GRE数据通道的参数协商成功,GRE数据通道启用
5 客户端启用PPTP虚拟网卡,服务端启用WAN微型端口
6 客户端通过GRE数据通道发送LCP Configure-Request请求,服务端回复LCP Configure-Ack,LCP协商成功
7 服务端通过GRE数据通道发送MS-CHAPv2认证挑战请求,客户端返回用户名和结果值,服务端验证后返回认证结果,认证成功进入下一步,认证失败直接断开连接
8 客户端和服务端通过GRE数据通道分别发送CCP Configure-Request请求和CCP Configure-Ack确认协商,MPPE加密协商成功,加密密钥来自PPP认证过程中的共享密钥
9 客户端通过GRE数据通道发送IPCP Configure-Request请求,服务端RAS处理地址池后,返回IPCP Configure-Ack响应,包含隧道虚拟IP地址、默认网关、主备DNS服务器地址等配置信息
10 客户端收到后更新路由表并配置PPTP虚拟网卡,服务端配置WAN微型端口,PPTP隧道建立完成
TCP控制通道格式:[公网IP头部][TCP头部][TCP载荷]
GRE数据通道格式:[公网IP头部][GRE头部][PPP头部][PPP载荷]


(3)PPTP客户端数据收发过程(GRE数据通道)
发送:
前提:假设与实际目标服务器的TCP连接已建立,TCP建立时SYN数据包路径同应用数据
1 应用程序产生要发送的应用数据 当前包:[应用头部][应用数据]
2 应用程序发给协议栈TCP模块处理,通过其他端口发送应用数据 当前包:[TCP头部][应用头部][应用数据]
3 协议栈IP模块将其打包为IP包 当前包:[IP头部][TCP头部][应用头部][应用数据]
4 协议栈IP模块根据路由表,将IP包发送给PPTP虚拟网卡,PPTP虚拟网卡将其发送给RAS处理 当前包:[IP头部][TCP头部][应用头部][应用数据]
5 RAS将收到的初始IP包进行MPPE加密,再加上虚拟点对点链路的PPP头部,再加上GRE隧道头部,最后发给协议栈IP模块处理 当前包:[GRE头部][PPP头部][MPPE加密数据]
6 协议栈IP模块收到来自RAS的GRE包后,计算并加上校验和公网IP头部,然后发给物理网卡 当前包:[公网IP头部][GRE头部][PPP头部][MPPE加密数据]
7 物理网卡收到后,将其加上链路层头部后转换为电或光信号发送出去 当前包:[MAC头部][公网IP头部][GRE头部][PPP头部][MPPE加密数据]
接收:
1 物理网卡接收到电或光信号,转换为链路层PDU后核验校验和、目标地址后去除链路层头部返回给协议栈IP模块 当前包:[公网IP头部][GRE头部][PPP头部][MPPE加密数据]
2 协议栈IP模块收到后,校验各项参数通过后去除公网IP头部,判断协议字段为47(GRE),交给RAS处理 当前包:[GRE头部][PPP头部][MPPE加密数据]
3 RAS收到后,先核验并去除GRE隧道头部,再校验各项参数并去除虚拟点对点链路的PPP头部,最后根据密钥解密MPPE包,还原出初始IP包,最后再交给PPTP虚拟网卡 当前包: [IP头部][TCP头部][应用头部][应用数据]
4 虚拟网卡收到收到后,直接交给协议栈IP模块 当前包: [IP头部][TCP头部][应用头部][应用数据]
5 协议栈IP模块来自RAS的IP包后,核验并去除IP头部,判断协议字段为06(TCP),发给协议栈TCP模块 当前包:[TCP头部][应用头部][应用数据]
6 协议栈TCP模块收到后,核验并去除TCP头部,根据端口号发送给对应的应用程序 当前包:[应用头部][应用数据]
7 应用程序成功收到应用数据
虚拟网卡相当于连接RAS和协议栈的双向数据通道


(4)PPTP服务端数据收发过程(GRE数据通道)
发送:
1 服务端协议栈IP模块收到来自实际目标服务器响应的IP包 当前包:[IP头部][TCP头部][应用头部][应用数据]
2 协议栈IP模块根据路由表,将IP包发送给对应IP地址的WAN微型端口,WAN微型端口将其发送给RAS 当前包:[IP头部][TCP头部][应用头部][应用数据]
3 RAS将收到的初始IP包进行MPPE加密,再加上虚拟点对点链路的PPP头部,再加上GRE隧道头部,最后发给协议栈IP模块处理 当前包:[GRE头部][PPP头部][MPPE加密数据]
4 协议栈IP模块收到来自RAS的GRE包后,计算并加上校验和公网IP头部,然后发给物理网卡 当前包:[公网IP头部][GRE头部][PPP头部][MPPE加密数据]
5 物理网卡收到后,将其加上链路层头部后转换为电或光信号发送出去 当前包:[MAC头部][公网IP头部][GRE头部][PPP头部][MPPE加密数据]
接收:
1 物理网卡接收到电或光信号,转换为链路层PDU后校验各项参数后去除链路层头部返回给协议栈IP模块 当前包:[公网IP头部][GRE头部][PPP头部][MPPE加密数据]
2 协议栈IP模块收到后,校验各项参数后去除公网IP头部,判断协议字段为47(GRE),交给RAS处理 当前包:[GRE头部][PPP头部][MPPE加密数据]
3 RAS收到后,先核验并去除GRE隧道头部,再校验各项参数并去除虚拟点对点链路的PPP头部,最后根据密钥解密MPPE包,还原出初始IP包,最后再交给WAN微型端口 当前包: [IP头部][TCP头部][应用头部][应用数据]
4 WAN微型端口收到IP包后,直接交给协议栈IP模块 当前包: [IP头部][TCP头部][应用头部][应用数据]
5 协议栈IP模块收到来自RAS的IP包后,并不是走接收流程,而是进入转发数据流程,除非目标IP地址就是自己,接收流程同客户端


(5)PPTP服务端数据转发过程
发送:
1 协议栈IP模块根据原始IP包的目标IP地址查询路由表,确定IP包从哪个接口发出
2 协议栈IP模块进行重写校验和等参数和NAT转换,将原始IP包源IP地址转换为服务器的公网IP地址,同时记录NAT映射条目,用于匹配响应包,最后将包发送给物理网卡(NAT转换仅源IP地址在实际目标网络中不可路由时才会使用)
3 物理网卡收到后,将其加上链路层头部后转换为电或光信号发送出去
接收:
1 物理网卡接收到电或光信号,转换为链路层PDU后校验各项参数后去除链路层头部返回给协议栈IP模块
2 协议栈IP模块收到后,匹配NAT映射表中的条目,将目标IP地址转换为客户端虚拟IP地址,然后校验各项参数通过后进入发送操作(NAT转换仅源IP地址在实际目标网络中不可路由时才会使用)


(6)PPTP隧道断开过程
1 PPTP隧道主动断开方通过GRE数据通道发送LCP Terminate-Request报文,对端回复LCP Terminate-Ack确认,立即停止数据传输,释放MPPE加密密钥、PPP链路状态机,虚拟PPP链路断开成功
2 PPTP隧道主动断开方的RAS通过TCP控制通道发送PPTP Stop-Control-Connection-Request请求,对端RAS回复Stop-Control-Connection-Reply确认,PPTP控制通道断开成功
3 PPTP隧道主动断开方发起TCP断开请求,正常TCP四次挥手后,TCP连接断开成功
4 两端分别释放隧道所有资源:GRE隧道状态、虚拟网卡启用状态、客户端虚拟IP地址、NAT映射表项、隧道相关路由规则,隧道断开完成

http://www.jsqmd.com/news/1138237/

相关文章:

  • 激活函数的“生”与“死”:我们如何一步步拯救了神经元?
  • Bayes、决策树、SVM 图像分类对比:6类垃圾数据集上66.13% vs 52.17% vs 52.04%
  • 调整才4天就想结束?AI休整期,谁在偷偷回血
  • DVWA命令注入漏洞检测与利用实战一课一得
  • STM32-BOOT的三种启动方式
  • PgBouncer 的 statement 模式详解
  • 【Resume agent】仿超级简历模版,实现AI 面试
  • 如何快速上手kail_dnn_adapter:从安装到运行的完整指南
  • Autoware 离线建图 vs. 在线SLAM:3种场景下的NDT方案选型与性能实测
  • 反激式开关电源 PCB 设计 3 大陷阱:从变压器封装到市电测试的安全避坑指南
  • 2026免费视频去水印方法:电脑手机在线无需下载工具教程
  • 毕设项目 深度学习火焰检测识别(源码+论文)
  • 【Java实习面试算法冲刺】链表
  • 飞马SLAM100 手持激光雷达:13分钟快速模式点云解算实战(附SLAM-GO-POST 3.0配置)
  • 国产打印机二十年突围:从被专利封堵到全链路自主可控的产业逻辑
  • 构建股票预测系统的完整流程
  • 怎么样在遍历列表时动态判断阈值是否被满足并返回相应文本
  • Java毕设选题推荐:基于 SpringBoot 的月嫂排班护理服务系统的设计与实现 基于前后端分离的母婴月子健康档案管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • STAR RNA-seq比对工具:从零开始掌握转录组数据分析的终极指南
  • 数据库工程:Explain执行计划对比实战指南‌
  • 国内高校毕业生最适用的AI论文软件有哪些?
  • Rive渲染器实战:解决跨平台高性能动画渲染难题
  • SO101复现 更新ing
  • 向 Hermes Agent 提交 Bug 修复:从诊断到 CEO 亲自加固的完整记录
  • Meta开发的AI编程助手,真的懂你吗?
  • SFML跨平台多媒体开发实战:构建高性能应用的架构深度解析
  • 2026 降AIGC网站实测盘点:亲测好用,毕业季生存手册
  • Python 知识1
  • FastDFS V6.16发布:支持单服务器多实例部署,新增监控工具!
  • vba检查SolidWorks工程图是否已插入指定名称的图块的实例