ppp

 
一   PPP     point to point protocol               数据链路层协议
PPP session establishment
1 link establishment phase
2. authentication phase
3. network layer protocol phase
 
点对点协议     
特点: 
 封装成帧           -----必须要实现的
 透明性     ------
多种网络层协议 ------(tcp或ipx协议)   
多种类型链路 ------(光纤或电话线或双绞线或同轴电缆等)    
差错检测crc    ------
        检测连接状态 ------(提供各种状态的汇报)  例如  欠费了      账号密码不对    电话线断了  等各种不同 状况的汇报
                        MTU      --------最大传输单元      
        网络层地址协商      -------分配ip地址
数据压缩 ------压缩 实现带宽的节约    算法的支持
 

 

 
 

 

 

  HDLC
LCP     负责身份验证        ppp中建立链路的组件
NCP    lcp通过之后     才能用此层分配ip地址    配置上层协议所需的环境     针对上层不同的协议类型   使 用不同的NCP组件     
如果是ip   则提供  ipcp接口;如果是ipx 则提供ipxcp接口;如果是appletalk 则提供atcp接口。
PAP     password authentication protocol      口令验证协议
CHAP   challenge-handshake   authentication protocol     挑战握手验证协议
在这些协议中比较重要的是LCP   和NCP     前者负责创建,维护或终止一次物理连接       
后者是一族协议   负责解决物理连接上运行什么网络协议   以及解决上层网络协议发生的问题
 
 

 

 

每一个ppp数据帧都以标志字节7e开始和结束
地址域 :FF  由于点到点链路可以唯一标识对方      所以此字节无意义    填充为全1的广播地址即可
控制域:0x03    无意义
 
协议域:区分ppp数据帧中信息域所承载的数据报文的内容   要求必须为奇数    低字节的最低位为1       高字节的 最低位为0       如果不符合上述规定      则接收端会向发送端发送一个protocol-reject报文     在此报文的 尾部 将完整地填充被拒绝的报文   主要的协议类型有LCP       NCP    及普通的IP报文
实质上上面的协议类型标示ppp协议运行过程中的不同状态     可以根据此协议域的值来判断所处ppp的 哪个阶段     可以通过抓包   判断ppp的问题  再进行分析和定位  
范围 代表的含义
0x0***-0x3***      特殊数据包的网络层协议
0x8***-0xb*** 属于网络控制协议NCP
0x4***-0x7*** 用于没有相关NCP的低通信量协议
0xc***-0xf*** 使用链路层控制协议LCP的包
 
保留值
0xc021 LCP
0xc023 PAP
0xc025 LINK quality report   链路品质报告
0xc223 CHAP
0x8021 IPCP         IP控制协议
0x0021 ip internet protocol
0x0001 padding protoco   填料协议
0x0003-0x001f 保留
0x007d 保留
****
 
抓包实例:
ppp和帧中继 - 骡子 - stupidmule@126 的博客

  信息域:缺省不超过1500字节       ppp协议中配置的参数选项MRU    ===MAXimum receive unit

 
方法一:字节填充    
信息部分中出现的标志字段的值解决办法    (透明传输)
a 0x7e转变成2个字节   0x7d   和0x5e
b 0x7d 转变成2个字节  0x7d   和     0x5d
c 信息字段中出现ascii码的控制字符   即数值小于0x20的字符
则在该字符前面要加入一个0x7d字节   同时将该字符的编码加以改变
方法二:0比特填充
当用在SONET/SDH链路时    使用同步传输连续连串的比特连续传送    这时ppp协议采用0比特填充方法来 实现透明传输
在发送端  只要发现有5个连续的1   就立即填入一个0   接收端对帧中的比特流进行扫描。每当发现5个连续1 时,就把这5个连续1后的一个0删除。
所有的数据链路层协议都不进行编号和确认机制
 
 
PPP协议的工作状态  
1.用户拨号接入isp        路由器(isp机房)的调制解调器对拨号确认   建立一条物理连接
2.pc向路由器发送一系列的LCP分组    封装成多个PPP帧   这些分组及其相应选择一些PPP参数   和进行网络层 配置,NCP给新接入的pC机分配ip地址    (isp购买很多个ip地址)
3.   通信完毕后,NCP释放网络层的连接   收回原来分配出去的IP 地址.接着,LCP释放数据链路层的连接  最后释 放物理层连接
 

 

 

