PPP协商过程分析

     以前调试3G模块的时候自己总结的一个文档,今天整理时发现,分享出来给需要的人参考。

     拨号时候有时候回失败,但是相关的系统代码又不开放,所以当时只能从协议层去分析。


      

一、  PPP简介

用户接入Internet,在传送数据时都需要有数据链路层协议,其中最为广泛的是串行 线路网际协议(SLIP)和点对点协议(PPP)。由于SLIP具有仅支持IP等缺点,主要用于低速(不超过19.2kbit/s)的交互性业务,它并未成为Internet的标准协议。为了改进SLIP,人们制订了点对点PPP(Point-to-Point Protocol)。RFC1661、RFC1662、RFC1663。

PPP帧格式和HDLC帧格式相似,如图1所示。二者主要区别:PPP是面向字符的,而HDLC是面向位的。

图1 PPP帧格式

可以看出,PPP帧的前3个字段和最后两个字段与HDLC的格式是一样的。标志字段F为0x7E(0x表示7E),但地址字段A和控制字段C都是固定不变的,分别为0xFF、0x03。PPP协议不是面向比特的,因而所有的PPP帧长度都是整数个字节。

与HDLC不同的是多了2个字节的协议字段。协议字段不同,后面的信息字段类型就不同。如:

0x0021——信息字段是IP数据报

0xC021——信息字段是链路控制数据LCP

0x8021——信息字段是网络控制数据NCP

0xC023——信息字段是安全性认证PAP

0xC025——信息字段是LQR

0xC223——信息字段是安全性认证CHAP

当信息字段中出现和标志字段一样的比特0x7E时,就必须采取一些措施。因PPP协议是面向字符型的,所以它不能采用HDLC所使用的零比特插入法,而是使用一种特殊的字符填充。具体的做法是将信息字段中出现的每一个0x7E字节转变成2字节序列(0x7D,0x5E)。若信息字段中出现一个0x7D的字节,则将其转变成2字节序列(0x7D,0x5D)。若信息字段中出现ASCII码的控制字符,则在该字符前面要加入一个0x7D字节。这样做的目的是防止这些表面上的ASCII码控制字符被错误地解释为控制字符。

 

二、  拨号过程分析

1、  首先,通过AT命令

AT+CGDCONT=1,”IP”,”3GNET”

设置接入点APN。

              ATD*99#进行拨号,成功后,会有回复

              CONNECT

              这个时候就进入了PPP协商过程。

            

2、  MODEM向上层发送报文:

   7e ff7d 23 c0 21 7d 21 7d 21 7d 20 7d 2e 7d 22 7d 26 7d 20 7d 2a 7d 20 7d 20 7d 23 7d 24 c0 23 f3 4d 7e

              C0 21,代表这是一条LCP报文,7D 21 ->01 代表是Configure-Request

              说明是MODEM向上层请求建立LCP链路。  

3、  上层向MODEM发送报文:

7e ff 7d 23 c0 21 7d 23 7d 21 7d20 7d 28 7d 27 7d 22 7d 28 7d 22 f6d8 7e

C0 21,代表这是一条LCP报文,7D 23 ->03 代表是Configure-Nak

上层可能还没准备好,拒绝建立链路。

 

4、  MODEM向上层发送报文:

   7e ff7d 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

              C0 21,代表这是一条LCP报文,7D 21 ->01 代表是Configure-Request

              上层请求失败,MODEM再次请求建立链路。

 

5、  上层向MODEM发送报文:

7e ff 7d 23 c0 21 7d 22 7d 22 7d20 7d 2e 7d 22 7d 26 7d 20 7d 2a7d 20 7d 20 7d 23 7d 24 c0 23 3a c0 7e

C0 21,代表这是一条LCP报文,7D 22 ->02 代表是Configure-Ack

这次上层同意建立链路,LCP链路建成。

 

6、  上层向MODEM发送报文:

   7e f3 c0 23 1 0 0 6 0 0 c5 22 7e

              C0 23,代表是一条安全性认证PAP报文,01代表是Authenticate-Request

   上层向MODEM发起密码认证请求,密码默认都为空。

   PasswordAuthentication Protocol密码认证协议。

 

7、  MODEM向上层发送报文:

   7e f3 c0 23 2 0 0 d 8 4c 6f67 69 6e 20 4f 4b 32 597e

              C0 23,代表是一条安全性认证PAP报文,02代表是Authenticate-Ack

   密码认证通过,下一步会去建立IP层协议。

 

8、  上层向MODEM发送报文:

   7e f3 8021 1 0 0 28 2 6 02d f 0 3 6 0 0 0 0 81 6 0 0 0 0 82 6 0 0 0 0 83 6 0 0 0 0 84 6 0 0 0 0 a4 ab 7e

   80 21,代表是NCP报文,01代表是Configure-Request

   00 0306 00 00 00 00 请求对方承认自己使用IP地址0.0.0.0,0.0.0.0是个特殊值,根据RFC1332,这实际上是表示请求对方为自己指定IP地址。

后面的81、82、83、84四个配置选项分别表示希望对方为自己指定:主DNS地址、主Netbios名字服务器地址(NBNS)、辅助DNS地址、辅助NBNS地址。

 

9、  MODEM向上层发送报文:

   7e ff3 80 21 4 0 0 16 2 6 0 2d f 0 82 6 0 0 0 0 84 6 0 0 0 0d 70 7e

   80 21,代表是NCP报文,04代表是Configure-Reject

   MODEM拒绝82,84,即拒绝主Netbios名字服务器地址(NBNS)和辅助NBNS地址的申请。

 

10、   上层向MODEM发送报文:

    7e f380 21 1 1 0 16 3 6 0 00 0 81 6 0 0 0 0 83 6 0 0 0 0 6e ffffffdb 7e

80 21,代表是NCP报文,01代表是Configure-Request

上层收到MODEM的拒绝后,改变策略,只请求IP地址,主DNS和辅助DNS。

 

           11、MODEM向上层发送报文:

7e ff 3 80 21 3 1 0 16 3 6 : 81 6 d2 16 54 3 83 6 d3 5f 1 61 e8 9e 7e

80 21,代表是NCP报文,03代表是Configure-Nak

MODEM回复上层,请按照这样的地址来申请:

IP:ac12 2 5b 即172.18.2.91

主DNS:d216 54 3 即210.22.84.3

辅助DNS:d35f 1 61 即211.95.1.97

 其实代表已经申请到了IP地址。

 

12、上层向MODEM发送报文:

7e f3 80 21 1 2 0 16 3 6 ac 12 2 5b 81 6 d2 16 54 3 83 6 d3 5f 1 61 f7 9d 7e

             上层就按照MODEM的回应,请求新的IP,DNS

 

13、MODEM向上层发送报文::

     7eff 3 80 21 2 2 0 16 3 6 ac12 2 5b 81 6 d2 16 54 3 83 6 d3 5f1 61 1 6e 7e

   80 21,代表是NCP报文,02代表是Configure-Ack

请求IP,DNS成功。连接建立完成。

 

           至此,PPP协商过程就算完成了,相当于程序中拨号连接已经建立,一旦建立好拨号连接,就可以在这个上面发送IP报文(00 21 ),即进行SOCKET编程。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值