第3 章 数据链路层协议 数据链路层位于OSI/RM 参考模型中自底而上的第二层,介于物理层和网络层之 间。数据链路层利用物理层提供的服务,且在此基础上向网络层提供服务。数据链路层 的基本服务是把源主机网络层的数据,以帧为单位,透明、无差错地传输给目标主机的网 络层。数据链路层通常涉及以下基本问题: . 如何将数据组成数据帧(Frame); . 如何控制帧在物理信道上的传输,包括如何处理传输差错,如何进行流量控制; . 如何管理数据链路的建立、维持和释放。 本章分为两部分。第一部分包括3.1节,涉及数据链路层协议的基础知识。第二部 分包括3.2节、3.3节和3.4节,内容涉及PPP、以太网和IEEE802.11协议的原理、协议分 析和仿真。 3.1 数据链路层协议概述 数据链路层的任务是将网络层交付的数据报通过一段链路从一个站点传输到相邻站 点。数据链路层协议交换的数据单元称为帧(Frame),每个数据链路层的帧通常封装了 网络层的一个数据报,该封装过程称为成帧。数据链路层协议定义了在链路两端的站点 之间交互的帧格式,以及当发送和接收帧时,站点所采取的操作。在发送帧前,数据链路 层首先要进行成帧操作,接下来接收帧,其可以选择的操作包括差错检测、可靠传输、流量 控制和随机接入等。著名的数据链路层协议包括点到点协议(PointtoPointProtocol, PPP)、以太网和IEEE802.11协议。 数据链路层的基本服务是将网络层分组通过通信链路从一个站点移动到相邻站点, 设计数据链路层协议通常涉及以下基本问题。 1.成帧(Framing) 数据链路层的帧在链路上传输之前,需将每个网络层数据报用数据链路层的帧封装 起来。如何确定帧的边界位置即帧定界非常重要。帧定界通常采用识别特殊的帧序列来 进行。帧通常由若干首部字段和一个数据字段组成,其中网络层数据报就承载在其数据 字段中。事实上,除了首部字段外,部分帧协议还可能包括帧尾部字段,而这种首部字段 和尾部字段可以统称为首部字段。帧的特定结构由所使用的数据链路层协议进行规定。 2.差错检测(ErrorDetection) 帧在传输过程中,由于信道上存在信号衰减和电磁噪声等因素,其中的某个比特位1 48 网络协议——分析、设计与仿真 在接收方可能被判断为0,反之亦然。大部分的数据链路层协议能够提供一种机制来检 测是否存在差错,例如发送方系统在帧中设置差错检测比特,接收方系统采用同样的方法 进行差错检测,若产生的差错检测比特不同,就通知对方重新发送该帧,直至得到正确帧 为止。数据链路层的差错检测通常用硬件实现。与差错检测不同,差错纠正(Eror Detection)通过引入更多的冗余比特,不仅能够检测出帧中存在的差错,而且能够准确地 判断帧中差错出现的位置,进而纠正差错。 3.可靠交付(ReliableDelivery) 当数据链路层提供可靠交付服务时,将保证无差错地经过链路传输每个帧。对于比 特差错率极低的光纤、铜缆和双绞线构成的数据链路层,通常认为引入数据链路层的可靠 交付服务会带来不必要的开销,会严重影响网络的数据传输速率,偶尔出现的差错可以由 位于网络边缘的传输层来处理。但对于差错率较高的无线链路,一般都会在链路层采用 可靠交付措施,因为将差错交由高层协议来处理,将导致整个网络系统的低效。 4.媒体访问(MediumAces) 媒体访问控制(MediumAcesControl,MAC)协议规定了站点在链路上传输帧的 规则。当链路两端仅有一个站点时,MAC协议比较简单,因为不会出现帧碰撞,所以收 发双方无需协调发送帧的顺序。但对于多个站点共享一条通信信道时,就必然会遇到多 路访问(MultipleAces)问题,即多个站点经过同一共享信道通信,进而出现碰撞和复 用/分用解问题,此时需要使用MAC协议协调多个站点之间的帧传输。 5.流量控制(FlowControl) 链路上的站点具有缓存帧的能力,但其缓存能力通常是有限的。如果发送站点发送 分组过快,就可能造成接收站点缓存区溢出,从而造成帧丢失,数据链路层协议需要提供 某种流量控制策略,以解决该问题。但数据链路层的流量控制服务会引入不必要的开销, 并且会严重影响网络的数据传输速率,同时增加网络核心设备的成本,因此流量控制服务 通常由位于网络边缘的高层协议进行处理。 2 PPP协议分析 3. 3.2.1 PPP 协议概述 PPP(PointtoPointProtocol,点到点协议)是为点对点链路上传输多种协议的数据 包提供的一种标准方法,其最初的设计目的是为两个对等站点之间的IP传输提供一种封 装协议。除了IP协议以外,PPP协议还可以封装其他协议,包括Novel 的IPX (网间分组交换) IETF就对 InternetworkPacketExchange, 协议等。早在1994年7月, PPP协议进行了标准化(RFC1661),至今,PPP协议仍然在广泛应用。 PPP协议规定了以下内容: .帧格式; .用于建立、配置和测试PPP链路的LCP(LinkControlProtocol,链路控制协议); .用于建立、配置网络层协议的NCP(NetworkControlProtocol,网络控制协议), 第 3 章 数据链路层协议 49 对于IP网络,使用IPCP(IP控制协议) IPControlProtocol,协议; .若需要认证时,可选用PAP(PaswordAuthenticationProtocol,口令认证协议) 和CHAP(ChalengeHandshakeAuthenticationProtocol,基于挑战的握手认证 协议)。 1.PPP协议流程 在建立、保持和终止PPP链路的过程中,PPP链路需要经过5个阶段,除认证阶段 外,其他4个阶段都是必要阶段。PPP协议链路转换过程如图3. 1所示。 图3. 1 PPP协议链路转换过程 (1)链路不可用阶段(Dead) 链路状态的起始点和终止点,当一个外部事件(例如检测到载波信号)指出物理层已 经准备就绪时,就进入“链路建立阶段”。 (2)链路建立阶段(Establish) 通信双方使用LCP协议进行参数协商、配置链路。若协商成功,进入“认证阶段”,否 则回到“链路不可用阶段”。 (3)认证阶段(Authenticate) 认证阶段不是必要过程,若发起方希望根据某一特定的认证协议进行认证,则发起方 必须在“链路建立阶段”,声明要求使用的认证协议,常用的认证协议有PAP和CHAP 。 认证应尽可能在链路建立后立即进行,在认证完成之前,禁止从“认证阶段”进入到“网络 层协议阶段”。若认证失败,则进入“链路终止阶段”。 (4)网络层协议阶段(Network) 在传输数据之前,需要使用NCP协议协商双方通信时的参数,通常会进行IP地址的 协商。若协商成功,双方开始通信,否则进入“链路终止阶段”。 (5)链路终止阶段(Terminate) PPP协议可以在任何时刻终止链路,PPP链路终止后,物理层链路仍然可用。通信 方收到对方发出的链路终止请求时,应给予确认。若载波信号丢失或停止时,应回到“链 路不可用阶段”。 50 网络协议——分析、设计与仿真 2.PPP帧格式 PPP帧格式如图3. 2所示。 图3. 2 PPP协议帧格式 Flag字段为帧定界标志,用于标识PPP帧的开始与结束,长度为1字节,取值固定为 0x7E 。若两个Flag字段紧靠在一起,表示该PPP帧未包含任何数据,此外,连续传送 PPP帧时,会省略标识结束用的Flag字段,此时每一帧之间只用一个Flag字段加以区 分,连续多帧省略结束Fla3所示。 g标志的示例如图3. 图3.lag标志示例 3 PPP协议省略结束F Addres 字段为地址字段,用于标识接收方的地址,长度为1字节,因点到点链路的接 收方是唯一的,故此字段取值固定为0xFF,表示只有对方才能接受到数据。 Control字段为控制字段,长度为1字节,取值固定为0x03,表示无序号信息 (UnnumberedInformation)。 Protocol字段为协议字段,用于标识PPP帧封装的协议数据类型,长度为2字节。此 字段使PPP得以封装不同的协议。其部分取值和含义见表3. 1。 Infortion字段为信息字段,该字段长度不固定,最大长度等于MRU(Maximum ReceiveUnit)(a) (m) 值,默认为1500字节。此字段存放承载的协议数据,包括LCP 、NCP等。 FCS(FrameChecksum)字段为帧校验和字段,用于检测PPP帧的完整性,长度为2字节。 表3.rtcl字段取值及含义 1 Pooo 段值协议 0x0021 IP(InternetProtocol) 0x0029 0x8021 0xC021 0xC023 0xC025 0xC223 Appletalk IPCP(InternetProtocolControlProtocol) LCP(LinkControlProtocol) PAP(PaswordAuthenticationProtocol) LQR(LinkQualityReport) CHAP(ChalengeHandshakeAuthenticationProtocol) 字 第 3 章 数据链路层协议 51 3.LCP LCP(LinkControlProtocol,链路控制协议)用于建立、配置、维护和终止PPP 链路。 当使用PPP 协议通信的双方需要建立链路时,发起方发送LCP 报文给对方,该报文中承 载了建立链路需要协商的各种参数,若双方协商成功,则链路成功建立,否则,由发起方决 定是否需要再次协商。 LCP 协议负责PPP 的链路管理,其与具体的上层(网络层)协议无关,无论PPP 封装 的是IP 、IPX 协议,还是其他协议,都使用相同的LCP 协议进行链路管理。 当PPP 帧中Protocol字段为0xC021 时,表示Information字段的数据为LCP 报文。 LCP 报文的格式如图3. 4所示。 图3. 4 LCP 报文格式 (1)LCP 报文的种类 LCP 报文从功能上进行划分,可分为三大类型:链路配置报文、链路终止报文和链路 维护报文,每种类型具有不同的报文格式,LCP 报文的功能与报文的对应关系如表3. 2 所示。 ①链路配置报 文 链路配置报文用于链路建立和配置,4种常用的链路配置报文说明如下 。 .Configure-Request(配置请求) 当需要建立逻辑链路时,发起方发送Configure-Request(配置请求)报文,用于协商 参数;若接收方对收到的每个配置选项值都可以接受时,则回送Configure-Ack(配置确 认)报文;若收到的配置选项可以识别,但部分配置选项参数不能接受,则回送Configure- Nak(配置否认)报文,并标示出需要重新协商的配置选项;若配置选项不可识别或不可接 受,则回送Configure-Reject(配置拒绝)报文。 Configure-Request的Code字段值为0x01,Data字段值为1到多个选项(Options) 列表,选项列表中的参数可同时进行协商。选项字段格式如图3. 5所示。 表3. 2 LCP 功能与报文的对应关系 类型功能报文类型报文代码 Configure-Request 1 链路配置建立和配置链路Configure-Ack 2 Configure-Nak 3 Configure-Reject 4 链路终止终止链路Terminate-Request 5 Terminate-Ack 6 52 网络协议——分析、设计与仿真 续表 类型功能报文类型报文代码 Code-Reject 7 Protocol-Reject 8 链路维护管理和调试链路Echo-Request 9 Echo-Reply 10 Discard-Request 11 图3.选项字段格式 5 所示。 e为类型字段,用于区分不同的协商参数,Type字段对应参数及功能如表3. Typ3 Length为长度字段,Length字段指出该配置选项(包括Type、Length和Data字段) 的长度。 Data为数据字段,Data字段为零或者多个八位字节,其中包含配置选项的特定详细 信息。若Da字段的数据长度超过Lh字段所指出的长度,则接收方应丢弃整个配 置报文。 atengt 表3.e字段对应参数及功能 3 Typ Type值对应参数功能 0x00 Reserved 保留 0x01 MaximumReceiveUnit 最大接收单元 0x02 AsynchronousControlCharacterMap 异步控制字符映射 0x03 AuthenticationProtocol 认证协议 0x04 QualityProtocol 质量协议 0x05 MagicNumber 幻数 0x07 ProtocolFieldCompresion 协议域压缩 0x08 AddresandControlFieldCompresion 地址及控制域压缩 LCP常用的7种选项如下: 最大接收单元(MaximumReceiveUnit,MRU) 用于通告对方可以接收的最大报文 长度,一般默认值是1500字节。此选项Type字段取值0x01,Length字段为0x04,Data 字段占2字节,指出最大报文长度。 异步控制字符映射(AsynchronousControlCharacterMap,ACCM) 字段用于协商在 异步链路中透明传输控制字符的方法。 53 第 3 章 数据链路层协议 认证协议(AuthenticationProtocol,AP) 用于向对方通告所使用的认证协议。此选 项Type字段为0x03,Length字段的值大于或等于0x04,Data字段分为两个部分,前半 部分是2字节的认证协议字段,指出认证阶段想要使用的认证协议,若取值为0xC023,则 使用PAP认证协议,若取值为0xC223,则使用CHAP认证协议;后半部分是具体配置协 议跟随的附加数据。 质量协议(QualityProtocol,QP) 用于向对方通告所使用的链路质量监控协议。此 选项Type字段取值为0x04,Length字段的值大于或等于0x04,Data字段分为两个部 分,前半部分是2字节的质量协议字段,指出链路想要使用的质量监测协议,一般取值为 0xC025,代表LQR(LinkQualityReport,链路质量报告);后半部分是具体质量协议的附 加数据。 幻数(MagicNumber,MN) 字段用于监测网络中是否有自环现象。若通信的一方 发现自己最近发出的报文中包含的幻数总是与最近收到的幻数相同,即可判定出现了回 路。此选项Type字段取值为0x05,Length字段取值为0x06,Data字段为4字节的幻 数值。 协议域压缩(ProtocolFieldCompresion,PFC) 字段用于通知对方可以接收Pro(“) tocol”字段经过压缩的帧。此选项Type字段取值为0x07,Length字段取值为 0x02,无Data字段。 地址及控制域压缩(Addres andControlFieldCompresion,ACFC) 字段用于通知 对方可以接收“Addres”和“Control”字段经过压缩的PPP帧。此选项Type字段取值为 0x08,Length字段取值为0x02,无Data字段。 图3.6给出了一个LCPConfigure-Request报文的示例。在此PPP帧中,Protocol域 取值为0xC021,标识其后的Data字段部分封装的是LCP报文。LCP报文代码字段取值 为0x01,标识为0x01,长度24,标识该LCP报文为Configure-Request报文,总长度是24 字节。其后是各部分协商的内容,包括MRU为1500字节,使用PAP认证协议作为认证 协议,质量协议使用LQR 。 图3.t报文示例 6 LCPConfigure-Reques .Configure-Ack(配置确认 ) 若接收的Configure-Request报文中的每一个配置选项值都可接受,则回 送 54 网络协议——分析、设计与仿真 Configure-Ack(配置确认)报文,回送的Configure-Ack报文中的Identifier字段必须与最 后接收的Configure-Request报文相匹配。此外,Configure-Ack报文中的配置选项必须 与最后接收的Configure-Request报文完全匹配。 Configure-Ack报文中的Code字段值为0x02,Data部分包含零到多个确认配置选 项列表。配置选项的格式与Confiure-Reuest报文相同。 .Configure-Nak(配置否认) gq 若收到的每个配置选项都可以识别,但是配置选项值不能接受,则接收方必须回送 Configure-Nak。配置选项部分仅用不能接受的配置选项进行填充,回送的Configure- Nak报文中的Identifier字段必须与最后接收的Configure-Request报文相匹配。 Configure-Nak报文的Code字段值为0x03,Data部分包含零到多个没有确认的配 置选项列表,配置选项的格式与Configure-Request报文相同。 .Configure-Reject(配置拒绝确认) 若收到的部分配置选项是不可识别或不能接受,则回送Configure-Reject报文。配 置选项部分仅用不能接受的配置选项进行填充,回送的Configure-Reject报文中的 Identifier字段必须与最后接收的Configure-Request报文相匹配。 Configure-Reject报文中的Code字段值为0x04,Data部分包含零到多个没有确认的 配置选项列表,配置选项的格式与Configure-Request报文相同。 ②链路终止报文 链路终止报文用于链路的释放,包括两种报文,分别是Terminate-Request(终止请 求)报文和Terminate-Ack(终止应答)报文。链路终止报文的格式和LCP 报文格式一致 (如图3.也由CodIdentifier、Length和Data字段组成。其中Code字段取值为 4所示), e、 0x05 和0x06,Length字段指出该配置选项的总长度。数据字段可为空,也可以是发送方 自定义的数值,例如链路终止原因的描述等。 ③链路维护报文 链路维护报文用于链路的管理和调试。LCP 规定了5种链路维护报文,其中Code- Reject(代码拒绝)和Protocol-Reject(协议拒绝)报文用于报告Code及Protocol字段的 错误,Echo-Request(回复请求)和Echo-Reply(回复应答)报文用于链路质量和性能测 试,Discard-Request(丢弃请求)报文用于辅助调试从发送方到接收方的链路状态,对方在 接收到这种报文后,应直接丢弃。 .Cod-Rjct(代码拒绝) Code-Reje(e) ct((e) (e) 代码拒绝)报文表示无法识别报文的Code字段,Code字段值为0x07 。 若收到该类错误,应立即终止链路,该报文的格 式如图3.其中“ 字段包 7所示, 被拒绝的报文” 含了无法识别的LCP 报文。 .Protocol-Rjct(协议拒绝)图3.t报文格式Protocol-Reject((e) (e) 7 Code-Rejec协议拒绝)报文表示无法 识别报文的Protocol字段,Code字段值为 08 。若收到该类错误, 该报文的格式如图3. 0x应停止发送该类型的协议报文,8所示,其 55 第 3 章 数据链路层协议 中“被拒绝的协议”字段指明了无法识别的协议,“被拒绝的信息”字段包含了被拒绝的 PPP 帧的数据区。 图3.t报文格式 8 Protocol-Rejec .Echo-Request(回复请求)和Echo-Reply(回复应答) Echo-Request(回复请求)和Echo-Reply(回复应答)报文用于链路质量和性能测试, Code字段值为0x09 和0x0A, 9所示。 其格式如图3. 图3.t和Ey报文格式 9 Echo-Requescho-Repl .Discard-Request(丢弃请求) Discard-Request(丢弃请求)报文用于辅助错误调试,无实质用途。其Code字段值为 0x0B 。该报文收到即会丢弃,其格式与Echo-Request和Echo-Reply报文格式相同(如 图3. 9所示)。 (2)LCP 报文工作流程 LCP 报文的工作流程可以分为3种:包括链路建立和配置流程、链路终止流程和链 路维护流程。 ①链路建立和配置流程 当需要建立链路时,发起方发送Configure-Request报文,用于协商参数;若接收方对 收到的配置选项和其值均可接受,则回送Configure-Ack报文,经过双方一到多次的交 互,PPP 链路成功建立;若收到的配置选项可识别,但部分参数不能接受,则回送 Configure-Nak报文,并标示出需要重新协商的参数,其后发起方会再次进行协商;若有 参数不可识别或不能接受,则回送Configure-Reject报文,由发起方决定是否再次协商。 PPP 链路建立和配置流程如图3.10 所示,在实际的PPP 链路建立过程中,不一定能观察 到Configure-Nak和Configure-Reject报文。 ②链路终止流程 若通信的一方要终止链路时,需向对方发送Terminate-Request报文,并且在收到 Terminate-Ack报文响应前,应该不断发送;接收方在接收到Terminate-Request报文时, 必须响应Terminate-Ack报文。PPP 链路终止流程如图3.若载波信号丢失或停 11 所示, 止,通信双方间不存在链路终止流程,则直接回到“链路不可用阶段”。 56 网络协议——分析、设计与仿真 图3. 10 PPP 链路建立和配置流程 图3. 11 PPP 链路终止流程 ③链路维护流程 在链路维护期间,LCP 协议使用消息来提供反馈和测试链路。PPP 链路维护流程示 例如图3. 12 所示。 图3. 12 PPP 链路维护流程示例 第 3 章 数据链路层协议 57 其中Echo-Request、Echo-Reply和Discard-Request报文可用于测试链路。例如,发 起方若想对链路进行环回测试时,其发送Echo-Request报文,接收方收到Echo-Request 报文后,回应Echo-Reply报文,通过该过程除完成握手以外,还可通过对幻数字段的检 测,判定网络是否发生自环现象,若链路发生了自环,则应采取相应措施对链路复位。如 果PPP发送的Echo-Request报文产生丢失,则在连续丢失最大允许丢失的个数之后,也 会将链路复位,以免过多的无效数据传输。 Code-Reject和Protocol-Reject报文用于数据通信期间,也就是用于发送和接收数据 的过程中,如果无法识别报文的Code字段或无法识别报文的Protocol字段,可使用这两 种报文来提供反馈。例如,如果从对方那里收到无法解释的报文,则回应Code-Reject 报文。 4.NCP 通过LCP将各种链路参数协商成功后,通信双方就建立了逻辑链路,若发起方希望 进行认证,则进入认证阶段,确认对方的合法性。认证成功后,还需要进一步协商上层(网 络层)的一些参数,此时需要使用NCP(NetworkControlProtocol,网络控制协议)进行参 数协商。 不同的网络层协议会使用不同的NCP协议,例如:IP协议使用IPCP(Internet ProtocolControlProtocol,IP控制协议)进行协商,Appletalk协议使用AppletalkNCP NoveInternetPacketExchang 进行协商, l 的IPX协议使用IPE(e,互联网包交换协议)进 行协商。因目前较为广泛应用的协议是TCP/IP,故本书只介绍IPCP 。 若PPP帧中Protocol字段取值为0x8021时,表示PPP帧正在使用IPCP协议协商 相关通信参数,该PPP链路上就可以传送IP数据 IPCP协议完成协商IP地址等工作后, 报;若IP数据报传送完毕,若要关闭IP协议,则仍需通过IPCP协议协商终止,此时PPP 的链路仍然存在,若要释放链路,则需借助LCP协议。 (1)IPCP格式 IPCP(nentPooootortcl,报文格式和LCP报文的格 ItrertclCnrlPoooIP控制协议) 式非常相似,其格式如图3. 13所示。 图3. 13 IPCP报文格式 Cde为代码字段(也称类型字段),长度为1字节,用于标识IPCP报文的类型。 IPCP与(o) LCP的配置协商流程类似,其报文类型有7种:Configure-Request、Configure- Ack、Configure-Nak、Configure-Reject、Terminate-Request、Terminate-Ack 和Code- Reject,常见的代码如表3.虽然IPCP和LCP非常相似, ode字段 4所示。注意, 甚至连C 值都类似,但IPCP仅负责TCP/IP网络层相关传输参数的设置。 r为标识字段,长度为1字节,为报文的唯一标识,r字段用于匹配请 IdentifieIdentifie 58 网络协议——分析、设计与仿真 求和回复。 Length为长度字段,长度为2字节,Length字段指出该报文的长度,包括Code、 Identifier、Length和Data的长度。 Data为数据字段,长度可以是零或多个八位字节,由Length字段声明。Data字段的 格式由Code字段决定。 表3. 4 IPCP代码与报文类型对应关系 Code(代码) 0x01 0x02 0x03 0x04 0x05 0x06 0x07 (2)IPCP配置选项 IPCP报文类型 Configure-Request Configure-Ack Configure-Nak Configure-Reject Terminate-Request Terminate-Ack Code-Reject IPCP协议中,通信双方可协商的配置选项有3种:多个IP地址(IP-Addreses)、IP 压缩协议(IPCompeortcl) IPAdde rsinPooo和IP地址(rs)。 多个IP地址(s) 由于多个IP地址很难全部协商成功,故本选项很 . IP-Addrese 少使用 。 .IP压缩协议(IPCompresionProtocol) 本选项用于协商使用的压缩协议。 IPCP协议中仅规定了“VanJacobson”一种压缩协议,编号为0x002D,Type字段 取值为0x02 。该选项默认值为不进行压缩。 .IP地址( s) 若发起方请求对方分配一个IP地址,接收方收到后会返 IPAddre 回一个合法的IP地址。此时,报文Type字段设置为0x03,Length字段设置为 0x6,其后4字节全为0x00,指明由对方提供IP地址。 图3.14给出一个IPCP协议Configure-Request报文示例。在该PPP帧中,Protocol 字段取值为0x8021,表示数据部分为IPCP报文;Code字段为0x01,Identifier字段为 0x05;Length字段额外为0x10,指示该报文为Configure-Request报文,总长度为16字 节;其后是各部分的协商参数,指定VanJacobson为压缩协议,由对方提供IP地址。 5.PAP PPP中,常用的认证协议有PAP(PaswordAuthenticationProtocol,口令认证协议) 和CHAP(ChalengeHandshakeAuthenticationProtocol,基于挑战的握手认证协议)。 PAP的整个认证流程非常简单,这是PAP最大的优点,但PAP认证只能在链路建立阶 段进行,身份和口令以明文进行传输,安全性低;CHAP协议可以在链路建立和数据通 信阶段多次使用,同时安全性较高。目前PPP协议的认证阶段多使用CHAP认证 协议。 第 3 章 数据链路层协议 59 图3.onfigure-Request报文示例 14 IPCP协议C (1)PAP认证流程 15所示。认证方向被认证方一直发送Au PAP的认证流程如图3.thenticate-Request (认证请求)报文直到收到回复为止,其中包含了身份(通常是账号)和口令信息;若认证通 过,认证方回复Authenticate-Ack(认证确认)报文,否则认证失败,返回Authenticate- Nak(认证否认)报文。 图3. 15 PAP认证流程 (2)PAP报文格式 当PPP帧中Protocol字段取值为0xC023时,表示Information字段承载的是PAP 报文。图3. 16给出了PAP的报文格式。 若Code取值为0x01,表示报文是Authenticate-Request报文,该报文带有身份和口 令的长度和内容;若Code取值为0x02或0x03,表示报文是Authenticate-Ack报文或 Authenticate-Nak报文,该报文带有MesageLength和Mesage字段,指示认证描述信 息的长度和内容,如认证失败时,可返回失败原因。 60 网络协议——分析、设计与仿真 图3. 16 PAP报文格式 6.CHAP CHAP(ChalengeHandshakeAuthenticationProtocol,询问握手认证协议)通过三 次握手周期性地校验对方身份,可以在初始链路建立之后重复进行。通过递增改变的标 识和可变的询问值,防止来自端点的重放攻击,限制暴露于单个攻击的时间。目前PPP 协议的认证阶段多使用CHAP认证协议。 (1)CHAP认证流程 CHAP认证流程由Chalenge、Response和Suces/Failure报文组成,并配合事先协 商好的算法,确认被认证方的身份。CHAP协议通常使用MD5(MesageDigest Algorithm5)作为其默认算法,因此CHAP又称为MD5CHAP 。CHAP认证流程如 图3. 17所示。 图3. 17 CHAP认证流程 61 第 3 章 数据链路层协议 其中,认证方给被认证方发送一个Chalenge报文,其中包含了随机数c;作为响应, 被认证方将双方共享的秘密值s和c一起作为输入,计算散列值A1,散列函数通常使用 MD5算法,并通过Response报文返回;认证方在本地将s和c作为输入,用同一散列函 数计算散列值A2,计算出来的结果进行比较,若两者相同,认证通过,返回Suces 报文; 若不同,则认证失败,返回Failure报文。 (2)CHAP报文格式 若PPP帧中Protocol字段取值为0xC223时,表示Information字段承载的是 CHAP报文。图3. 18给出了CHAP报文格式。 图3. 18 CHAP报文格式 若Code取值为0x01或0x02,则分别表示Chalenge报文和Response报文;Value- Size字段表示Value字段的长度,其值是随机数,每次认证的Value字段值都不同,认证 方和被认证方配合事先协商好的算法来计算散列值;Name字段包含了发送方的身份描 述信息。 若Code取值为0x03或0x04,则分别表示Suces 报文和Failure报文。Mesage字 段由零到多字节组成,内含相关的描述信息。 3.2.2 PPP 协议分析 本节以GNS3为工作平台,以实验形式展开PPP协议的分析工作。 1.总体思路 通过GNS3模拟两台Cisco路由器,并在路由器之间配置一条PPP链路。首先,利用 Wireshark工具在PPP链路进行捕获,利用捕获结果分析PPP链路建立和网络层协商过 程;其次,分析PPP数据传输过程;最后,在PPP链路配置采用CHAP协议进行认证,分 析CHAP认证过程。 2.网络环境搭建 (1)网络拓扑配置 19所示, R1和R2都是Ci 在GNS3中新建工程,配置网络拓扑如图3.其中,sco2600 系列路由器(本示例选用Cisc选用的IOS映像为c2691josmz12322.in), o2691, -k93-.-bR1和R2的WICs插槽wic0配置为WIC-2T模块接口卡(为路由器提供两个serial端 口,如图3.并在路由器R1的sraeil0/0端口之 间建立链路 20 。 所示), eil0/0端口与路由器R2的sra 62 网络协议——分析、设计与仿真 图3.19 PPP协议分析网络拓扑 图3.20 WICs插槽配置示例 (2)路由器基础配置 在GNS3中启动所有设备,路由器R1作为DCE设备,路由器R2作为DTE设备,分 别对路由器R1和R2的serial0/0端口配置IP地址,停用路由器R1和R2的serial0/0 端口。路由器R1配置如下所示。 1: R1>enable 2: R1#configure terminal 3: R1(config)#interface serial 0/0 4: R1(config-if)#ip address 192.168.1.1 255.255.255.0 5: R1(config-if)#clock rate 128000 6: R1(config-if)#encapsulation ppp 7: R1(config-if)#shutdown 第1行输入enable命令,进入全局模式。 第2行输入configureterminal命令,进入特权模式。 第3行输入interfaceserial0/0命令,进入接口配置模式对serial0/0进行配置。 第4行输入ipaddress192.168.1.1255.255.255.0命令,对serial0/0配置ip地址为 第3 章 数据链路层协议 63 192.168.1.1,子网掩码为255.255.255.0。 第5行输入clockrate128000命令,serial0/0作为DCE设备,向DTE端提供时钟, 时钟速率为128000。 第6行输入encapsulationppp命令,serial0/0封装ppp协议。 第7行输入shutdown命令,停用serial0/0端口。 路由器R2配置如下所示。 1: R2>enable 2: R2#configure terminal 3: R2(config)#interface serial 0/0 4: R2(config-if)#ip address 192.168.1.2 255.255.255.0 5: R2(config-if)#encapsulation ppp 6: R2(config-if)#shutdown 第4行输入ipaddress192.168.1.2255.255.255.0命令,对serial0/0配置ip地址为 192.168.1.2,子网掩码为255.255.255.0。 成功进行上述配置后,因路由器R1和R2的serial0/0均处于停用状态,路由器R1 和R2之间的ppp链路并未建立。 3.链路建立和网络层协商 (1)数据捕获 ① 启动Wireshark进行捕获 在GNS3中PPP链路的上右击,弹出如图3.21所示菜单。 图3.21 捕获PPP链路示例 单击“Startcapture”菜单项,弹出捕获端口选择窗口,如图3.22所示,选择路由器R1 的serial0/0按照PPP协议进行捕获;在包捕获窗口中选择OK按钮,启动Wireshark并 开始捕获,如图3.23所示。 图3.22 捕获端口选择示例 ② 启用路由器R1和R2端口 路由器R1和R2上启用serial0/0端口,路由器R1具体配置如下(路由器R2配置 同路由器R1): 64 网络协议——分析、设计与仿真 图3.23 Wireshark捕获窗口 1: R1>enable 2: R1#configure terminal 3: R1(config)#interface serial 0/0 4: R1(config-if)#no shutdown 路由器R1配置说明如下: 第4行的noshutdown命令,用于启用serial0/0端口。 (2)数据格式分析 成功启用路由器R1和R2的serial0/0端口后,路由器R1和R2通过链路建立和配 置流程建立PPP链路,并通过IPCP协商双方IP地址,借助Wireshark可以协助分析其 过程。图3.24是链路建立和IPCP协商示例。 图3.24中,第1~4包是通信双方使用LCP协议的链路建立和配置过程;第5、7、10 和11包是通信双方使用IPCP协商IP地址的过程;第6、8、9和12包是通信双方使用 CDPCP(CiscoDiscoveryProtocolControlProtocol,思科发现协议控制协议)协商CDP (CiscoDiscoveryProtocol,思科发现协议)参数的过程;第13、14和19包是双方路由器采 用CDP协议交换相邻路由器信息的过程;第15~18包是通信双方使用LCP协议进行链 路质量和性能测试的过程。因CDPCP和CDP协议是Cisco的私有协议,本节不讨论 CDPCP和CDP相关内容。 通过分析第1~4包,可勾勒出LCP协议的链路建立和配置的基本流程。PPP链路 的建立是双向的,示例中第1包和第3包组成DCE请求DTE建立连接过程;第2包和第 4包组成DTE请求DCE建立连接过程,因其过程类似,仅分析第1包和第3包。第1~4 包原始内容如表3.5所示。 第 3 章 数据链路层协议 65 包序号 图3.链路建立和IPCP协商示例 24 表3.链路建立和配置流程报文原始内容示例 5 对应参数 0000 f03c021010b000a0506010e227b 0000 f03c0210101000a050602117852 . ! . . ! . "{ xR 0000 f03c021020b000a0506010e227b 0000 f03c0210201000a050602117852 . ! . . ! . "{ xR 第1包的第1字节的值为0xFF,为Addres 字段,应为PPP协议,是点到点的协议, 接收方必定只有一个,故此字段固定值为0xFF,表示所有站点,只有联网的对方才能收到 数据;第2字节的值为0x03,为Control字段,该字段固定值为0x03,表示无序号信息;第 3、4字节的值为0xC021,为Protocol字段,表示LCP协议。后续的Information信息应 该按照LCP协议进行解析;第5字节的值为0x01,为LCP报文的Code字段,0x01表示 Configure-Request报文;第6字节的值为0x0B,为LCP报文的Identifier字段,0x0B用 于标识报文,作为识别之用,当接收方响应Configure-Request报文时,其响应报文也必须 填入相同值,主要是使LCP的请求报文和响应报文能够匹配;第7、8字节的值为 0x000A,为LCP报文的Length字段,0x000A表示LCP报文长度为10字节,减去Code、 Identifier和Length字段4字节,表示其后的Data字段只有6字节;第9~14字节的值为 0x0506010E227B,为LCP报文的Data字段,此处表示Configure-Request报文的选 项,0x05表示类型为幻数(MagicNumber),0x06表示选项长度为6,0x010E227B为4 字节的幻数(MagicNumber)值。 66 网络协议——分析、设计与仿真 第3包的第5字节的值为0x02,为LCP报文的Code字段,0x02表示Configure-Ack 报文;第6字节的值为0x0B,为LCP报文的Identifier字段,0x0B表示对Identifier字段 为0x0B的Configure-Request报文进行确认;第7、8字节的值为0x000A,为LCP报文的 Length字段,0x000A表示LCP报文长度为10字节,减去Code、Identifier和Length字 段4字节,其后的Data字段只有6字节;第9~14字节的值为0x0506010E227B,为 LCP报文的Data字段,此处表示Configure-Ack报文的选项,0x05表示类型为幻数 (MagicNumber),0x06表示选项长度为6,0x010E227B为4字节的幻数(Magic Number)值。 因通信双方未配置认证协议,双方直接进入“网络层协议阶段”,使用IPCP协商IP 地址,通过对第5、7、10和11包的分析,有助于了解PPP链路通过IPCP协商相关通信参 数的过程(参见本章“3.1PPP协议概述”的NCP部分),其协商过程也是双向的,示例中 2. 第5包和第10包组成一个IPCP协商过程;第7包和第11包也组成一个IPCP协商过 程,其过程类似,均为IP地址的协商,本例仅分析第5包和第10包。第5、7、10和11包 原始内容如表3. 6所示。 表3. 6 IPCP协商报文原始内容示例 包序号 5 7 10 11 对应参数 0000 f0380210101000a0306c0a80101 . ! . 0000 f0380210101000a0306c0a80102 . ! . 0000 f0380210201000a0306c0a80101 . ! . 0000 f0380210201000a0306c0a80102 . ! . 第5包的第3、4字节的值为0x8021,为Protocol字段,表示IPCP协议。后续的 Information信息应该按照IPCP报文进行解析;第5字节的值为0x01,为IPCP报文的 Code字段,0x01表示Configure-Request;第6字节的值为0x01,为IPCP报文的 Identifier字段,0x01用于标识报文,作为识别之用,当接收方响应Configure-Request报 文时,其响应报文也必须填入相同值;第7、8字节的值为0x000A,为IPCP报文的Length 字段,0x000A表示IPCP报文长度为10字节,减去Code、Identifier和Length字段4字 节,表示其后的Data字段只有6字节;第9~14字节的值为0x0306C0A80101,为 IPCP报文的Data字段,此处表示Configure-Request报文的选项。0x03表示类型为IP地址 (rs),x0C0A80101为4字节IP地址值(168.1)。 IPAdde006表示选项长度为6,x192.1. 第10包的第5字节的值为0x02,为IPCP报文的Code字段,0x02表示Configure- Ack;第6字节的值为0x01,为IPCP报文的Identifier字段,表示对Identifier字段为 0x01的Configure-Request报文进行确认;第7、8字节的值为0x000A,为IPCP报文的 Length字段,0x000A表示IPCP报文长度为10字节,减去Code、Identifier和Length字 段4字节,表示其后的Data字段只有6字节;第9~14字节的值为0x0306C0A80101, 为IPCP报文的Data字段,此处表示Configure-Ack报文的选项。0x03表示类型为IP地 IPAddr00x192.1. 址(es),x06表示选项长度为6,C0A80101为4字节IP地址值(168.1)。