http://wenku.baidu.com/view/118ad274580216fc700afd5f.html?from=search
二 LCP协议
用于HDLC的上层 写生数据链路的选项 制定MRU;lcp包被封装在ppp数据区域内 协议用0xc021表示

 

  代码指定lcp包的种类   不同格式

标识符在请求和回复中使用    标识符无效  则该包将被静静丢弃
长度   制定lcp包长度  包括代码   标识符    长度和数据区域    小于mru
数据 由0或多个8位字节      
 
lcp包有3类
链路配置包 configure-request    匹配请求    代码0x01
configure-ack 匹配正确应答
configure-nak 匹配不应答
configure-reject 匹配拒绝
链路结束包 terminate-request 终止请求
terminate-ack 终止应答
链路维修包 code-reject 代码拒绝
protocol-reject 协议拒绝
echo-request 回波请求
echo-reply 回波应答
discard-request 抛弃请求
a: configure-request    匹配请求   :

 

  选项域格式:1字节类型     + 1字节长度    +数据

0x01 maximum-receive-unit 最大-接收-单元
0x02 async-control-character-map 异步-控制-字符-映射
0x03 authentication-protocol 鉴定-协议
0x04 quality-protocol 质量-协议
0x05 magic-number
0x07 protocol-field-compression 协议-域压缩
0x08 addresss-and-control-field-compression 地址  控制域   压缩
 

 

  b configure-ack
cofnigure-nak
configure-reject
terminate-request和terminate-ack
格式与configure-request格式都相同 不同点位前面的类型字段的值
 
 
工作流程 建立
1.客户端打开一个连接 需要传送一个configure-request包
2.isp router收到configre-request包 如果包中的每个配置选项及其所以值都能接受 就传送一个configure-ack包
确认包中配置选项必须是接受的configure-request包中的配置选项的拷贝 且标示符必须与configure-reques t包相同以保证匹配
如果收到的包与以上要求不符的包经被静静的丢弃
3.如果configre-request包中的每个配置选项及其所以值都能接受 但是配置项目当中的一些值不能被接受 则必 须传送一个configure-nak包 其中选项域仅有收到的request包中不可接受的配置选项所填充
如果除了对端列出的配置项目之外还有新的项目要求配置 则nak也可以发送新的配置项目和值 以提醒对 端将其列入 request包中 作为下一次发送的请求项目
nak包中的标识符域必须匹配应答的request包
4.如果request 包中一些配置项目是不可辨认的或者不被写上所受 则必须传送一个configure-reject包 选项域 仅仅填充不可接受的配置项目 而且不被重定义或修改 标识符域request包相同
一个新的request包再发送时 必须不包含任何reject中列出的配置项目
 
终止包发送
1.发送terminate-request包 数据内容发生改变或接收到对前一个请求的有效应答 标识符域必须改变 对于重传 标识符可以保持不变2.传送ack包 接收到的request包的标识符必须被拷贝到要发送的ack包的标识符
流程:
1.接收到request包 后 必须传送一个terminate-ack包 当接收到一个未被引用的terminate-ack包时表示对 端在关闭或停止状态
2.如果要关闭一个连接 需要不断发送terminate-request 直到收到terminate-ack包 或者收到链路低层 已经关闭的提示;或者已经接收到了足够多的terminate-request包 以至于有充分的理由关闭
 
code-reject
在接收到一个带有未知代码的LCP包时 则必须传送一个code-reject包报告回位置代码的发送方。当接收到一个c ode-reject包 则应该报告问题并结束连接。
 
 
protocol-reject
当收到未知协议域的ppp包时 此时lcp处于打开状态 所以需要传送一个protocol-reject包回应对端 对端在接 收到protocol-reject包后 必须今早停止发送被指出的协议包
只能在LCP打开状态下发送
echo-request和echo-reply
用于检测数据链路层链路双方是否正常运转 这对调试 链路质量检测 测试和其他众多功能有帮助。
在LCP打开的情况下发送 在其他状态下 需要被丢弃
接收到一个echo-request包时 必须传送一个echo-reply包。
discard-request
测试远端链路接收器    在LCP打开的情况下发送   接收器丢弃此包
 
