本帖最后由 MakeBetter 于 2013-10-31 23:48 编辑
前面用MG2639做过一个dtu,但是不甚满意,用单片机操作模块,命令来命令去,模块容易出现很多问题,要一个一个定义来解决又麻烦,所以想直接自己拔号上网,自己实现以太网协议栈,这样来的更直接。
前面一直没空,也就没理这个问题,最近子有些空,加上之前查过ppp相关资料,资料也收集的差不多了,估摸着可以做出来了。可惜差一步就是没法寸进,特来求教各位老师。
现在描述问题如下:
以下是通信数据(转义后的)(绿色为接收到模块的,红色为对模块发送的)
7E FF 7D 23 C0 21 7D 21 7D 21 7D 20 7D 32 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 23 7D 24 C0 23 7D 27 7D 22 7D 28 7D 22 55 83 7E
7E FF 7D 23 C0 21 7D 24 7D 21 7D 20 7D 28 7D 27 7D 22 7D 28 7D 22 F8 44 7E
7E FF 7D 23 C0 21 7D 21 7D 22 7D 20 7D 2E 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 23 7D 24 C0 23 7D 24 43 7E
7E FF 7D 23 C0 21 7D 22 7D 22 7D 20 7D 2E 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 23 7D 24 C0 23 3A C0 7E
7E FF 7D 23 C0 23 7D 21 7D 21 7D 20 7D 26 7D 20 7D 20 81 29 7E
7E FF 7D 23 C0 23 7D 22 7D 21 7D 20 7D 25 7D 20 8B 3B 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 34 E5 7E
7E FF 7D 23 80 21 7D 22 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 5D 91 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 36 7D 23 7D 26 7D 20 7D 20 7D 20 7D 20 81 7D 26 7D 20 7D 20 7D 20 7D 20 83 7D 26 7D 20 7D 20 7D 20 7D 20 6E DB 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 34 E5 7E
7E FF 7D 23 80 21 7D 22 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 5D 91 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 36 7D 23 7D 26 7D 20 7D 20 7D 20 7D 20 81 7D 26 7D 20 7D 20 7D 20 7D 20 83 7D 26 7D 20 7D 20 7D 20 7D 20 6E DB 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 34 E5 7E
7E FF 7D 23 80 21 7D 22 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 5D 91 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 36 7D 23 7D 26 7D 20 7D 20 7D 20 7D 20 81 7D 26 7D 20 7D 20 7D 20 7D 20 83 7D 26 7D 20 7D 20 7D 20 7D 20 6E DB 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 34 E5 7E
7E FF 7D 23 80 21 7D 22 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 5D 91 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 36 7D 23 7D 26 7D 20 7D 20 7D 20 7D 20 81 7D 26 7D 20 7D 20 7D 20 7D 20 83 7D 26 7D 20 7D 20 7D 20 7D 20 6E DB 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 34 E5 7E
7E FF 7D 23 80 21 7D 22 7D 21 7D 20 7D 2A 7D 23 7D 26 7D 2A 7D 20 7D 20 7D 21 5D 91 7E
7E FF 7D 23 80 21 7D 21 7D 21 7D 20 7D 36 7D 23 7D 26 7D 20 7D 20 7D 20 7D 20 81 7D 26 7D 20 7D 20 7D 20 7D 20 83 7D 26 7D 20 7D 20 7D 20 7D 20 6E DB 7E
去掉转义字符后如下:
7E FF 03 C0 21 01 01 00 12 02 06 00 0A 00 00 03 04 C0 23 07 02 08 02 55 83 7E //LCP协商请求:转义字符表、PAP认证方式、压缩头部、压缩协议
7E FF 03 C0 21 04 01 00 08 07 02 08 02 F8 44 7E //我:回应Reject,拒绝头部压缩和协议域压缩。(因为实现协议方便一些,所以就拒绝掉这些)
7E FF 03 C0 21 01 02 00 0E 02 06 00 0A 00 00 03 04 C0 23 04 43 7E //模块再次请求LCP协商:只需要字符表转义和PAP认证了
7E FF 03 C0 21 02 02 00 0E 02 06 00 0A 00 00 03 04 C0 23 3A C0 7E //我:协商确认 --完成LCP链路协商
7E FF 03 C0 23 01 01 00 06 00 00 81 29 7E //我:接着发送PAP认证请求:用户名和密码都置空。
7E FF 03 C0 23 02 01 00 05 00 8B 3B 7E //模块回复PAP认证通过
7E FF 03 80 21 01 01 00 0A 03 06 0A 00 00 01 34 E5 7E //模块同时立该发送IPCP协商请求,主机ip是:10.0.0.1
7E FF 03 80 21 02 01 00 0A 03 06 0A 00 00 01 5D 91 7E //我:接受,回复确认。 -------问题出在这里,这条确认怎么检查也没有问题,模块就是不认,如下面的数据全部是重复。
7E FF 03 80 21 01 01 00 16 03 06 00 00 00 00 81 06 00 00 00 00 83 06 00 00 00 00 6E DB 7E //我:发送完IPCP确认后,继续发送IPCP请求:包括本机IP、主DNS IP、备用DNS IP,因为不知道,全置0
7E FF 03 80 21 01 01 00 0A 03 06 0A 00 00 01 34 E5 7E
7E FF 03 80 21 02 01 00 0A 03 06 0A 00 00 01 5D 91 7E
7E FF 03 80 21 01 01 00 16 03 06 00 00 00 00 81 06 00 00 00 00 83 06 00 00 00 00 6E DB 7E
7E FF 03 80 21 01 01 00 0A 03 06 0A 00 00 01 34 E5 7E
7E FF 03 80 21 02 01 00 0A 03 06 0A 00 00 01 5D 91 7E
7E FF 03 80 21 01 01 00 16 03 06 00 00 00 00 81 06 00 00 00 00 83 06 00 00 00 00 6E DB 7E
7E FF 03 80 21 01 01 00 0A 03 06 0A 00 00 01 34 E5 7E
7E FF 03 80 21 02 01 00 0A 03 06 0A 00 00 01 5D 91 7E
7E FF 03 80 21 01 01 00 16 03 06 00 00 00 00 81 06 00 00 00 00 83 06 00 00 00 00 6E DB 7E
7E FF 03 80 21 01 01 00 0A 03 06 0A 00 00 01 34 E5 7E
7E FF 03 80 21 02 01 00 0A 03 06 0A 00 00 01 5D 91 7E
7E FF 03 80 21 01 01 00 16 03 06 00 00 00 00 81 06 00 00 00 00 83 06 00 00 00 00 6E DB 7E
..... 重复,直到挂断
如上数据,分析过程正常往下走:
【模块】LCP请求 --> 【我】拒绝协议域压缩和头压缩 --> 【模块】LCP请求 --> 【我】确认请求 --> 【我】发送PAP认证 --> 【模块】确认 --> 【模块】发送IPCP协商请求 --> 【我】确认 --> 【我】发送IPCP请求 ....
如上所示,绿色标示过程走的很顺畅,一直到红色过程模块就再也不回复我,而是重复向我发送IPCP请求(说明我的回复无效),
其中,我曾试过许多其他它的情况,如:在确认IPCP协议时,采用前面协调的转义方案来发送、发送确认时,不带数据等,都无效。
不知我的IPCP协议过程错在哪里,网上的资料太片面,IPCP协议详细格式并未完全说清楚,不知大家有没有这样实现过,给我一些指导或是示例。在此感谢!
|