| |
3.3.3 链路控制协议
如上所述,链路控制协议(LCP)用于PPP链路的建立、维护和拆除。LCP数据包是在PPP数据包的信息域发送的。LCP数据帧分为如下三个部分:
其中代码域用来决定数据包的类型;标志域用来确定发送和请求数据包是否匹配;长度域表示数据包的长度,包括代码域、标志域、长度域和数据域。
2.LCP数据包类型
根据代码域的不同,LCP数据包可以分为以下数据帧:
为了打开一个LCP连接,必须发送一个配置请求数据包,欲设置的数据在LCP的数据域中设置,接收到该数据包后必须应答。配置选项的内容在下文论述。
如果接收到的配置数据包中的所有配置选项都可以接受,则用配置确认数据帧应答。应答时将配置请求数据包的代码域、标志域和数据域复制到配置确认数据帧中。
如果在接收到的配置数据帧中有参数无法接受,则用该数据帧应答。将无法接受的选项的内容修改为可以接受的值后按顺序添加到数据域中,如果还有其它选项需要协商,也可以增加到数据域中。
如果接收到的配置请求数据帧中有部分选项无法识别或不允许使用,则用配置拒绝数据帧应答。此时,复制标志域并将请求数据帧中的要拒绝的选项按原来的顺序复制到数据域中。
终止请求数据帧:代码域为5;终止确认数据帧:代码域为6
如果通信一方要终止链路连接,则应该发送终止请求数据帧,代码域设为5,数据域为任何附加信息;接收到终止请求的一方发送终止确认数据帧,此时代码域为6,标志域和数据域从接收到的请求数据帧中拷贝。
如果接收到的数据帧的代码域为无效代码,则用代码拒绝帧应答,表示该错误无法恢复。接收到代码拒绝数据帧的主机应该报告错误。
如果在PPP封装中接收到一个未知的通信协议,表示对方想要使用一个本机不支持的协议。此时,如果LCP已经处于打开状态,则必须发送协议拒绝数据帧来通知对方,信息域中包括拒绝的协议和信息;但如果在其它状态,则直接丢弃数据帧。
Echo-Request:代码域:9 Echo-Reply:代码域:10
LCP包含Echo-Request和Echo-Reply代码用于训练双方通信的数据链路层上的循环通信机制。通信一方发送一个Echo-Request包,其中代码域为9,在信息域中插入本地魔数(Magic-Number,关于魔数,见下文)和任何用于测试的数据。接收到Echo-Request的一方则用Echo-Reply来回应,其中代码域为10,标志域从请求数据帧中复制,然后在信息域中插入本地魔数,并将请求数据包的内容拷贝到应答数据包中。数据帧格式如下表:
该数据帧提供了一种在数据链路层上的测试机制,一方发送该数据帧,另一方接收后直接丢弃。
3.LCP配置选项
LCP配置选项允许在一个点对点链路上通过协商修订标准特性值,这些选项包括:最大接收单元,异步控制字符映射、链路鉴权协议等。如果一个配置选项没有在配置请求数据包(Configure-Request)中出现,那么该配置选项将使用默认值。配置选项列表的结束由LCP数据包的长度标识。在协商过程中,除非特别声明,这些配置选项应用在半双工方式,经过协商后的值仅在接收配置请求数据包的方向上有效。配置选项是LCP配置请求等数据帧的数据域内的值。配置选项格式如下:
类型(Type)(1B) |
长度(Length)(1B) |
数据(Data)(变长) |
选项类型:1字节,指示配置选项类别。
选项长度:1字节,表示该选项的长度,包括类型、长度和数据。
数据:指示该选项的配置内容,它的格式和长度由选项类型决定。
选项类型分别如下:
该选项用来通知对方该实现可以接收的最大数据包长度,如果要将数据包长度设置为较小值,必须保证在链路同步丢失后仍然能够接收1500个字节的数据包。
这个配置选项提供了一个在异步链路上协商控制字符映射表的方法。默认的,PPP将所有的控制字符映射到相应的两字符序列。然而,很少有必要将所有控制字符都进行转义映射。因此,应用程序可以通过该选项去通知对方哪些控制字符需要进行转义。控制字符映射表通过4个字节来表示,其中的每一位表示相应的值是否映射,0表示不进行映射,1表示进行映射。在传输过程中最先传输的是第31位,最后传输的是0位。其中,第0位对应的是ASCII码NUL。
一般在网络层交换数据前要求进行鉴权,这个配置选项提供了一种协商鉴权协议的方法。默认不进行鉴权。在请求鉴权的过时,每次只能使用一个鉴权协议选项,只有当该协议被拒绝以后,才能再请求使用别的协议进行。
在一些连接中,可能需要决定什么时候、多久进行数据发送,这一过程称为质量监控。这个配置选项提供了一种协商使用的质量监控协议的方法。默认不使用质量监控协议。
该选项提供了一种探测短路连接和其它数据链路层异常的方法,它可能在其它配置选项中用到。使用魔数检测链路的基本思想是:当一方接收到带有魔数选项的配置请求数据帧后,将接收到的魔数与上次发送的魔数进行比较,如果不相同就认为没有发生短路。如果两个魔数相同,则需要发送一个携带不同魔数的配置否认帧,然后将接收到的魔数与发送的魔数进行比较。
该选项提供了一种压缩数据链路层协议域的方法。在标准的PPP中,协议编号为两个字节,经过协商后,可以把编号小于256的协议压缩为一个字节传输,比如传输IP信息时,协议编号可以由0021压缩为21,但是编号大于256的协议无法压缩。默认不使用协议压缩。选项类型:7 选项长度:2
该选项提供了一种压缩数据链路层地址和控制域的方法。标准PPP协议中必须发送地址和控制域,但由于这些是固定值,因此很容易压缩。在接收过程中,如果没有接收到FF则认为进行了地址和控制域压缩。
选项类型:8 选项长度:2
4.LCP协商过程
图3-4所示为一个典型的LCP协商过程。图中终端1和终端2分别代表通信的双方,有向线段表示数据帧的流向。图中给出了终端1方向的协商完成过程。表格中给出的是每次发送的数据帧的具体内容。终端1第一次发送的请求数据帧中请求使用的鉴权协议为PAP,终端2不使用PAP协议鉴权,所以终端2用NAK数据帧应答,终端1检测到对方不使用PAP后,重新以CHAP协议发送请求数据帧,终端2此时可以接受所有的配置请求,所以终端2发送协商ACK数据帧。这样就完成了一个方向的协商,同理,终端2发送的协商请求过程与此类似。图中标注的值都是没有经过转义的字符,实际发送过程中要转义这些字符。
转:http://scj2002.blog.163.com/blog/static/552647932008028951588/