TCPIP微课堂(4):链路层协议-PPP协议


来自:上善若水大爱可生     发表于:2017-04-14 16:54:59     浏览:412次

TCPIP微课堂(4):链路层协议-PPP协议

 

PPP(point to point protocol)是点对点协议,主要用于在全双工的同异步链路上进行点到点的数据传输。


  • PPP帧格式

一个PPP报文以7E开始,以7E结束,因此判断PPP报文的开始和结束都是查找7E。PPP控制字段共8个字节,LCP报文格式如下

   PPP帧中常用的协议类型有以下几种:

0021:数据报文

C021:LCP 链路控制协议,用于建立、配置及测试数据链路。

8021:IPCPIP层控制协议(NCP网络控制协议中的一种,针对IP使用的就是IPCP)

C023PAP( Password Authentication Protocol)密码认证协议,使用明文方式传输密码,安全性不高。

C223:CHAP(Challenge handshake authentication protocol),挑战握手认证协议,是一种三次握手认证协议,验证端会发送一个随机数,主叫将密码和随机数一起进行加密后,发送给被叫,被叫根据自己的计算结果和消息中携带的字段进行比较验证。

 

FCS(Frame Check Sequence)字段为循环冗余校验码,将报文内容通过一定的算法计算出FCS,放入数据报文中,接收方用来检测传输中可能出现的数据错误。(计算范围为PPP帧除去帧头和帧尾两个7E外的所有字节。) 

 

  • PPP协议类型

  • LCP:链路控制协议,用于协商数据链路的选项,如协商链路最大接收单元MRU,探测链路回路和其它普通的配置错误,以及终止链路。 


1、链路配置包,用于建立和配置链路。

Configure-Request(配置请求)

Code=01

用于携带要协商的选项

Configure-Ack(配置正确应答)

 

code=02

如果在收到的Configure-Request包中每一个配置选项及其所有的值都是能接受的,那么就应答一个Configure-Ack包

Configure-Nak(配置不应答)

code=03

如果在收到的Configure-Request包中的协商项是可以接受的,但是协商值不能接受,那么就应答一个Configure-Nak报文,将不接受的协商项带在该报文中。如果接收方有一些新的需要协商的项,也可以带在Configure-Nak报文中,发送方在下一个Configure-Request消息中会将这些项带过来协商。

Configure-Reject(配置拒绝)

code=04

如果收到的Configure-Request包中的协商项就是不可接受的,那么就应答一个Configure-Reject报文,报文中携带不可接受的协商项。注意Configure-Reject和Configure-Nak的区别,一个是协商项不可接受,一个是协商项的值不可接受。

 

LCP协商项:

RESERVED

0x00 

(保留)

Maximum-Receive-Unit(最大-接收-单元)

0x01

协商最大传输单元MRU

Async-Control-Character-Map(异步-控制-字符-映射) 

0x02 

协商哪些字符需要进行转义的ACCM值,后面详细介绍转义和ACCM。

Authentication-Protocol(鉴定-协议)

0x03 

协商鉴权协议为PAP还是CHAP

Quality-Protocol(质量-协议)

0x04 

协商链路想要使用的质量监测协议,如:0xC025  链路质量报告 

Magic-Number (魔术字)

0x05

魔数字主要是用来监测网络中是否有自环现象。如果Configure-Request包的发送方反复收到和自己发送包中的魔数字相同的Configure-Request包,则认为网络中存在自环。

Protocol-Field-Compression(协议域压缩)

0x07 

协商协议域是否压缩

 Address-and-Control-Field-Compression(地址和控制域压缩)

0x08

协商地址域和控制域是否压缩

 

2、链路结束包,用于结束一个链路。

Terminate-Request(终止请求)

code=05

链路一端如果想关闭链路,则发送Terminate request消息

 Terminate-Ack(终止应答)

code=06

链路一端收到Terminate request消息,如果同意关闭链路,则应答Terminate  Ack消息

 

3、链路维护包,用于管理和调试链路。

Code-Reject

code=07

在接收到一个带有未知代码的LCP包时,则必须发送一个Code-Reject给发送方。当接收到一个Code-Reject包,则应该报告问题并结束连接。

Protocol-Reject

code=08

在接收到带有未知协议域的PPP消息时,发送Protocol Reject消息,对端收到该消息后,停止发送这类协议的PPP报文。

Echo-Request

code=09

心跳消息,定时发送,检测链路是否正常

Echo-Reply 

code=0A

心跳应答,收到心跳请求消息后,进行应答,表明链路正常。

Discard-Request 

code=0B

 

  • PAP和CHAP

PAP( PasswordAuthentication Protocol)密码认证协议,使用明文方式传输密码。

PAP报文格式:

7E

FF

03

C023

Code

ID

Length

Data

FCS

7E

Code:

0x01 Authenticate-Request

0x02 Authenticate-Ack

0x03 Authenticate-Nak

CHAP(Challenge handshake authentication protocol),挑战握手认证协议,使用三次握手协议,加密密码,安全性较高。

CHAP报文格式:

7E

FF

03

C223

Code

ID

Length

Data

FCS

7E

0x01 Challenge

0x02 Response

0x03 Success

0x04 Failure

  • IPCP

IPCP的主要作用是IP地址的分配和压缩的协商。

报文格式和类型同LCP类似。IPCP消息格式如下图所示:

Code

1字节

ID

1字节

Length

2字节

Data


Code=01,Configure-Request

Code=02,Configure-Ack

Code=03,Configure-Nak

Code=04,Configure-Reject

Code=05,Terminate-Request

Code=06,Terminate-Ack

Code=07,Code-Reject


 

Type

1字节

Length

1字节

Data

Type类型:

02:TCPIP压缩,用于协商压缩协议,0X002d表示TCPIP压缩

03:IP地址,发送方发送ConfigureRequest消息,如果携带有效IP地址,表示建议使用的IP地址,如果携带的IP地址为全0,表示请求分配IP地址。


  • 异步PPP

为了避免PPP报文中的数据和网络中一些控制字符冲突,避免将这些字符解释成特殊的含义。所以一般要对PPP报文中小于0X20的字符进行转义。

LCP阶段协商的ACCM值就是用来控制那些字符需要进行转义的。ACCM共4个字节,32个bit,每一个bit表示0x00~0x1F是否需要进行转义。ACCM中的Bit是1表示对应的字符需要转义,一般情况下LCP阶段都会协商ACCM为全F,即,0x00到0x1F都需要进行转义。

转义的方式是加上7d20,比如0x01转义为0x7d21,0x1A转义为0x7d3A。特殊字符7E转义为0x7D5E,7D转义为0x7D5D。


  • PPP压缩

为了降低时延,提升效率,在LCP协商阶段会协商协议域压缩,以及地址和控制域压缩。

如果协商了协议域压缩,则PPP协商结束后,转发数据报文时的协议类型0021,会被压缩成21

如果协商了地址和控制域压缩,则后续报文不再携带PPP头中的地址域和控制域,即不携带FF 03两个字节。

版权声明:本文著作权归新newPPP平台所有,NewPPP小编欢迎分享本文,您的收藏是对我们的信任,newppp谢谢大家支持!

上一篇:【PPP路问】在实操中的PPP项目中,污水处理厂土地的取得,是按照划拨用地还是出让呢?
下一篇: