在前面我们是了解了数据链路层要解决的三个问题封装成帧,透明传输,差错检测;对于封装成帧,协议不同封装出来的帧格式不同,使用帧定界的点对点传输需要解决透明传输问题,对于解决方法在前面一节我们只是给出了使用转义字符填充,对于差错检测,学习了奇偶校验和CRC循环冗余校验。
这一节要学习的是数据链路层中的点对点协议,该协议是在ISP和用户之间通信所使用的数据链路层协议。
一、ppp协议
ppp是在ISP和用户之间通信所使用的数据链路层协议。,也可以被叫做是PPPoE协议。
先来看下ppp协议的组成
- 封装成帧
- LCP 是链路控制协议,在用户和ISP进行连接的时候,就需要LCP链路控制协议来进行连接。
- NCPS 是不同网络控制协议,因为网络层用到的协议不同,向下层交付的数据类型就不同,就需要被交付方数据链路层能够有效的识别出上层交付的数据类型。
封装成帧
在ppp协议中,封装成帧就是在网络层交付的网络层链路数据单元加上帧的首部信息和尾部信息
- 在ppp协议中帧的标志,即帧的定界符为0x7E
- 地址和控制字段无意义
- p字段是表示上层接受交付的数据类型,因为网络层的协议不同,交付的数据会有所差异。
- FCS字段存储CRC的校验码
- 帧的数据部分是不超过1500字节的
透明传输
在ppp协议中,数据的传输方式有两种,第一种是面向字节的异步链路,一种是面向比特的同步链路,传输方式的不同,实现透明传输的方式也不同,对于面向字节的采用字节填充法,对于面向比特的同步链路采用比特填充法。
字节填充, 对于ppp协议,它的字节填充做出以下规定
- 在数据部分遇见帧定界符7E,将其变为7D5E
- 对于遇见转义字符7D,将其变为7D5D,其实不难发现,ppp协议中当遇见转义字符或者帧定界符的时候,都是在前方插入7D,然后转义字符或者帧定界符减去0x20
- 当出现小于0x20的ASSIC码时,也需要在其其那方插入7D,同时让其加0x20。
比特填充,对于面向比特传输的ppp协议,由于帧定界符时0x7E,也就是01111110B,为实现透明传输,只需要在数据部分出现连续的五个1的话,就插入一个0,以破环连续的六个1的情况。
差错检测
ppp协议的差错检测使用CRC冗余码校验,FCS字段用于存储循环冗余校验码
- 发送方的数据到达发送发主机的数据链路层时,计算循环冗余校验码,存储在FCS字段,封装成帧
- 接收方接受到物理链路传输的数据,通过帧定界符分割出一个帧,然后检验帧中的数据是否出错,不出错就接受,出错就不接受,直接丢弃。
LCP链路控制协议
LCP是如何运作的?为什么需要LCP协议?
是因为用户刚刚和ISP建立连接的时候其实就是ISP接了一根物理的网线到自己的家里,这时就实现了链路的建立(物理上的连接) ,然后我们作为用户开始和ISP进行通信,此时就会使用到LCP链路控制协议,即用户向ISP发送LCP分组,就是协议字段是0xC021,就表示发送LCP分组;发送LCP分组的目的就是为了进行LCP协商,LCP分组里面就是一些配置选项,协商通过后,就会进入鉴别状态,此时状态已经是建立LCP链路 了,此时就会进入到网络层的协议,进行NCP配置协商,其实也就是为了实现不同的网络层协议交付的数据,都能使用同一个ppp协议来封装,配置完成后就会进入链路打开的状态,这样完成了两个点之间的连接控制,也就是链路控制协议的作用;其具体过程如下