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

📅 2026/7/7 1:25:45
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 等更安全的现代 VPN 协议取代。1PPTP配置过程1 服务端开启RAS功能2 RRAS配置界面启用VPN3 RRAS配置界面配置虚拟IP地址池4 注册允许接入的用户及其密码5 配置防火墙、NAT放通PPTP数据包6 客户端输入PPTP服务器IP地址用户名和密码发起连接2PPTP隧道建立过程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-AckLCP协商成功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载荷]3PPTP客户端数据收发过程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头部判断协议字段为47GRE交给RAS处理 当前包[GRE头部][PPP头部][MPPE加密数据]3 RAS收到后先核验并去除GRE隧道头部再校验各项参数并去除虚拟点对点链路的PPP头部最后根据密钥解密MPPE包还原出初始IP包最后再交给PPTP虚拟网卡 当前包 [IP头部][TCP头部][应用头部][应用数据]4 虚拟网卡收到收到后直接交给协议栈IP模块 当前包 [IP头部][TCP头部][应用头部][应用数据]5 协议栈IP模块来自RAS的IP包后核验并去除IP头部判断协议字段为06TCP发给协议栈TCP模块 当前包[TCP头部][应用头部][应用数据]6 协议栈TCP模块收到后核验并去除TCP头部根据端口号发送给对应的应用程序 当前包[应用头部][应用数据]7 应用程序成功收到应用数据虚拟网卡相当于连接RAS和协议栈的双向数据通道4PPTP服务端数据收发过程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头部判断协议字段为47GRE交给RAS处理 当前包[GRE头部][PPP头部][MPPE加密数据]3 RAS收到后先核验并去除GRE隧道头部再校验各项参数并去除虚拟点对点链路的PPP头部最后根据密钥解密MPPE包还原出初始IP包最后再交给WAN微型端口 当前包 [IP头部][TCP头部][应用头部][应用数据]4 WAN微型端口收到IP包后直接交给协议栈IP模块 当前包 [IP头部][TCP头部][应用头部][应用数据]5 协议栈IP模块收到来自RAS的IP包后并不是走接收流程而是进入转发数据流程除非目标IP地址就是自己接收流程同客户端5PPTP服务端数据转发过程发送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地址在实际目标网络中不可路由时才会使用6PPTP隧道断开过程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映射表项、隧道相关路由规则隧道断开完成