c LCP定时器和计数器
1.重启定时器 用于计算configure-request和terminate-request包的传输时间 超时事件触发 并通知两个request包需要重发 可配置 默认3s
2.重启计时器
max-terminate 需要有一个terminate-request的重启计数器 此项显示request包发送后对端可能不会应答的 没收到的terminate-ack包的个数 可配置 缺省为2次传输
max-confgure 显示configure-request包发送后对端没应答而没收到configure-ack configure-nak 或config ure-reject包的个数 可配置 缺省为10次传输
max-failure 显示configure-nak包发送后 ack包发送前的configure-nak包的个数 任何更进一步的用于对 端请求的选项被转换到configure-reject包 必须可配置 缺省为5次传输
 
三 PAP协议
密码验证协议 链路双方使用2次握手建立身份验证 明文发送 并且对重复验证和错误攻击没有保护措施  pap包格式 

 

 
 
authenticat-request 用来启动pap 不停的发送 直到接收到一个有效的响应包或超时计数器
收到au-request包 用户名和密码可识别 可接受 则发送一个au-ack包 如果不可接受 则发送一个au-nak包 并且终止链路

 

 
四 CHAP协议
 
 

 

其中的one-way-hash 单项哈希 就是不可逆的计算过程 例如MD5
对端发送md5(秘钥) 验证端 用md5(秘钥) 如果两个值匹配则验证成功 秘钥不在链路上传播
要求双方都知道秘钥 建议为了避免在网络的其他链路上发送秘钥 可以配置一台中心服务器统一管理秘钥
chap通过使用递增的标识符和可变的挑战值防止会送攻击
重复挑战目的:验证者控制挑战的频率和时间
md5最佳秘钥长度16字节
challenge值应该符合两个标准:唯一性和不可预测性 每个值应该是唯一的
如果使用相同秘钥联系的chanlenge值的副本可能让攻击者利用前一个截获的响应包响应 如图

 

 
每个challenge值也应该是不可预测的,否则攻击者欺骗对端响应一个可预测的未来challenge 然后用这个响 应伪装成对端欺骗验证者 如图

 

  认证的步骤
1.链路建立阶段结束后     认证者向对端发送challenge 信息
2.对端用经过单向哈希函数计算出来的值做应答    md5运算后
3.认证者根据他自己的预期哈希值来检查应答  如果值匹配   认证得到承认  否则连接应该终止
4.经过一定的随机间隔   认证者发送一个新的challenge给对端    重复1-3
 
协商chap认证协议的配置选项格式:类型 长度 认证协议 算法
chap包格式 封装在ppp数据链路层帧的数据域中 ppp的协议字段只是0xc223
格式:ppp帧头 ppp协议域 代码 标识符 长度 数据
代码字段只是chap包的类型:challenge respoonse success failure
用法:
chap的开始
发送chall包
发送应答包 需要比较应答值和计算的预期值
发送success或failure包
挑战包发送时间:有效的应答包成功接收或者计数器满
对端应该随时为认证阶段和nlp阶段的挑战做好准备
success包可能丢失 所以需要允许重复的应答包
终止链路 可以有LCP的终止请求和终止应答来指示认证失败

 

 ppp详解 - 骡子 - stupidmule@126 的博客
 
IPCP 协议(对应于IP协议的服务) 和 PPP链路质量监控LQM 以及ccp压缩控制协议(略)
 
五 ppp链路的各个阶段
 

 

 
a 链路死亡阶段 链路一定开始并结束于这个阶段
b 链路建立阶段 LCP用于交换配置信息报 建立连接
c 认证阶段 此阶段只有链路控制协议 认证协议 链路质量监视协议的包是被允许的
d 网络层协议阶段 在前面的阶段完成后 每个网络层协议 ip ipx或appletalk 必须被相对应的NCP分别设定 每个NCP可以随时被打开和关闭
e 链路终止阶段 ppp可以任意时间终止链路 终止的原因很多 :载波丢失 认证失败 链路质量失败 空闲周 期定时器期满 或者管理员关闭链路
LCP关闭链路 即可 不需要ncp关闭 相反 一个ncp关闭却不足以引起ppp链路的终止 即使ncp处于 opened状态。
 
 
ppp自动状态机制
以LCP有限状态自动机为例       由事件、动作 和状态转换定义
   事件:接受外部命令(打开   关闭   重启定时器)    接受对端包
