1992年国际互联网工程任务组(The Internet Engineering Task Force,IETF)制定点对点协议(Point-to-Point Protocol,PPP)。该协议文本描述于RFC 1661,以及改进后的文本RFC1662,RFC 1663。PPP能支持差错检测,支持各种协议,在连接时IP地址可赋值,具有身份验证功能。从PPP的发展来看,它不仅适用于拨号用户,且适用于租用的路由器对路由器线路。PPP提供了以下3个功能:
1)成帧的方法可以清楚地区分帧的结束和下一帧的开始,帧格式还处理差错控制。
2)链路控制协议(Link Control Protocol,LCP)用于启动线路、测试、任选功能的协商以及关闭连接,它支持同步和异步线路,也支持面向字节和面向位的编码方法。
3)一种协商网络层选项的方法,并且协商方法与使用的网络层协议独立,所选的方法对于每一种支持的网络层都有一个不同的网络链路控制协议(Network Control Protocol,NCP)。
下面进一步阐述这3个功能和相应的协议。PPP连接的转换状态描述如下:
为了看清楚这几部分是如何组合起来的,我们来考虑一种典型的情形:一个家庭用户呼叫一个Internet服务供应商,以便让家庭PC成为一台临时的Internet主机。PC首先通过调制解调器呼叫供应商的路由器。当路由器的调制解调器回答了用户的电话呼叫,并建立起一个物理连接之后,PC给路由器发送一系列LCP分组,它们被包含在一个或者多个PPP帧的有效载荷域中。这些分组以及它们的应答信息将选定所使用的PPP参数。一旦双方对PPP参数达成一致之后,又会发送一系列NLP分组,这些NCP分组用于配置网络层。通常情况下,PC希望运行一个TCP/IP协议栈,所以它需要一个IP地址。由于没有足够的IP地址可供使用,所以,通常每个Internet供应商都会先得到一段IP地址范围,然后动态地分配一个地址给每台新近登录的PC,保证它在登录会话过程中使用该地址。如果一个供应商拥有n个IP地址,则它可以允许同时有n台机器登录进来,但是它的总用户数可以是n的许多倍。针对IP协议的NLP负责分配IP地址。这时候,PC已经成为一台Internet主机。它可以发送和接收IP分组,就如同直接硬件连接的Internet主机一样。当用户完成了工作以后,NLP断掉网络层连接,并释放IP地址。然后NCP停掉数据链路层连接。最后,计算机通知调制解调器挂断电话,释放物理层的连接。
PPP选择的帧格式与HDIC的帧格式非常相似,因此没有理由再重新发明一种新的格式。PPP和HDIC之间最主要的区别是,PPP是面向字符的,不是面向位的。特别是,PPP在拨号调制解调器线路上使用了字节填充技术,所以,所有的帧都是整数字节。
因此,要想发送一个包含30.25 B的帧是不可能的,而在HDIC中则是可能的。PPP帧不仅可以通过拨号电话线发送出去,也可以通过SONET或者真正地面向位的HDIC线路(比如从路由器到路由器之间的连接)发送出去。无序号模式操作下的PPP完整帧的格式,如图3-16所示。
图3-16 无序号模式操作下的PPP完整帧格式
所有的PPP帧都以一个标准的HDIC标志字节(01111110)作为开始,如果它正好出现在有效载荷域中,则需要进行字节填充。接下来是地址域,它总是被设置成二进制值11111111,以表示所有的站都可以接收该帧。使用这样的值可以避免“必须分配数据链路地址”的问题。地址域之后是控制域,该域的默认值是00000011。此值表明了这是一个无序号帧。换句话说,在默认方式下,PPP并没有用序列号和确认来实现可靠传输。在有噪声的环境下(比如无线网络),可以利用编号模式来实现可靠传输。RFC 1663定义了确切的细节,但是在实践中它很少被采用。
由于在默认前提下,地址和控制域总是常量,所以LCP提供了必要的机制,允许双方协商一个选项,该选项的目的仅仅是省略这两个域,因而每1帧可以节约2 B。第4个PPP域是协议域,它的任务是指明净荷域中是哪一种分组。已定义了代码的协议为:LCP、NCP、IP、IPX、AppleTalk和其他的协议。以0位作为开始的协议是网络层协议,比如IP、IPX、OSI、CLNP、XNS。以1 bit作为开始的协议被用于协商其他的协议,这包括LCP,以及每一个支持的网络层协议都有一个不同的NCP。协议域的默认大小为2 B。但是,通过LCP可以将它协商为1 B。净荷域是变长的,最多可达到某一个商定的最大值。如果在线路建立过程中没有通过LCP协商该长度,则使用默认长度1500 B。如果有需要,则在净载荷之后可以加一些填充字节。在净荷域之后是校验和域,通常该域为2 B,但通过协商也可以是4 B。
总而言之,PPP是一种多协议成帧机制,它适合于在调制解调器、HDLC位序列线路、SONET和其他的物理层上使用。它支持错误检测、选项协商、头部压缩,以及(可选)使用HDLC类型帧格式的可靠传输。(www.xing528.com)
现在我们从PPP帧格式转移到线路的启动和关闭机制上来。图3-17是一个简化了的状态图,它显示了一集线路从被启动、使用,一直到被关闭的全过程。该过程不仅适用于调制解调器连接,也适用于从路由器到路由器的连接。
图3-17 一个简化的状态图,从线路启动到线路关闭
协议从线路处于死(Dead)状态开始,这时候没有物理层的线路接入进来,也没有物理层连接存在。当物理连接被建立起来之后,线路转移到建立(establish)状态。此时,LCP选项协商开始,如果成功,则线路状态转移到身份认证(authenticate)。
现在,双方可以根据需要检查对方的身份。当进入到网络(network)状态时,通过调用适当的NCP可以配置网络层。如果配置成功的话,则到达打开(open)状态,于是可以传输数据了。当数据传始任务完成之后,线路转移到终止(terminate)状态,当线路掉线后,就从终止回到死状态。
在建立状态阶段,LCP协商数据链协议的选项。LCP并不真正关心这些选项本身。相反,它关心的是用于协商的机制。它提供了这样一种方法:允许发起进程提出建议,而应答进程接受或者拒绝该建议(可以是全部,也可以是部分)。它同时还提供了一种方法以允许两个进程测试线路质量,看它们是否认为线路足够好到可以建立一个连接。最后,LCP允许当线路不再需要的时候,关闭这些线路。
RFC 1661中定义了11种LCP帧。表3-1列出了这些帧的含义。4种Configure类型的帧允许发起方(I)提出建议选项值、应答方(R)接收或者拒绝这些建议值。如果应答方拒绝,则它可以提出另外的建议值,或者宣布它根本不愿意协商特定的选项。被协商的选项以及它们的建议值都是LCP帧的一部分。
当一条线路不再需要的时候,通过Terminate类型的帧可以将它关闭。Code-reject和Protocol-reject码表示应答方获得了某些无法理解的信息。这种情况有可能意味着发生了一个未被监测到的传输错误,但是更有可能意味着发起方和应答方运行的LCP的版本不同。Echo-类型的帧可被用于测试线路的质量。最后,Discard-request类型的帧可帮助调试。如果任何一方在将数据发送到线路上的时候出现了问题,则程序员可以使用这种类型的帧来进行测试。如果该帧到达了目的地,则接收方只要直接丢弃即可,不会采取一些可能迷惑测试人员的动作。
可以被协商的选项包括:数据帧的最大净荷长度,允许身份认证和选择所用的认证协议,允许在正常操作过程中监视线路质量,以及选择各种头部压缩选项。
关于NCP,每一个NCP都针对某个特定的网络层协议,通过该NCP,可以配置相应的网络层协议。
表3-1 LCP帧的类型
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。