您的位置:首页 > 编程语言 > PHP开发

【请求讨论】科来2010技术交流版对l2tp的错位解码问题 推荐

2010-09-25 17:04 591 查看
最近在研究L2tp的数据包结构,为捕获数据包,我自己搭建一个简单的网络模拟环境。这个环境是这样的,利用了VMware模拟网卡VMware Network Adapter VMnet2与cisco的高级模拟器工大瑞普桥接。Cisco模拟器的的路由器做L2tp服务器,真实PC作为L2tp客户端接入。实验是成功了,但在我用科来2010技术交流版分析l2tp的数据包结构的时候,发现L2tp数据包结构的Tunnel ID与L2tp的原理过程不符合,于是我多次重新抓包,问题依旧。本以为是不是自己的科来2010技术交流版出问题了,于是,我重装了最新的科来2010技术交流版(2356版本),又装了科来6.9技术交流版的,又尝试在多台PC上装科来分析这个数据包,都是这样的问题。后来用Wireshark网络分析仪分析,分析该数据包结构,完全符合L2tp的原理过程。
为弄清楚到底哪个是对了,我首先找到了L2tp协议的RFC文档(RFC 2661),找到了L2tp数据包结构描述和规定。并同时用科来2010技术交流版和Wireshark对该L2tp数据包,一一对比分析问题所在。经发现科来技术交流版,在L2tp报文头部中的版本后开始错位解码,以致出现与原理不符合的问题。结合RFC文档,现发表个人观点,请求大家讨论,判断是不是科来技术交流版的问题所在。(图片原件,L2tp数据包,RFC文档都将在附件共享,网页看不清图,请双击放大)
首先给出的图是来自L2tp的RFC 2661文档中对L2tp数据包结构描述图:



从图中可以清楚地看到L2tp头部的结构,注意图中ver就是版本的version的缩写,从图来看,版本从第13个比特到第16个比特(图中是比特标识从0开始,我说的第13个是从左边数起的位置)占了4个比特,大家注意这个位子,下面我说的错位就是从这里开始的。
下面是两张L2tp解码的全景图,分别用科来技术交流版和wireshark解码的:



科来捕获的全景图




Wireshark捕获的全景图

从两图来看,同一个数据包下面的阴影编码,完全一样(十六进制表示的)。两个网络分析软件同时对比分析,就发现了科来技术交流版的错位解码问题,不符合L2tp的RFC文档的规定。下面证明科来技术交流版的解码错位问题。









两张科来图中的大红框表示的L2tp头部结构开始到本版位为止的结构图,小红框表示相应的编码。编码是:C8 02,十六进制表示。与RFC 2661报文结构、每个代码的作用描述基本一致。但大红框中的数和点所组成的个数不够形象的表示了占用了16个比特。这些目前没有影响到L2tp版本位的解码。下图wireshark就比较形象表示了占用了16比特。





在L2tp数据结构中,版本位后,就是长度位,从RFC的规定来看,也是占用16比特。但科来技术交流版开始出现了错误解码。如图:




图中阴影表示相应的编码,从图中来看,在解码长度位的时候,错误占用了版本位到版本位左边的8个比特。编码C8 02是L2tp头部的第一个16比特,根据RFC文档,长度位开始应该是下一个16比特,正确编码应该是:00 6C才对。从这里开始科来技术交流版对L2tp的解码全部错位8个比特进行解码,造成与L2tp原理不符合。下图是wirehark的正确解码图:




由于版本使用的是科来的技术交流版,不知道科来专家级版本有这个问题没。以上是我的个人观点,不对之处,还请大家批评指正。

附件:http://down.51cto.com/data/2356803
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