ppp协议解析二

转: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数据报进行数据打包传输。

原文地址:https://www.cnblogs.com/newjiang/p/7625500.html