动作:启动重启定时器    向对端传包
 
 
完整ppp协议运转过程的报文举例
 
以下是一段较完整的PPP协议运转过程的报文 W:7E FF 03 C0 21 01 01 00 14 02 06 00 0A 00 00 05 06 48 43 D3 0A 07 02 08 02 2E 15 7E C021:LCP Configure-Request:ID=1 ACCM:映射ASCII17、19 Magic-Number:4843D30A PFC ACFC 写入配置请求 R:7E FF 03 C0 21 02 01 00 14 02 06 00 0A 00 00 05 06 48 43 D3 0A 07 02 08 02 C5 7C 7E C021:LCP Configure-Ack:ID=1 ACCM:映射ASCII17、19 Magic-Number:4843D30A PFC ACFC 接收方同意请求 R:7E FF 03 C0 21 01 03 00 1D 01 04 07 D0 02 06 00 0A 00 00 07 02 08 02 05 06 A7 A0 42 6F 03 05 C2 23 05 4B F2 7E C021:LCP Configure-Request ID=3 MRU=07D0 ACCM:映射ASCII17、19 PFC ACFC Magic-Number:A7A0426F 认证协议:CHAP MD5 接收方发送请求有新的配置请求 W:7E FF 03 C0 21 03 03 00 08 03 04 C0 23 99 7F 7E C021:LCP Configure-Nak:ID=3 认证协议PAP 提醒接收方将认证协议改为PAP; R:7E FF 03 C0 21 01 05 00 1C 01 04 07 D0 02 06 00 0A 00 00 07 02 08 02 05 06 A7 A0 42 6F 03 04 C0 23 91 AB 7E C021:LCP Configure-Request:ID=5 MRU=07D0 ACCM:映射ASCII17、19 PFC ACFC Magic-Number:A7A0426F 认证协议:PAP 接收方重新发出配置请求将认证协议改为PAP W:7E FF 03 C0 21 02 05 00 1C 01 04 07 D0 02 06 00 0A 00 00 07 02 08 02 05 06 A7 A0 42 6F 03 04 C0 23 A2 F1 7E C021:LCP Configure-Ack:ID=5 MRU=07D0 ACCM:映射ASCII17、19 PFC ACFC Magic-Number:A7A0426F 认证协议:PAP 同意配置请求 W:7E FF 03 C0 21 09 00 00 08 48 43 D3 0A CF AE 7E C021:LCP Echo-Request:ID=0 Magic-Number=48 43 D3 0A 发送回波请求检测链路 W:7E FF 03 C0 23 01 03 00 0F 03 48 4C 59 06 57 4F 52 4B 45 52 2E 87 7E C023:PAP Request:ID=3 用户名ID=48 4C 59 密码=57 4F 52 4B 45 52 发送用户名和密码请求认证 R:7E FF 03 C0 21 0A 00 00 08 A7 A0 42 6F 87 F0 7E C021:LCP Echo-Reply:ID=0 Magic-Number=A7 A0 42 6F 接收端发送回波应答 R:7E C0 23 02 03 00 05 00 8B 09 7E C023:PAP Ack:ID=3 接收端通过验证 w:7E FF 03 80 21 01 07 00 10 03 06 00 00 00 00 02 06 00 2D 0F 00 BE 0B 7E 8021:IPCP Configure-Request:ID=7 IP:00.00.00.00请求对端分配 压缩TCP;最大时间片标识0F;时间片标识符不压缩 发送IP请求和压缩请求 R:7E 80 21 04 07 00 0A 02 06 00 2D 0F 00 6E 85 7E 8021:IPCP Configure-Reject:ID=7 压缩TCP;最大时间片标识0F;时间片标识符不压缩 接收端不同意压缩 W:7E FF 03 80 21 01 08 00 0A 03 06 00 00 00 00 24 1A 7E 8021:IPCP Configure-Request:ID=8 IP:00.00.00.00请求对端分配 请求IP地址分配 R:7E 80 21 01 01 00 0A 03 06 C0 A8 FE FE 48 CC 7E 8021:IPCP Configure-Request:ID=1 IP:C0.A8.FE.FE W:7E FF 03 80 21 02 01 00 0A 03 06 C0 A8 FE FE 5F 56 7E 8021:IPCP Configure-Ack:ID=1 IP:C0.A8.FE.FE W:7E FF 03 80 21 01 08 00 0A 03 06 00 00 00 00 24 1A 7E 8021:IPCP Configure-Request:ID=8 IP:00.00.00.00 继续发送IP请求 R:7E 80 21 03 08 00 0A 03 06 0A 5F 15 DB E9 3A 7E 8021:IPCP Configure-Nak:ID=8 IP:0A.5F.15.DB 接收端建议采用IP: 0A.5F.15.DB W:7E FF 03 80 21 01 09 00 0A 03 06 0A 5F 15 DB 24 C1 7E 8021:IPCP Configure-Request:ID=9 IP:0A.5F.15.DB 采纳建议发送IP0A.5F.15.DB请求 R:7E 80 21 02 09 00 0A 03 06 0A 5F 15 DB 33 5B 7E 8021:IPCP Configure-Ack:ID=9 IP:0A.5F.15.DB 接收端通过请求分配IP:0A.5F.15.DB
 
