数据链路层-PPP协议
用途
广域网路由器之间的专用线路,使用的是PPP协议。
用户计算机与ISP进行通信时,所使用的数据链路层协议通常是点对点协议PPP(Point-to-Point Protocol)或PPPOE)。
PPPOE既有Ethernet灵活组网的优势,又可以通过PPP做认证、计费等,也能发挥PPP点对点的优势,把宽带用户相互隔离(互相不能访问)。由于PPP点对点的特性,宽带用户之间不能相互访问,宽带用户能够与运营商的路由器相互访 问。
组成
1. 将上层数据包封装为数据帧的方法
2. 一个LCP(Link Control Protocol),用于管理数据链路(创建、配置、测试、终止链路)
3. 一套NCP(Network Control Protocol),用于支撑不同的上层协议
ppp链路的工作流程:
1. 建立和配置链路
2. 链路认证
3. 协议协商
4. 使用链路
5. 终止链路
封装成帧
PPP报文可由Protocal字段标识不同类型的PPP报文。例如,当Protocol为0xC021时,代表LCP报文,此时又由Information中的Code标识不同的LCP报文类型。
1.Flag标志字段,为帧定界符,标识帧的起始和结束位置,为固定值0x7E
2. Address标识接收方端口地址,PPP协议目前仅用于点到点的链路通讯,因此接收方是唯一的 ,故取固定值0xFF
3. Control为控制字段,取固定值0x03,表示无序号信息(Unnumbered Information)
4. Protocol字段为协议字段,用来标识PPP帧封装的协议数据类型,长度为2字节。此字段使PPP得以封装不同的协议。
5. Information字段为信息字段,,该字段长度不固定,最大长度等于MRU(Maximum Receive Unit)值(1500字节)。此字段存放上层交付的数据,例如LCP、NCP,IP等。
6. FCS(Frame Check Sequence)字段为帧校验和字段,用来检测PPP帧的完整性(CRC计算),长度为2字节。
透明传输
如果信息字段中出现帧定界符,就会导致接收端误以为帧结束了,因此必须对信息字段中出现的0x7E进行转义。
字节填充
当PPP使用异步传输时(以字节为单位),则使用字节填充方式,规定转义符为0x7D。具体填充方式:
1. 将每一个x07E转义为 0x7D5E
2. 将每一个0x7D转义为 0x7D5D
3. 如信息字段中出现ASCII控制字符,则将控制字符也转义。例如当出现0x03转义为 0x7D03
零比特填充
当PPP使用同步传输时(以bit为单位),则使用零比特填充方式:
在发送端由硬件或软件扫描信息字段,如果出现连续的5个1则立即填入一个0。
在接收端,也会扫描信息字段,如果出现连续的5个1,则将后面的0丢弃。
数据链路管理
PPP使用LCP进行数据链路管理。首先讨论LCP的协议格式:
- Code为代码字段(也称类型字段),长度为1字节,用来标识LCP中链路控制报文的类型。
- Identifier为标识符字段,长度为1字节,是报文的唯一标识,用于匹配请求和回复。
- Length为长度字段,长度为2字节,Length字段指出该报文的长度,报文长度包括Code,Identifier,Length和Data。
- Data为数据字段,长度是零或多个八位字节,由Length字段声明。
报文类型和格式
当LCP报文的Code字段为0x01时,表示为Configure-Request报文。Configure-Request报文的Data字段有多个Options(选项)构成。每个Option的形式为TLV(Type,Length,Value)
- Type为类型字段,用于区分协商的参数。
- Length为长度字段,Length字段指出该配置选项(包括Type、Length和Data字段)的长度。
- Data为数据字段,Data字段为零或者多个字节,其中包含配置选项的特定详细信息。
链路建立和配置
- 当需要建立逻辑链路时,发起方发送Configure-Request(配置请求)报文,用于协商参数;
- 若接收方收到的每一个配置选项的值都可接受,则回送Configure-Ack(配置确认)报文;
- 若收到的配置选项是可以识别,但部分配置选项参数不能接受,则回送Configure-Nak(配置否认)报文,并标示出需要重新协商的配置选项;
- 若配置选项不可识别或不可接受,则回送Configure-Reject(配置拒绝)报文。
Configure-Request(配置请求)报文示例:
链路终止
链路测试和维护
链路认证
PPP建立和配置数据链路后,紧接着要进行认证。PPP有PAP核CHAP两种认证方式,具体使用哪一种由PPP在配置链路时的协商结果决定。
PAP认证
PAP(Password Authentication Protocol,口令认证协议),使用密码口令进行链路认证。
优点:认证流程简单
缺点:认证只能在链路建立阶段进行,身份和口令是以明文进行传输,安全性低
认证流程
若PPP帧中Protocol字段取值为0xc023时,表示Information字段承载的是PAP报文。报文格式如下:
CHAP认证
CHAP(Challenge-Handshake Authentication Protocol,口令握手认证协议)。CHAP为三次握手协议,可以在链路建立和数据通信阶段多次使用,进行认证,同时安全性较高。
认证过程中需配合事先协商好的算法,确认被认证方的身份,通常使用MD5(Message Digest Algorithm 5)作为其默认算法。只在网络上传输用户名,而不传输用户口令。
认证流程
若PPP帧中Protocol字段取值为0xc223时,表示Information字段承载的是CHAP报文。报文格式如下:
链路网络层协议协商
链路认证完成后,需要进行网络层协议及相关参数的协商。PPP有一组NCP(Network Control Protocol),用于建立、配置网络层协议。
NCP为一组协议的总称,对于不同的网络层协议,使用不同的NCP子协议进行协商。在网络上流行的IP协议使用IPCP(Internet Protocol Control Protocol,IP控制协议)协议进行协商。
IPCP会完成协商IP地址等工作,其后在该PPP链路上传送IP数据报;若IP数据报传送完毕,若要关闭IP协议,仍需通过IPCP协商终止;
若PPP帧中Protocol字段取值为0x8021时,表示ppp正在使用IPCP报文进行网络层协议协商。报文格式如下:
IPCP Configure-Request报文示例:
IPCP协议中,通信双方可协商的配置选项包括3个:
- 多个IP地址协商(很难全部协商成功,因此该选项很少使用)
- IP压缩协议(IP Compression Protocol),用于协商压缩协议,默认为不压缩
- IP地址协商,若发起方请求对端分配一个IP地址,接收方应会返回一个合法的IP地址。
整个过程与LCP类似:
参考:https://blog.csdn.net/HinsCoder/article/details/130454920