转:http://blog.csdn.net/yangzheng_yz/article/details/11526747

PPP(Point to Point Protocol,点对点协议)协议是为在两个对等实体间传输数据包,建立简单连接而设计的。这种连接提供了同时的双向全双工操作,并且假定数据包是按顺 序投递的。PPP协议还满足了动态分配IP地址的需要,并能够对上层的多种协议提供支持。PPP在TCP/IP协议集中是位于数据链路层的协议,其物理实 现方式有两种:一种是通过以太网口(这时称之为PPPoE,即PPP over Ethernet),另一种就是利用普通的串行接口。本文主要讨论的就是后一种PPP协议的具体实现过程。

  PPP协议是目前应用得最广的一种广域网协议,它主要由以下3部分组成:(1) 在串行线路中对上层数据包的封装(HDLC);(2) 用于建立、配置和检测数据链路连接的链路控制协议(LCP) ;(3) 用于建立和配置不同网络层协议的网络控制协议(NCP) 协议簇。下面从PPP协议的封装结构和PPP链路协商两个部分对PPP协议进行详细剖析。

PPP协议封装

  PPP 封装用于消除上层多种协议数据包的歧义,加入帧头、帧尾, 使之成为互相独立的串行数据帧。PPP 采用HDLC 的组帧格式,它是面向字符的。在完整的PPP 帧中,帧头由帧开始标记、地址域、控制域、协议域组成,帧尾由校验域、帧结束标记组成(如表1 所示)。

  表1:PPP帧封装格式

标记

1字节

0X7E

地址

1字节

0XFF

控制

1字节

0X03

协议

2字节

编码

1字节

ID

1字节

长度

2字节

载荷

0-1496字节

校验和

2字节

标记

1字节

0X7E

表2:PPP协议代码                           表3:编码对应含义

协议代码

对应协议

0XC021            LCP协议

0XC023            PAP协议

0XC223            CHAP协议

0X8021            IPCP协议

0X0021            IP协议

编码值

对应含义

1                 配置请求(Req)

2                 接受配置(Ack)

3        配置请求接受,其他拒绝(Nak)

4        配置请求不认识或不被接受(Rej)

5                 终止链接

6                 终止确认

PPP帧以0x7e作为一帧的开始和结束的标记,占一个字节。地址域和控制域固定的值,分别为0xff 和0x03,各占一个字节。协议域为两个字节,在实际应用中因数据包的不同而不同。PPP 帧具有错误检测机制,校验和中填写的就是发送方对帧数据的检验码,接收方在接收到该帧后对数据做校验,通过校验来判断数据帧在传送过程中是否有误。其中校 验和采用的是CRC算法,校验范围从地址字节到校验和位置之前的最后一个数据载荷。

PPP协议包含丰富的内容, 它能实现包括IP协议在内的多种网络协议的封装,那么,如何区分某个PPP包究竟是哪种数据协议包?这就是PPP协议帧第四、五两个字节关心的问题,表2列出常用的协议代码及其对应的协议。

PPP链路协商

通常,在一次PPP链路会话中,协商的双方并没有区分谁是服务器端谁是客户端。为了叙述方便,这里把申请请求PPP服务 的一端称为用户端,而把能提供PPP服务的机构称为ISP(比如本项目中的联通CDMA网络)。一般来讲,与ISP建立一次正常的PPP链路连接,要经历 下面3个阶段: (1)LCP协商,建立和配置连接以及帧参数设置等;(2)用户认证,这里将选择PAP认证;(3)NCP协商,即负责IP地址的动态分配等事务。这里把 常用的编码字节的意义列成上表3,这些代码对上述协议都适用。至于PPP封装帧结构中的ID字节,表示的是PPP包的序号,这在协商阶段用来识别该对哪个 包进行应答。需要说明的是,当PPP报文封装的是IP报文时,则已经不存在编码和ID部分了。

3 PPP协议在联通CDMA网络中的具体实现

