转自:http://blog.csdn.net/zhu_hit/article/details/5698958
在未来几天会总结一下PPTP的工作过程,分为以下3篇讲述。
1. PPTP连接过程;
2. PPTP协议解析;
3. PPTP的路由。
由于我是工程经验先于理论学习,所以讲述过程也是先实现后理论,如果你没有网络工程经验的话可能会比较难看懂。
首先,我们从解析packets来讲述PPTP的连接过程。
下面按照发包的顺序解释连接过程:
一、建立TCP连接
1. Client端向PPTP Server的1723端口发TCP SYN包,请求建立TCP连接;
2. PPTP Server接受TCP连接请求,回SYN ACK;
二、建立PPTP控制层连接
3. PPTP Client发送Start Control Connection Request;(这里有一点需要注意:TCP的三次握手协议只运行了SYN和SYN ACK,在上面的协议实现中第三个ACK报不是单独发送的,而已经是带有效载荷的数据包了。实际很多实现都是这样做的,请不要死记书本上的“三次”握 手。)
4. PPTP Server回Start Control Connection Reply。在PPTP的这几个数据包都是基于TCP连接的,需要特别注意的是TCP Flag中的PUSH位都是被置成1的。那么,PUSH是干嘛的呀?PUSH被置1表示发送端要求接收端在收到该message后立即送到应用层,而不是 等到缓冲区满再发往应用层&