PPP帧格式
- 通常, LCP使用简单的位级别帧格式,基于高级数据链路控制(HDLC)建立链路协议
- 在PPP设计时, HDLC就已建立了一种良好的帧格式
- IBM将它修改为同步数据链路控制(SDLC),在其专用的系统网络体 系结构(SNA)协议族中用作链路层协议
- HDLC协议还用作802.2中LLC标准的基础,并最终被用于PPP
- 在通常情况下, PPP帧格式类似于图3-22所示的HDLC帧,由2个1字节的包含固定 值Ox7E的标志字段“包围” 。点到点链路的两个端点使用这些字段来发现一个帧的开始和结束。如果Ox7E值出现在帧内部,这时会带来一个小问题。它可通过两种方式来处理,这取决于PPP工作在异步还是同步链路上:
对于异步链路:PPP使用字符填充(也称为字节填充)。如果标志字符出现在帧中其他地方,则用2字节序列Ox7D5E (Ox7D称为“ppp转义 字符”)替换。如果转义字符本身出现在帧中,则用2字节序列Ox7D5D替换。因此,接收方用Ox7E替换接收的Ox7D5E,并用Ox7D替换接收的Ox7D5D
在同步链路(例如Tl线路、 T3线路)上:PPP使用位填充
- 注意,标志字符的位模式为01111110 (连续6个1的位 序列),在除了标志字符之外的任何地方,位填充在5个连续1之后填充一个00这样做意味 着,发送的字节可能超过8位,但这通常是正常的,因为低层串行处理硬件能去掉填充的比 特流,并将它恢复成未填充时的样子
- 在第一个标志字段之后,PPP采用HDLC的地址(Addr)和控制字段。在HDLC中,地 址字段用于指定哪个站正在处理,但是由于PPP只关心一个目的地,这个字段总是被设置为 OxFF (所有站)。 HDLC控制字段用于指示帧序列和重传行为。由于这些链路层的可靠性功 能通常不是由PPP实现,所以控制字段设置为固定值OxO30 由于地址和控制字段在PPP中 都是固定的常数,所以在传输过程中经常通过一个称为地址和控制字段压缩(ACFC)的选项来省略它们,该选项实质上是消除了这两个字段
- PPP帧的协议字段表明携带的数据类型。在一个PPP帧中,可携带多种不同类型的协 议。正式列表和用于协议字段的分配号显示在“点到点协议字段分配”文档中[PPPn]。根据 HDLC规范,协议号的分配方式为:高位字节的最低有效位为0,低位字节的最低有效位为1。0xOOOO - Ox3FFF (十六进制)范围内的值表示网络层协议, Ox8000 - OxBFFF范围内的 值表示NCP的相关数据。0x4000 - Ox7FFF范围内的值用于NCP不相关的“很少使用的”协议。0xCOOO - OxEFFF范围内的值表示控制协议,例如LCPo在某些情况下,如果协议字 段压缩(PFC)选项在链路建立时协商成功,协议字段可被压缩为1字节。0xOOOO - OxOOFF 范围内的协议号适用于包括大多数流行的网络层协议在内的协议。注意, LCP分组总是使用 2字节的未压缩格式
- PPP帧的最后部分包含一个16位的FCS(一个CRC16,生成多项式为10001000000100001 ), 涵盖除FCS字段本身和标志字节之外的整个帧。注意, FCS的值涵盖任何字节或位被填充之前的帧。LCP选项(见3.6.1.2节)可将CRC从16位扩展到32位。在这种情况下,可采用 与前面提到的以太网相同的CRC32多项式
LCP帧
- LCP在基本PPP分组之上进行了简单的封装。如图3-23所示
- LCP的PPP协议字段值始终是OxCO21,它不能用PFC删除,以免产生歧义。标识字 段是由LCP请求帧的发送方提供的序列号,并随着每个后续消息进行递增。在生成一个回 复(ACK、 NACK或RE肥CT响应)时,这个字段通过复制响应分组请求中包含的值来构造。 采用这种方式,请求方可通过匹配标识符来识别相应请求的应答。代码字段给出了请求或响 应的操作类型:配置请求(OxOl )、配置ACK (OxO2)、配置NACK (OxO3)、配置REJECT (OxO4)、终止请求(OxO5 )、终止ACK(OxO6)、代码REJECT(OxO7)、协议REJECT(OxO8 )、 回送请求(OxO9)、回送应答(OxOA)、放弃请求(OxOB)、标识(OxOC)和剩余时间(OxOD)。ACK消息通常表明接受一组选项, NACK消息用建议选项表明部分拒绝。 REJECT消息完 全拒绝一个或多个选项。拒绝代码表明前一个分组包含的某些字段值未知。长度字段给出了LCP分组的字节长度,它不能超过链路的最大接收单元(MRU),我们稍后讨论一种建议的最 大帧限制。注意,长度字段是LCP协议的一部分; PPP协议通常不提供这种字段
- LCP的主要工作是使一条点到点链路达到最低要求。配置消息使链路两端开始基本配置 过程,并建立商定的选项。终止消息用于在完成后清除一条链路。LCP也提供了前面提到的 一些附加功能。回送请求/应答消息可由LCP在一条活跃链路上随时交换,以验证对方的操 作。放弃请求消息可用于性能测试,指示对方丢弃没有响应的分组。标识和剩余时间消息用 于管理目的:了解对方的系统类型,指出链路保持建立的时间(例如出于管理或安全原因)
- 从历史上来看,如果一个远程工作站处于环回模式(或者说“回路” ),这时点到点链路 会出现一个常见问题。电话公司的广域数据线路有时会为了测试而设置成环回模式,由一 方发送的数据直接由另一方返回。虽然这可能对线路测试有用,但它对数据通信完全没有帮 助,所以LCP包括一种发送魔术数字(由发送方选择的任意数字)的方式,并查看是否立即 返回相同类型的消息。如果是的话,该线路被检测为处于回路,并可能需要进行维护
为了对PPP链路建立和选项协商有一个更好的认识,图3-24显示了一个简化的分组交 换时间表和一个简化的状态机(在链路两端实现)。
- 一旦底层协议表明一个关联变为活跃(例如调制解调器检测到载波),则认为这个链路已 被建立。链路质量测试包含链路质量报告和确认交换(见3.6.1.2节),它也可以在此期间完成。 如果链接需要认证(这是常见的),例如当拨号到一个ISP时,可能需要一些额外的信息交换, 以认证链路上的一方或双方的身份。当底层协议或硬件表明一个关联已停止(例如载波消失), 或发送一个链路终止请求,并从对方接收到一个终止响应,则认为这个链路已被终止
LCP选项
- 当LCP建立一条由一个或多个NCP使用的链路时,可以对一些选项进行协商。我们 将讨论两种或更多的常见情况。异步控制字符映射(ACCM)或简称“ asyncmap”选项定义 哪些控制字符(即OxOO - OxIF范围内的ASCⅡ字符)需要被“转义”为PPP操作。转义一 个字符表示不发送这个字符的真实值,而将PPP转义字符(Ox7D)放在控制字符原始值和 Ox20异或形成的值之前。例如, XOFF字符(Ox13)将转换为(Ox7D33)发送o ACCM用于 控制字符可能影响底层硬件操作的情况。例如,如果软件流控制能够使用XON/XOFF字符, 而XOFF字符未经转义就通过链路传输,则硬件直到看到一个XON字符才停止数据传输o asyncmap选项通常是一个32位的十六进制数,其中第77个最低有效位被设置为1 ,表示值为#的控制字符应被转义。因此, aSynCmaP为Oxffffffff表示转义所有控制字符,为OxOOOOOOOO 表示不转义任何控制字符,为OxOOOAOOOO表示转义XON (Ox11 )和XOFF (Ox13)。虽然 Oxffffffff是默认值,但当前很多链路可在asyncmap被设置为OxOOOOOOOO时安全运行。
- 由于PPP缺少一个长度字段,并且串行线路通常不提供帧封装,所以在理论上对一个 PPP帧的长度没有硬性限制。实际上,最大帧大小通常由MRU指定。当一台主机指定一个 MRU选项(类型OxOl )时,它要求对方不发送比MRU选项提供的值更长的帧。MRU值是 数据字段的字节长度,它不计算其他PPP开销字段(即协议、 FCS、标志字段)。它的典型 值是1500或1492,但也可能多达65 5350 1Pv6操作需要的长度最小为12800 PPP标准要求 具体实现能接收最大1500字节的帧, MRU更多的是建议对方选择帧大小,而不是硬性限制 帧大小。当小分组和大分组在同一条PPP链路上交错传输时,较大分组可能占用一条低带宽链路的大部分带宽,并影响小分组的正常传输。这可能导致抖动(延迟变化),对交互式应用 (例如远程登录和VbIP)产生负面影响。配置较小的MRU (或MTU)有助于缓解这个问题, 但会产生更大的开销
- PPP支持一种交换链路质量报告信息的机制。在选项协商期间,可能包括一个包含所请 求的特定质量协议的配置信息。选项中的第16位被保留给特定协议,但最常见的是一个包 括链路质量报告(LQR)的PPP标准[RFC1989],它在PPP协议字段中使用值OxCO250如 果启用该选项,则要求对方按某个周期间隔提供LQR。LQR请求之间的最大周期间隔被编 码为一个32位数字,它被保存在配置选项中,并以1/100秒为单位表示。对方可能比这个 要求更频繁地生成LQRoLQR包括以下信息‥一个魔术数字、发送和接收的分组数和字节数、 出错的输人分组数和丢弃的分组数,以及交换的LQR总数。在一个典型的实现中,允许用 户设置对方发送LQR的频繁程度。如果链路质量无法满足某些配置阑值,有些实现也提供 了终止链路的方法。LQR可在PPP链路进人建立状态后请求。每个LQR被赋予一个序列号, 因此它能确定一段时间内的趋势,甚至在LQR重新排序时也能确定
- 很多PPP实现支持一种回叫功能。在一次典型的回叫建立过程中, PPP拨号回叫客户端 呼叫PPP回叫服务器,并提供认证信息,而服务器断开连接并回叫客户端。在呼叫费用不对 称或对于某些安全级别的情况下,这种做法可能是有用的。LCP选项针对用于协商回叫的协 议,该选项值为OxOD [RFC1570]。如果许可,回叫控制协议(CBCP)完成协商
- PPP使用的一些压缩和加密算法在处理时需要一定的最小字节数,称为块大小。在数据 不够长的情况下,通过填充增加数据长度,达到一个甚至多个块的大小。如果存在填充,它通[函 常位于数据区后面,并位于PPP FCS字段之前。一种填充方法称为自描述填充[RFC1570], 它将填充值变为非零值。这时,每个字节获得填充区域的偏移量值。因此,填充的第一个字 节值为Ox0l,最后一个字节包含填充字节数。最多支持255字节的填充。自描述填充选项 (类型10)用于让对方了解填充类型和最大填充值(MPv),它是这个关联允许的最大填充 值。由于基本PPP帧缺少一个明确的长度字段,因此一个接收方可使用自描述填充,以确定 应从接收的数据区删除多少填充字节
- 为了减小每个帧包含一个头部的固定开销,提出了一种将多个不同协议的有效载荷聚合 成PPP帧的方法,称为PPPMux [RFC3153]方法。主要PPP头部的协议字段被设置为聚合 帧(OxoO59),然后每个有效载荷块被插人帧中。通过在每个有效载荷块之前插人1 - 4字 节的子帧头部来实现。在子帧头部中, 1位(称为PFF)说明子帧头部中是否包含协议字段, 1位(称为LxT)说明后面的长度字段是1字节还是2字节。除此之外, 1或2字节的协议 ID使用与外部的PPP头部相同的值和压缩方法。在子帧与默认PID (该PID在配置阶段通 过PPPMux控制协议(PPPMuxCP)建立)匹配时, PFF可以为0 (意味着不存在PID字段)
- PPP帧格式如图3-19所示,普通PPP/HDLC的FCS可以是16或32位。默认的FCS为 16位,但32位的FCS值可通过32位的FCS选项来启用。其他的LCP选项包括使用PFC 和ACFC,以及认证算法的选择
- 国际化[RFC2484]提供了一种使用语言和字符集的表示方式。字符集是一个来自“字符集注册表” [IANA-CHARSET]的标准值,并从[RFC5646] [RFC4647]的列表中选择语言
- 在图3-25中,我们看到一个MP分片的开始分片(B)、结柬分片(E)位字段和序列号 字段。这里,需要注意的是长格式(4字节用于分片信息)和短格式(2字节用于分片信息)。 在选项协商阶段, LCP的短序列号选项(类型18)用于选择使用的格式。如果一个帧没有被 分片,但使用这种格式传输,则B和E位都被置位,表明该分片是第一个和最后一个(即它 是整个帧)。否则,第一个分片的B、 E位组合被设置为10,最后一个分片的B、 E位组合被 设置为01 ,它们之间的所有分片被设置为000序列号给出相对第一个分片的分组号偏移量