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数据报进行数据打包传输。
ppp协议解析二的更多相关文章
- PPP协议解析一
		
转:http://blog.csdn.net/yangzheng_yz/article/details/11526475 在网上搜集了一些有关PPP的资料,整理了一下,不能说是原创,仅供大家学习研究. ...
 - SMB/CIFS协议解析二
		
一.拷贝文件(远程-->本地) 1.SMB_COM_NT_CREATE_ANDX (0xa2) 打开文件,获取文件名,获得读取文件的 总长度. 2.SMB_COM_READ ...
 - [网络技术][转]PPTP协议解析
		
PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control Connection Protol 控制层连接是基于T ...
 - VPN column: PPTP(2)--PPTP协议解析
		
zhu_hit原创,如需转载请注明出处.Thanks. PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control ...
 - PPP协议总结
		
PPP协议总结 PPP协议是一种在点到点链路上传输.封装网络数据包的数据链路层协议,PPP支持同步/异步方式的链路上. 一. PPP支持的链路类型 1. 同步和异步专线 2. 同步拨号链路. 3. 异 ...
 - [na]ppp协议链路认证-chap认证流程
		
Point-to-Point Protocol (PPP)协议是广域网链路的一种协议,不同于局域网的ethernetII协议 PPP协商过程,分三步:LCP.认证.NCP. 一 协议概述 PPP包含以 ...
 - HTTP协议(二)header标头说明
		
HTTP协议(二):header标头说明 Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从 ...
 - 路由器配置PPP协议 CHAP验证 PAP验证
		
路由器配置PPP协议 CHAP验证 PAP验证 来源 https://www.cnblogs.com/tcheng/p/5967485.html PAP是两次握手,明文传输用户密码进行认证:CHAP是 ...
 - 协议解析Bug分析
		
协议解析Bug分析 源自邮件协议RPC(远程过程调用)处理的Request请求数据包的bug. 一.Bug描写叙述 腾讯收购的Foxmailclient能够作为outlookclient ...
 
随机推荐
- Windows下Apache+PHP+MySQL搭建web服务器
			
Apache+PHP+MySQL搭建服务器 工欲善其事必先利其器. 最近由于电脑出了问题不得不重新安装需要的文件,代码什么的都没了,以前也没怎么写过东西这回就先试试手,写的不是太好,希望大家不要介意哈 ...
 - 什么是ECS?
 - 【Gstreamer开发】用 GStreamer 简化 Linux 多媒体开发
			
原文:http://www.ibm.com/developerworks/cn/linux/l-gstreamer/ 一.基本概念 GStreamer 作为 GNOME 桌面环境推荐的流媒体应用框架, ...
 - TensorFlow.资料
			
1.ZC:看来 要用 TensorFlow,基本逃不过 Python了... TensorFlow物体识别——通过机器学习搭建属于自己的物体识别库 - 迷途无归的博客 - CSDN博客.html(h ...
 - GxDlms编译
			
目录 GxDlms编译 title: GxDlms编译 date: 2019/12/5 13:36:37 toc: true --- GxDlms编译 C++版本如果要编译动态库,项目>属性需要 ...
 - Netty学习篇①
			
什么是netty Netty封装了JDK自带的NIO,运用起来更加简单快速,Netty是一个异步事件驱动的网络应用框架,让开发更加简便 Netty相比JDK自带的NIO的优点 Netty的api调用简 ...
 - linux报错Loading mirror speeds from cached hostfile解决方法
			
首先本人当时也是遇到这个问题,首先配置了虚拟机的 yum,移步这篇博客https://www.cnblogs.com/xuzhaoyang/p/11239096.html 然后在进行了如下操作 首先还 ...
 - Git Bash输错账号密码如何重新输入
			
很多时候我们容易在Git Bash操作的时候,不慎输入错误的用户名或密码,此时一直提示: remote: Incorrect username or password ( access token ) ...
 - javascript当中类型转换,typeof的用法
			
1)类型转换,typeof的用法 例 3.1.1 <HTML><head> <meta http-equiv="content-type" co ...
 - SQLite进阶-18.事务
			
目录 SQLite事务 事务的属性 事务控制 BEGIN TRANSACTION命令 COMMIT命令 ROLLBACK命令 SQLite事务 事务(Transaction) 是一个对数据库执行工作单 ...