TCP/IP协议过程 W:7E FF 03 C0 21 09 02 00 08 48 43 D3 0A 74 99 7E C021:LCP Echo-Request:ID=2 Magic-Number=48 43 D3 0A 发送回波请求 R:7E FF 03 C0 21 0A 02 00 08 A7 A0 42 6F 3C C7 7E C021:LCP Echo-Request:ID=2 Magic-Number=A7 A0 42 6F 接收端回波应答 W:7E FF 03 C0 21 05 02 00 10 55 73 65 72 65 71 75 65 73 74 53 33 7E C021:LCP Terminate-Request:ID=2 发送链路中断请求 R:7E FF 03 C0 21 06 02 00 10 55 73 65 72 65 71 75 65 73 74 72 A9 7E C021:LCP Terminate-Ack:ID=2 接收端同意中断链路 7E FF 03 C0 21 05 05 00 04 5C A4 7E C021:LCP Terminate-Request:ID=5 接收端发出中断链路请求 W:7E FF 03 C0 21 06 05 00 04 91 81 7E C021:LCP Terminate-Ack:ID=5 同意中断链路。
 
 
 
 
广域网QOS设置
HDLC支持qos不好
在hdlc基础上的PPP对QOS支持较好
接口缓冲区叫buffer 存储网络拥塞时候需要转发 但需要等待转发的报文  
一般需要软队列的排队机制称为FIFO 排在前面的先发 排在后面的等待 先进先出
另一种称为WFQ 叫做加权的公平队列 相对更高级
一个队列中有多个片段长度不一致 而且协议不同 可能会造成抖动 titter
例如:video片段为A VOIP报文为B ftp报文为C
队列为:AABBAACBBBBAA
A B C长度都不同 其中C的长度最大 需要进行切片 并拆开 即链路分片及交互的方式 用来解决排队 带来的抖动。
实验:

 

  A 链路分段与交错      客户端用多条链路连接isp运营商的路由器    多条链路   Multi-link
r1:
#interface s1/1
#encapsultaion ppp
#no ip address 注意物理接口不能有ip地址 因为逻辑多线路需要一个ip地址
#ppp multilink group 12 链路两端的编号需要一致
#no shudown
r2配置相同
 
B 启用多链路
r1:
#interface multilink 12
#encapsulation ppp
#ppp multilink
#ppp multilink group 12
#ip address  12.1.1.1 255.255.255.0
r2 配置类似
 
C 检验
r1#show ip interface brief
D 配置链路分段
r1#interface multilink 12
#ppp multilink fragment delay 10 启用分片 10ms指定发送一个小分片 只是需要10ms即可
#ppp multilink interleave 开启交互 比如将ftp报文分割成多个小分片后 将voip的报文夹杂在这些小分片中 来一起发送 保证不会产生抖动
r2相同的配置
E 配置带宽利用率----压缩
两端都要配置压缩
r1#interface multilink 12
#compress stac 堆栈式压缩
r2同样配置

 

posted on 2017-11-27 09:13  学习记录园  阅读(7564)  评论(0编辑  收藏  举报