在通信线路质量较差的年代,数据链路层往往会使用可靠传输协议,因此能实现可靠传输的高级数据链路控制HLDC(High-level Data Link Control)就被广泛使用,如今通信链路质量较好的情况下PPP(Point to Point Protocol)则是点对点通信中普遍使用的。

PPP协议的组成

PPP协议有三个组成部分,其内部包括了几个模块,分别实现不同的功能

  • 一个将数据报封装成帧的方法
  • 一个用来建立、配置、册数数据链路连接的链路控制协议LCP。通信双方可协商一些选项。
  • 一套网络控制协议NCP,其中每一个协议支持不同的网络层不同的协议

除了基本的组成部件之外,还有额外的两个功能组,包含了额外的功能,用于支持或强化基本功能

  • LCP支持协议,用于管理协商过程或用于配置选项,如CHAP,PAP鉴别协议
  • LCP可选特性协议,用于增强功能,如CCP加密协议,ECP压缩协议,PPP MP多链路协议

    PPP数据帧的组成

    已知数据链路层的传输单位为帧,是在网络层传输过来的数据报上再次进行封装得到的,其中包含了一些控制信息。
    image.png
    PPP帧的首部和尾部分为四个字段和两个字段。首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),内容是0x7E(二进制01111110),标志着一个数据帧的开始和结束。是PPP帧的定界符。不过连续的两个PPP帧之间只要一个标志字段即可
    地址字段A(Adress)内容为0xFF(二进制11111111),控制字段C(Control)内容为0x03(二进制00000011),这两个字段设计时考虑以后方便扩充定义用途,但是至今仍未使用,因此这两个字段并不携带信息,往往协商省略以减少网络开销。
    第四个字段是两个字节的协议字段。该字段标识了信息部分的信息种类
0x0021 IP数据报
0xC021 PPP链路控制协议LCP数据
0x8021 网络层控制数据

信息字段的长度可变,但是不超过1500字节。
尾部的第一个字段是使用CRC的帧检验序列FCS

PPP协议的透明传输

已知PPP协议的定界符是0x7E,对于异步传输。PPP协议定义转义符为0x7D(二进制01111101),使用字节填充
具体的填充方法如下

  • 若信息字段中出现的0x7E字节转为2字节(0x7D,0x5E)
  • 若信息字段中出现0x7D,则转为2字节(0x7D,0x5D)
  • 若信息字段出现ASCII码控制字符(数值小于0x20),转为2字节,同时改变该字符的编码。如0x03在控制字符中是传输结束,转为2字节(0x7D,0x23)

对于同步传输。采用零比特填充。
具体填充方法如下
发送端先扫描整个信息字段。若发现5个连续的1,就填入一个0。(帧定界符0x7E为01111110,六个连续的1)

PPP协议的工作状态

PPP链路的初始化
点对点的连接开始通信时,要先进行PPP的初始化,也就是要进行一些配置,协商。
image.png
现有A,B两端

链路静止(死亡)阶段

代表没有建立物理层的链接的情况。该链路在这个阶段保持直到建立物理层链接(除了一根线连起来之后,还要在逻辑上建立起来),随后进入链路创建阶段
物理层连接的建立是什么意思—知乎回答

链路创建阶段

两端开始LCP的配置协商。A发送LCP的配置请求帧(Configure-Request),也是前面提到的PPP帧,只是这个配置请求帧的内容包含了一些配置选项。B接收到配置请求之后,根据配置请求的内容决定响应内容
配置响应有三种

  • 配置接受帧(Configure-Ack),所有选项都接受
  • 配置否认帧(Configure-Nak),所有选项都识别,但不接受具体的参数内容
  • 配置拒绝帧(Configure-Reject),部分选项无法识别(不支持某一特性)或接受,需要协商

B如果返回配置否认或拒绝帧,告诉A,你这条件不行,很难办事啊,A就尝试再发送一个不同的配置请求,B接受到一看不行,那就继续拒绝或否认给A,直到A发送了一个B能接受的条件,行,达成一致,这个链路的状态可认为是LCP打开(LCP要做的事完成了),随后进入下一步

鉴别阶段

B运行A正式连接之前,可能需要权限鉴别,是否使用权限鉴别在前一阶段进行协商。
使用口令鉴别协议PAP或挑战握手鉴别协议CHAP。鉴别失败进入链路终止阶段。成功则进入下一阶段

网络层协议阶段

NCP是数据链路层支持对多种网络协议进行配置协商的手段。包含了一系列的协议,对于网络层的IP协议,对应的NCP是IPCP,对于网络层IPX协议,对应的NCP是IPXCP。该阶段与LCP链路创建阶段较为相似。
以IPCP为例,完成鉴别之后
A发送IPCP配置请求帧(Configure-Request)
如果B不接受该配置内容,返回IPCP配置拒绝帧(Configure-Reject)或配置否认帧(Configure-Nak)
A可以再次尝试发送新的配置请求帧
B若接受配置内容,返回配置接受帧(Configure-Ack),建立IPCP的NCP链路
随后交换IP数据
交换完毕,A发送 IPCP终止请求帧 (Terminate-Request)
B返回IPCP终止接受帧(Terminate-Ack)给A
至此IPCP协商完成,创建一条NCP链路
因为现在的设备可以支持多个网络层协议,完成IPCP的协商后,还会取依次进行其他网络层协议对应的NCP协商,每协商成功一个,都会创建一条独特的NCP链路。所有协议协商完毕(可能失败)。即使所有NCP协商都失败了,还是会进入下一阶段,LCP仍是打开的,但是不能发送对应协议的数据
进入下一阶段

链路打开阶段

链路打开阶段,LCP链路与NCP链路是打开且可操作的。对于成功建立的NCP链路,可以用来传输数据。随后因为各样的原因,LCP链路被关闭(如主动断开连接),进入链路终止阶段。

链路终止阶段

A或B发送一个特定的LCP终止帧,并且另外一个设备返回LCP终止的应答帧。链路返回到死亡状态。如果已经请求终止,而物理层连接仍然活跃,PPP会向物理层发送信号,终止物理层连接。
注意:NCP链路是建立在LCP链路基础之上的,关闭NCP链路并不会关闭LCP链路,而关闭LCP链路会导致NCP链路关闭。