PPP协议的格式虽然严格遵循既定标准,但不同的ISP可以有其自己的协商规范,也就是说协商的过程会因为使用网络的不同而有差别。因此PPP技术的应 用,关键的问题是要弄清楚不同的ISP提供商它们各自的一套协商会话流程,一旦协商过程完成,用户获得ISP分配的动态IP,剩下的工作只不过是把用户数 据以IP报文形式封装在一个个PPP报文中进行传输了。下图2就是利用中国联通CDMA网络实现视频传输的协商阶段的全过程。

图2 PPP协商过程数据帧实例

7E

FF 7D 23

C0 21

7D 21

7D 21

7D 20 7D 34

7D 22 7D 26 7D 20 7D 20 7D 20 7D 20

7D 25 7D 26

52 7D 38 7D 30 44

7D 27 7D 22

7D 28 7D 22

6E E1

7E

                   

1 U

7E

FF 7D 23

C0 21

7D 21

7D 21

7D 20 7D 3D

7D 21 7D 24 7D 25 EA

7D 22 7D 26 7D 20 7D 20 7D

20 7D 20

7D 23 7D 25 C2 23 7D 25

7D 25 7D 26 2F 7D 35 B2 7D 31

7D 27 7D 22

7D 28 7D 22

7D

27 E6

7E

                         

2 I

7E

FF 7D 23

C0 21

7D 22

7D 21

7D 20 7D 34

7D 22 7D 26 7D 20 7D 20 2D 20 7D 20

7D 25 7D 26

52 7D 38 7D 30 44

7D 27 7D 22

7D 28 7D 22

85 88

7E

                   

3 I

7E

FF 7D 23

C0 21

7D 23

7D 21

7D 20 7D 28

7D 23 7D 24 CO 23

22 48

7E

4 U

7E

FF 7D 23

C0 21

7D 21

7D 22

7D 20 7D 3C

7D 21 7D 24 7D 25 EA

7D 22 7D 26 7D 20 7D 20 7D

20 7D 20

7D 23 7D 24 C0 23

7D 25 7D 26 2F 7D 35 B2 7D 31

7D 27 7D 22

7D 28 7D 22

9F 40

7E

                           

5 I

7E

FF 7D 23

C0 21

7D 22

7D 22

7D 20 7D 3C

7D 21 7D 24 7D 25 EA

7D 22 7D 26 7D 20 7D 20 7D

20 7D 20

7D 23 7D 24 C0 23

7D 25 UD 26 2F 7D 25 B2 7D 31

7D 27 7D 22

7D 28 7D 22

AC 7D 3A

7E

                         

6 U

7E

FF 3

C0 23

1

1

0 E

4 43 41 52 44

4 43 41 52 44

26 C2

7E

7 U

7E

C0 23

2

1

0 5

0

FD 30

7E

8 I

7E

80 21

1

3

0 10

2 6 0 2D F 0

3 6 DC C0 0 9

46 D8

7E

9 I

7E

FF 3

80 21

1

1

0 16

3 6 0 0 0 0

81 6 0 0 0 0

83 6 0 0 0 0

6E DB

7E

10U

7E

FF 3

80 21

4

3

0 A

2 6 0 2D F 0

F5 54

7E

11U

7E

80 21

3

1

0 16

3 6 DC CF 57 8C

81 6 DC C0 0 82

83 6 DC C0 8 3A

18 39

7E

12I

7E

FF 3

80 21

1

2

0 16

3 6 DC CF 57 8C

81 6 DC C0 0 82

83 6 DC C0 8 3A

67 AA

7E

13U

7E

80 21

1

4

0 A

3 6 DC C0 0 9

62 4C

7E

14I

7E

80 21

2

2

0 16

3 6 DC CF 57 8C

81 6 DC C0 0 82

83 6 DC C0 8 3A

F1 C9

7E

15I

7E

FF 3

80 21

2

4

0 A

3 6 DC C0 0 9

75 D6

7E

16U

在上图中,每个报文最左边的数字是协商过程的报文序号,紧接着的U字母代表的是申请PPP服务的用户发出的PPP协商报文,而I则代表ISP发出的PPP协商报文,这里具体就是联通的CDMA网络。下面对整个协商过程进行详细解析:

1)在真正进行PPP协商之前,还有一个AT命令拨号过程,联通CDMA要求拨#777申请数据业务,而Q2358C模块的拨号命令是ATD,因此 合起来就是:ATD#777;,注意,Q2358拨号命令后面要加一个分号;拨号完后,要等待CDMA返回“CONNECT”,这时候才能进行后续的 PPP协商;

2)第一个起始PPP问旬包必须由用户发起,否则联通CDMA不会响应。包的内容见上图中第1序号包,这里要说明一点:在PPP协商的LCP阶段, 除了起始和结束的PPP报标志符7E,报文中任何地方的值小于0x20的字符,以及字符7F,7E和7D,都要转义,转义的方法是把其值和0x20异或后 的值紧接着7D发送。

3)从第1序号报的第三个框的“C0 21”字符结合上表2可以看出,这是一个LCP报文,第四个框“7D 21”就是01,根据上表3可以看出这是用户发出的请求报,而根据第五个框的内容知道这是用户发出的第一个报,第六个框是整个报文的长度,占两个字节,后 面的内容是各种选项,倒数第二个框的内容则是FCS校验值填充的地方,占两个字节;

4)CDMA接受到第1序号报后,将先后发送第2序号和第3序号LCP报,其中第2序号报是请求报,请求用户对其携带到选项进行同意或者拒绝,如2 号报第7个框“7D 21 7D 24 7D 25 EA”中“7D 21”表示第1个LCP协商选项,其长度为“7D 24”即4个字节,后面两个字节“7D 25 EA”即“05 EA”是其选项值,整个1号选项的用途就是规定PPP报文最大数据有限载荷是5EA,也就是1514个字节,其他选项的结构的理解与此完全一样,后面不再 赘述。关于LCP报文各种选项的意义,可参阅相关RFC文档;

5)CDMA的发出的第3序号报是同意用户发出的第1序号报的,这可以从其第四个框的值“7D 22”也即02,根据表3,其表示接受配置的意思;

6)从第4序号报的第4框内容“7D 23”即03,结合表3,可以得知用户拒绝了CDMA请求报中选项3的配置,表示用户不接受CHAP(C2 23)认证,用户只接受PAP认证(C0 23);

7)CDMA收到用户刚才的反应后,马上发出第2个请求报,这时候把第3选项的配置改成了用户希望的PAP认证(C0 23),见上图5号报;

8)第6序号报表示用户同意CDMA的LCP配置,这里要说明一点,选项2是设置是否要对0x20以下的字符值进行转义的,因为选项2的值是全0,则说明以后的PPP报文不再对值为0x20以下的值转义,但是对于值为7D、7E、7F的字符依然要进行转义发送;

9)从第7序号报开始,LCP协商过程结束,现在开始进行的是PAP认证,联通的PAP认证的用户名和密码都是“CARD”,也即ASCII值“0x43、0x41、0x52、0x44”;第8序号报表示CDMA通过了用户的认证;

10)根据表2,可以看出,第9序号报开始是NCP会话也即IPCP会话阶段,CDMA请求用户是否同意其网关IP地址:DC.C0.0.9,见其倒数第3个框也即3号选项所包含的值;

11)之后的过程完全可以按照上面类推分析下去,当全部16个PPP报文会话完毕后,将获得四项关健值:即分配的IP地址: DC.CF.57.8C; 远程网关:DC.C0.0.9;主DNS:DC.C0.0.82;次DNS:DC.C0.8.3A。之后就可以嵌入真正的IP数据报进行数据打包传输。

ppp协议解析二的更多相关文章

  1. PPP协议解析一

    转:http://blog.csdn.net/yangzheng_yz/article/details/11526475 在网上搜集了一些有关PPP的资料,整理了一下,不能说是原创,仅供大家学习研究. ...

  2. SMB/CIFS协议解析二

    一.拷贝文件(远程-->本地) 1.SMB_COM_NT_CREATE_ANDX (0xa2)       打开文件,获取文件名,获得读取文件的  总长度. 2.SMB_COM_READ     ...

  3. [网络技术][转]PPTP协议解析

    PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control Connection Protol 控制层连接是基于T ...

  4. VPN column: PPTP(2)--PPTP协议解析

    zhu_hit原创,如需转载请注明出处.Thanks. PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control ...

  5. PPP协议总结

    PPP协议总结 PPP协议是一种在点到点链路上传输.封装网络数据包的数据链路层协议,PPP支持同步/异步方式的链路上. 一. PPP支持的链路类型 1. 同步和异步专线 2. 同步拨号链路. 3. 异 ...

  6. [na]ppp协议链路认证-chap认证流程

    Point-to-Point Protocol (PPP)协议是广域网链路的一种协议,不同于局域网的ethernetII协议 PPP协商过程,分三步:LCP.认证.NCP. 一 协议概述 PPP包含以 ...

  7. HTTP协议(二)header标头说明

    HTTP协议(二):header标头说明 Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从 ...

  8. 路由器配置PPP协议 CHAP验证 PAP验证

    路由器配置PPP协议 CHAP验证 PAP验证 来源 https://www.cnblogs.com/tcheng/p/5967485.html PAP是两次握手,明文传输用户密码进行认证:CHAP是 ...

  9. 协议解析Bug分析

    协议解析Bug分析 源自邮件协议RPC(远程过程调用)处理的Request请求数据包的bug.        一.Bug描写叙述 腾讯收购的Foxmailclient能够作为outlookclient ...

随机推荐

  1. centos7 vim环境优化

    centos7默认是使用vi,而不是使用vim,所以,我们需要修改一下vi的别名,并且,我们使用neovim,vi毕竟还是有很多功能比较原始 所以 yum install neovim -ycat & ...

  2. 修改profile导致bash不能用的补救方法

    输入这条命令:export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin 由于shell命令基本都在/usr/bin,/usr/sbin,/bin ...

  3. NameNode 和 SecondaryNameNode

    1. NN 和 2NN 工作机制 NameNode 会产生在磁盘中备份元数据的FsImage; 每当元数据有更新或者添加数据时,修改内存中的元数据并追加到Edits中; SecondaryNameNo ...

  4. vimium快捷键修改

    vimium是一款很好用的浏览器插件,可以用键盘来进行一些操作. 需要在浏览器的扩展程序商店里下载相应的插件,然后可以右键点击插件打开选项进行个性化的配置. map+字母+功能描述 功能描述从opti ...

  5. poj3107(树的重心,树形dp)

    题目链接:https://vjudge.net/problem/POJ-3107 题意:求树的可能的重心,升序输出. 思路:因为学树形dp之前学过点分治了,而点分治的前提是求树的重心,所以这题就简单水 ...

  6. SpringBoot以WAR包部署遇到的坑---集合贴

    ⒈忽略tomcat的context-path 方式一: 停止tomcat服务,删除tomcat安装目录的webapps目录下的ROOT目录,将打成的WAR包重命名为ROOT.war,重启tomcat服 ...

  7. 剑指offer43:左旋转字符串(字符串):对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。

    1 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”a ...

  8. codeforces 1249C1 + 1249C2 (贪心)

    (点击此处查看原题) 题意分析 给出一个数n,求一个数m,使得m >= n ,并且m 满足: m = ∑ 3 ^ i * x (x = 0 或者 x = 1 ),求出满足条件的最小的m 解题思路 ...

  9. python — 函数基础知识(二)

    目录 1 返回值 2 作用域 3 函数小高级 4 函数中高级 1 返回值 def func(arg): # .... return 9 # 返回值为9 默认:return None val = fun ...

  10. 第十三章 ZYNQ-MIZ701 TIMER定时器中断

      上篇文章实现了了PS接受来自PL的中断,本片文章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 本文所使用的开发板是Miz701 PC 开发环 ...