📄 rfc1134.txt
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:sonet2000(sonet2000 sonet2000@163.com)
译文发布时间:2001-8-14
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须
保留本文档的翻译及版权信息。
Network Working Group D. Perkins
Request for Comments: 1134 CMU
November 1989
PPP协议:关于在点到点链路上进行多协议包传送的建议
(RFC1134——The Point-to-Point Protocol: A Proposal for Multi-Protocol
Transmission of Datagrams Over Point-to-Point Links)
备忘录状态:
此备忘录定义Internet团体中的一个协议。这个建议是IETF点到点协议工作组的产品。
IETF:Internet Engineer Task Force
摘要:
PPP提供在串行点到点链路上进行包传送的一种方法,它包括三个部分:1、在串行链
路上进行包封装的一个方法;2、可扩展的链路控制协议(LCP);3、一个网络控制协议(NCP)
族,以创建和配置不同网络层协议。
LCP:Link Control Protocol NCP:Network Control Protocol
此文档定义了封装的方案,基本的LCP和一个NCP,这个NCP称为IPCP,是为了创建和
配置IP协议的。IPCP: IP Control Protocol
LCP和NCP的选项和性能分别在几个文档中描述。关于网络层的控制协议除了IP外,
其余的仍需发展。
目录
1.介绍 2
1.1动机 2
1.2 PPP概述 2
1.3文档结构 3
2.物理层要求 3
3.数据链路层 3
3.1帧格式 3
4.链路控制协议LCP 5
4.1 LCP自动控制 6
4.2防止循环 12
4.3包格式 12
5. PPP的IP网络控制协议(NCP) 18
5.1发送IP包 19
附录 19
A. Asynchronous HDLC 19
B. Fast Frame Check Sequence (FCS) Implementation 21
References 24
Security Considerations 25
Acknowledgments 26
1.介绍
1.1动机
在过去的几年,Internet在越来越多的主机支持TCP/IP的背景下处于一种爆炸式的
增长状态。这些主机中绝大部分连接在各种类型的LAN上,以太网是其中最为普
遍的。还有一些主机则通过象X.25这样的PDN连接到WAN上。尽管这里面只有
一小部分是通过简单的点到点链路连接起来的,然而点到点链路确是最老的数据传
输方法之一,并且绝大多数主机都支持这种连接方法,比如异步的RS-232-C就是一
个基本和普遍的接口。
只有少量的点到点链路的一个原因是缺乏标准的封装协议。目前有众多的非标准的
封装协议,但是没有一个可以成为Internet上认可的标准。形成对比的是,在流行
的局域网环境下存在着标准的包传送封装协议。
这个备忘录的一个目的是修正上面的这个缺陷,然而更为重要的是,PPP并不只是
一个封装方案,因为点到点链路使当前网络协议中的问题趋于复杂。比如,分配和
管理IP地址,这甚至在局域网中也是一个问题,在交换的点到点电路中就更为困
难。
一些别的关于PPP的题目有:异步(start/stop)和面向比特的同步封装、网络协议复
用、链路配置、链路质量测试、错误检测、网络地址协商和数据压缩这些功能进行
可选的协商。
PPP通过LCP和NCP对这些题目作出阐述,通过这两个协议可以完成对配置参数
和性能的协商。
1.2 PPP概述
PPP主要有三个部分:
? 一个在串行链路上进行包封装的方法。PPP在HDLC的基础上对点到点的链
路上的数据包进行封装。
? 一个扩展的链路控制协议(LCP)以建立、配置、测试数据链路的连接。
? 一个网络控制协议(NCP)族以建立、配置不同的网络层协议。PPP被设计成可
被多网络层协议同时应用。
为了在点到点链路上建立通信,初始的PPP会先发送LCP包来配置和测试数据链
路。当链路已建立和一些可选性能经过协商,初始的PPP将发送NCP包去选择和
配置一个或多个网络层协议,一旦一个选中的网络层协议完成了配置,网络层协议
的数据包就可以通过链路进行发送。
链路保持通信配置直到显式的LCP或NCP包关掉链路,或是一些外部事件发生。
(e.g. inactivity timer expires or user intervention)
1.3文档结构
此备忘录分为几个章节。第2节介绍了PPP的物理层要求;第3节描述了数据链
路层包括PPP的帧格式和数据链路封装方案;第4节是关于LCP的,包括连接建
立和功能协商过程;第5节是关于IPCP的,它是IP的NCP,并且描述了在PPP包中
如何封装IP数据包。附录A总结了异步HDLC的重要特征,附录B描述了一种有
效的查表算法(table-lookup),它应用在快速帧校验序列(FCS)的计算中.
2.物理层要求
PPP适用于任何的DTE/DCE接口(如:EIA RS-232-C,EIA RS-422,EIA RS-423, CCITT
V.35)。PPP对物理层的唯一要求是提供双工电路(duplex circuit),不论是专线还是交换
(dedicated or switched),它可工作在异步(start/stop)或同步串行比特模式,并且对于PPP
的数据链路帧是透明的。PPP对于像数据传送速率或一些特定的DTE/DCE接口参数没
有任何限制。
PPP并不要求使用一些Modem控制信号,如RTS(request to send)、CTS(clear to send)、
Data Carrier Detects(DCD)和DTR(Data Terminal Ready).然而,应用这些信号可以提供更
多的功能和操作性。
3.数据链路层
PPP用到了ISO的HDLC协议过程的原理、术语和帧结构。ISO 3309-1979说明了HDLC
的帧结构,它在同步环境下使用;ISO 3309:1984/PDAD1是对原版的修改以使HDLC
适用于异步环境。
PPP的控制过程用到了ISO 4335-1979和ISO 4335-1979/Addendum1-1979里的定义和控
制域编码标准。PPP帧和CCITT建议X.25LAPB也是兼容的,因为LAPB也是基于HDLC
的。
这个文件的目的并不是重复ISO 3309的标准。我们假定读者对HDLC已经熟悉,或者
可以得到它的文档。相反,这个文档尝试给出一个简明的总结并指出PPP特定的功能
和特征。
3.1帧格式
标准的PPP帧结构如下所示,传送顺序从左至右
Flag
Address
Control
Protocol
Information
FCS
Flag
01111110
11111111
0000011
16bits
*
16bits
01111110
这个图表没有包括开始/停止位(对于异步链路)或任何透明插入的比特或八位位组。
当应用异步链路时,所有的八位位组在传送时都以以下方式发送:1比特启始位,
8比特数据位,1比特停止位。在PPP或ISO 3309:1984/PDAD1中没有提供7比特
的异步链路。
为了和标准的Internet应用兼容,并避免曾经阅读过的RFC的人产生困惑,所有的
二进制数在下面的描述中遵从从最重要位到最不重要位的次序,即从左至右,除非
有特别的声明。这和标准的ISO和CCITT惯例中使用的按比特发送的次序进行排
序(例如网络比特顺序)的方法相反,因此将此文档和国际标准比较时应注意这一
点。
? Flag Sequence:
标志序列是一个单8比特组并指出一个帧的开始或结束。标志序列由二进制序
列01111110组成。
? Address Field:
地址域是一个单8比特组,由二进制序列11111111组成,这是一个所有点
(All-Station)的地址,PPP并不赋予一个站点特定的地址。All-Station地址应被
识别和接收,除此之外的地址,帧应被静默丢弃。
? Control Field:
控制域是一个单8比特组,包括二进制序列00000011,the Unnumbered
Information(UI) command with the P/F bit is set to zero.其他值的地址域,帧应被
静默丢弃。
? Protocol Field:
协议域是2个8比特组,它的值代表了在信息域中所封装的协议。最新的协
议域值在最近的"Assigned Number"RFC中说明。最初的值列在下面的表中。
协议域中的值在"cxxx"范围内表明这是一个属于LCP或相关协议的包;
在"8xxx"范围内表明了这是一个NCP族的包;在"0xxx"的范围内表明这是一
个特定网络协议包。协议域是由PPP而非HDLC来定义,但是协议域和ISO
3309中的地址域扩展机制中的值保持兼容。所有的协议域值必须是奇数,即
最不重要8比特组的最不重要位必须是“1”,另外,最重要8比特组的最不
重要位必须是“0”。
如果收到的帧的协议域不顺从以上原则,应视为收到无法识别的帧而被LCP
处理。协议域的收发都以最重要锝比特组为先。
协议域初始赋值如下:
0001-001f
保留
0021
Internet Protocol
0023
*
ISO CLNP
0025
*
Xerox NS LDP
0027
*
DECnet Phase IV
0029
*
Appletalk
002b
*
Novell IPX
002d
*
Van Jacobson Compressed TCP/IP 1
002f
*
Van Jacobson Compressed TCP/IP 2
8021
Internet Protocol Control Protocol
8023
*
ISO CLNP Control Protocol
8025
*
Xerox NS LDP Control Protocol
8027
*
DECnet Phase IV Control Protocol
8029
*
Appletalk Control Protocol
802d
*
Reserved
802f
*
Reserved
C021
Link Control Protocol
C023
*
User/Password Authentication Protocol
*为以后使用保留,不在此文献中描述。
? Information Field
信息域是0个或多个8比特组,信息域中包含了在协议域中定义协议的数据包。
定位信息域的结束是通过结束标志序列(Flag Sequence)和2个FCS域的8比特
组的定位来完成的。信息域最大长度的缺省值是1500个8比特组,但也可通
过提前约定,改变这一缺省值。
在传送时,信息域会填充一些随机的8比特组以使信息域长度达到默认的最大
值,协议必须消除这些填补字符引起的歧义以得到真正的信息。
? Frame Check Sequence(FCS)
帧校验序列域通常为16bit,也可通过提前约定,使用32bit的FCS域以增强错
误检测。FCS域的值是根据地址域、控制域、协议域和信息域的所有比特计
算出来的,但不包括任何的启停位(异步)或任何透明插入的位(同步)或8位组
(异步),同样也不包括标志序列域和FCS自身。The FCS is transmitted with the
cofficient of the highest term first.
对FCS更多的说明信息,可见ISO 3309或CCITT X.25.
注意:一种快速表驱动的16bit的FCS实现算法见附录B,这种实现是基于[7]
和[8]的。
? 对基本帧格式的修改
LCP协议可以就标准PPP帧格式的结构的修改进行协商,然而修改后的帧应
和标准帧有明显区别。
4.链路控制协议LCP
LCP提供了一种创建、配置、维护、终止点到点连接的一种方法。LCP共有4个明显
的阶段:
? 阶段1:链路创建和配置协商
在任何网络层数据包(比如IP)交换前,LCP首先得通过交换Configure包来打开连
接。这个交换结束后再进行Configure-Ack包的双向发送和接收,完成后就进入到
Open状态。任何非LCP的包在此交换结束前收到将被静默丢弃。
有一个要点需指出:LCP处理的是链路的配置,而非单个网络层协议的配置。即
所有独立于特定的网络层协议的配置参数是由LCP配置的,所有的配置选项都被
假定为缺省的值直到被一个配置交换消息所改变。
? 阶段2:链路质量判定
LCP允许在Open状态后有一个可选的链路质量判定阶段。在此阶段,链路被测试
以决定是否可以承载网络层协议。此阶段为可选。LCP会延迟网络层协议包的发
送知道此阶段结束。链路质量判定的过程是非限定的,根据实现或用户指定的参数
的不同会有相应的变化,只要这些不影响LCP别的方面。一个建议使用的方法是
LCP的回声请求(echo-request)或回声应答(echo-reply).
一个要点是此阶段的持续时间是非确定的,因此在实现中应避免固定长度的超时,
它用于等待对端进入阶段3。
? 阶段3:网络层协议配置协商
一旦LCP完成链路质量判定阶段,网络层协议就会被特定的NCP分别进行配置。
从开始到结束的时间是不确定的,假如LCP关闭了链路,它会通知网络层协议以
使其采取特定的动作来响应。
? 阶段4:链路终止
LCP可在任何时间终止链路。这通常可能是回应有礼貌的人的关闭请求,但也有
可能是一些物理事件引起的,比如承载丢失或空闲期定时器超时。
4.1 LCP自动控制
4.1.1概述
LCP被一些有格式的包和一些有限状态的控制所说明。这一节介绍了LCP控
制过程的大致情况,还有关于状态图和状态迁移表的描述
共有三类LCP包:
? 链路建立包
用于创建和配置一条链路(e.g.
Configure-Request,Configure-Ack,Configure-Nak,Configure-Reject).
? 链路终结包
用于关闭一条链路(e.g. Termination-Request,Termination-Ack)
? 链路维护包
用于管理和测试一条链路(e.g.
Code-Reject,Protocol-Reject,Echo-Request,Echo-Reply,Discard-Request)。有
限状态控制是由事件、状态迁移和动作完成的。事件包括收到外部命令,
例如打开或关闭,重起定时器超时和收到对端LCP层的包。动作则包括
启动重起定时器或发送包。
4.1.2状态图
下面的状态图描述了一系列的事件,这些事件用于在选项配置上取得一致(打
开PPP的连接)和用语随后的连接关闭。状态机制被初始化在Clolsed(1)状态,
一旦进入Open状态(6),链路两端就达到了彼此收发Configure_Ack包的要求。
在状态图中,事件被显示在水平线的上方,动作在下方。两种类型的LCP
包:Configure-Nak和Configure-Reject并没有在状态图中显示出有区别。如随
后的描述那样,这些包实际上的服务不同但却具有相似的功能,在状态土细
节的层次上,它们总是引起相同的状态迁移。既然在下一节中会给出关于LCP
自动控制的详细说明,因此在实现上应更多的遵循状态迁移表而非状态图。
Events:
RCR:Receive Configure Request
RCA:Receive Configure Ack
RCN:Receive Configure Nak or Reject
RTR:Receive Terminate Request
RTA:Receive Terminate Ack
AO:Active Open
PO:Passive Open
C:Close
TO:Timeout
PLD:Physical Layer Down
Actions:
Scr: Send Configure Request
Sca: Send Configure Ack
Scn: Send Configure Nak or Reject
Str: Send Terminate Request
Sta: Send Terminate Ack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -