Chinaunix首页 | 论坛 | 博客
  • 博客访问: 581965
  • 博文数量: 146
  • 博客积分: 5251
  • 博客等级: 大校
  • 技术积分: 1767
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-10 15:58
文章分类
文章存档

2010年(12)

2008年(129)

2007年(5)

我的朋友

分类: LINUX

2008-11-07 17:31:25

首先,我们看一下PPTP的用户空间实现的系统框架图

看到这个图,我们会发现与PPPOE用户空间实现类似,下面讲一下数据流程:

首先PPTP会与PPTP SERVER进行控制连接,接下来就会走进PPPD中进行PPP协议的交互,建立PPP连接后,就会产生PPP0接口。

下面看看连接建立后,报文是如何走的

当收到有报文从ETH口进来时,PPTP会先解去GRE报头,然后就剩下PPP报文,送到伪终端主设备,到达伪终端从设备,送入PPP0接口单元,PPP0驱动解开压缩与加密的PPP报文后将报文送到上层进行处理。

当本机要发送报文时,首先发送到PPP0驱动接口,压缩并加密,变成PPP报文发送到伪终端从设备,到达伪终端主设备,到达PPTPPPTP加上GRE头,通过RAW SOCKETETH口发送出去。

上面的数据流必须要通过伪终端进行连接PPTPPPP0,这是性能下降的关键,所以如果去掉伪终端而让PPP0PPTP中的RAW SOCKET直接绑定,这样数据传输性能势必会有大的提升。

从上面的分析我们可以看到,在PPTP中主要工作就是一开始建立连接的控制过程,然后就是在建立连接后的对报文进行GRE封装。这与PPPOE的运行机制很相似。所以我们可以仿照PPPOE内核空间实现,实现PPTP内核空间功能。

接下来工作主要是两部:

一是在内核协议栈中添加IP GRE协议SOCKET套接口。

二是将PPTP用户空间的实现进行改写,放到PPPD中以插件的方式运行。

阅读(1455) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~