High-Level Data Link Control (HDLC、高级数据链路控制)

高级数据链路控制 是一个在同步网上传输数据、面向比特的数据链路层协议,其最大特点是对任何一种比特流,均可以实现透明的传输

  • HDLC 协议只支持点到点链路
  • HDLC 协议不支持 IP 地址协商,不支持认证。协议内部通过 Keepalive 报文来检测链路状态
  • HDLC 协议只能封装在同步链路上,如果是同异步串口的话,只有当同异步串口工作在同步模式下才可以应用 HDLC 协议

串行链路数据传输方式

串行链路:在广域网环境下,连接外部设备的一个串口总线标准,数据帧被逐位按顺序传送的线路,适用于远距离通信,但传送速度较慢

  • 异步传输
    异步传输
  • 同步传输
    同步传输

HDLC 帧结构

HDLC

  • Flag 标志(1 byte): 01111110 ,用以标志帧的开始与结束,也可以作为帧与帧之间的填充字符
  • Address 地址(1 byte): 内容取决于所采用的操作方式,有主节点、从节点、结合节点之分
  • Control 控制(1 byte): 用于构成各种命令及响应,以便对链路进行监视与控制。发送方主节点或组合节点利用控制字段来通知被寻址的从节点或组合节点执行约定的操作;相反,从节点用该字段作为对命令的响应,报告已经完成的操作或状态的变化
    • I : Information 信息帧
    • S : Supervisory 监控帧
    • U : Unnumbered 无编号帧
  • Protocol 协议(2 bytes): 表示 Information 字段中的数据封装协议类型
  • Information 信息 : 可以是任意二进制比特串,长度未作限定。其上限由 FCS 字段或通信节点的缓冲容量来决定,而下限可以是 0 ,即无信息字段
  • FCS 帧校验(2 bytes): 使用 16 位 CRC 对两个标志字段之间的整个帧内容进行校验

HDLC_Control

Control 各字段含义如下:

  • N(S): Send Sequence Number
  • N(R): Receive Sequence Number
  • P/F: Poll Bit command frame/Final Bit response frame
  • S: Supervisory Function
  • M: Modifier Function

Point to Point Protocol (PPP、点到点协议)

点到点协议 工作在数据链路层,通常用在两节点间创建直接的连接,并可以提供连接认证、传输加密和压缩

PPP 主要由四类协议族组成:

  1. HDLC: High-Level Data Link Control (高级数据链路控制),封装方法
  2. LCP: Link Control Protocol (链路控制协议),主要用来建立、拆除和监控数据链路
  3. NCP: Network Control Protocol (网络控制协议),主要用来协商在该数据链路上所传输的数据包的格式与类型
  4. CHAP 和 PAP: 用于验证对端设备的合法性

PPP 链路建立过程

PPP建立

  1. Dead: 物理层不可用阶段,当通信双方的两端检测到物理线路激活时,就会从 Dead 阶段跃迁至 Establish 阶段;反之,当一端链路断开时会回到 Dead 阶段
  2. Establish: 链路建立阶段,在该阶段会进行 LCP 协商,协商内容主要为一下几点:
    • SP/MP (工作方式): 协商使用单链路工作还是多链路工作,两端不一致则使用 SP
    • MRU (接口最大接收单元): 两端不一致,则向小的协商
    • 魔术字: 魔术字用于 PPP 链路上检查物理链路环路
    • 认证方式: PAP / CHAP
  3. Authenticate: 验证阶段,(可选阶段) 进行 PAP 或 CHAP 验证。验证通过后进入 Network 阶段(NCP),如果验证失败则进入 Terminate 阶段,拆除链路,状态转为 Down;
  4. Network: 网络层协商阶段,NCP 协商支持 IPCP 协商,IPCP 协商主要包括双方的 IP 地址。通过 NCP 协商来选择和配置一个网络层协议。只有相应的网络层协议协商成功后,该网络层协议才可以通过这条 PPP 链路发送报文
  5. Terminate: 终止阶段,PPP 链路将一直保持通信,直至有明确的 LCP 或 NCP 帧关闭这条链路,或发生了某些外部事件(例如用户的干预)则进入 Terminate 阶段

MP : 为了增加带宽,可以将多个 PPP 链路捆绑使用,称为 MultiLink PPP,简称 MP。MP 会将报文分片(小于最小分片包长时不分片)后,从 MP 链路下的多个 PPP 通道发送到 PPP 对端,对端将这些分片组装起来递给网络层
MTU : Maximum Transmission Unit,最大传输单元
MRU : Maximum Receive Unit,最大接收单元
IPCP : Internet Protocol Control Protocol (网际协议控制协议) 负责完成 IP 网络层协议通信所需配置参数的选项协商,负责建立,使能和中止 IP 模块。IPCP 在运行的过程当中,主要是完成点对点通信设备的两端动态的协商 IP 地址。IPCP 包在 PPP 没有达到网络层协商阶段以前不能进行交换,如果有 IPCP 包在到达此阶段前到达会被抛弃

PPP 帧格式

PPP

  • Flag 标志(1 byte): 01111110 ,用以标志帧的开始与结束,也可以作为帧与帧之间的填充字符
  • Address 地址(1 byte): 11111111 ,PPP 协议被运用在点对点的链路上,它可唯一标识对方,因此无须知道对方数据链路层地址。所以该字节无任何意义,按协议规定填充为全 1 广播地址
  • Control 控制(1 byte): 00000011 ,同 Address 一样,PPP 数据帧的 Control 字段也没实际意义,规定值为 0x03
  • Protocol 协议(2 bytes): 可用来区分 PPP 数据帧中 Information 字段所承载的数据报文的内容
  • Information 信息(0~1500 bytes) : 最大长度是 1500 字节,其中包括填充的内容。Information 字段最大长度等于 PPP 协议中 MRU 的缺省值,可根据实际需要进行最大封装长度选项的协商。若内容长度不足 1500 字节,可以被填充,但不是必须的
  • FCS 帧校验(2 bytes): 对 PPP 数据帧传输的正确性进行检测

LCP 报文

LCP

  • Code 代码(8 bits): 标识 LCP 数据报文的类型。在链路建立阶段,接收方接收到 LCP 数据报文。当其的值无效时,就会向对端发送一个 LCP 的代码拒绝报文 (Code-Reject 报文)
  • Identifier 识别符(8 bits): 用来匹配请求和响应,当该字段值为非法时,该报文将被丢弃
  • Length 总长度(16 bits): Code 字段、Identifier 字段、Length 字段和 Data 字段四个域长度的总和
  • Data 数据: Data 字段所包含的是协商报文的内容
    • Type 类型(8 bits): 协商选项类型
    • Length 长度(8 bits): 协商选项长度,指 Data 字段总长度:包含Type、Length 和 Data
    • Data 数据(8 bits): 协商选项的详细信息
常见 LCP 类型
Code 报文类型 描述
0x01 Configure-Request 匹配请求
0x02 Configure-Ack 匹配确认
0x03 Configure-Nak 匹配否认
0x04 Configure-Reject 匹配拒绝
0x05 Terminate-Request 终止请求
0x06 Terminate-Ack 终止确认
0x07 Code-Reject 代码拒绝
0x08 Protocol-Reject 协议拒绝
0x09 Echo-Request 回声请求
0x0a Echo-Reply 回声应答
0x0b Discard-Request 丢弃请求
0x0c Reserved 保留

认证模式

PAP

Password Authentication Protocol (密码认证协议),是 PPP 协议集中的一种链路控制协议,主要是通过使用 2 次握手提供一种对等结点的建立认证的简单方法,这是建立在初始链路确定的基础上的

PAP

  1. 被认证方把本地用户名和口令以明文的形式发送到认证方
  2. 认证方根据本地用户表查看是否存在被认证方的用户名:不存在,则认证失败;存在,则查看口令是否正确:口令正确,则认证通过;若口令不正确,则认证失败

CHAP

Challenge Handshake Authentication Protocol (挑战握手认证协议),是 PPP 协议集中的一种链路控制协议,在网络物理连接后进行连接安全性验证的协议。通过三次握手周期性的校验对端的身份,在初始链路建立时完成,可以在链路建立之后的任何时候重复进行,它比 PAP 更加可靠

CHAP

  1. 认证方向被认证方发送 “Challenge” 和用户信息
  2. 被认证方收到 “Challenge” 后使用之前双方协商的算法生成应答后回送
  3. 认证方收到应答后,自身也会使用相同的算法生成结果并进行比较,匹配则认证成功,反之认证失败

Point-to-Point Protocol over Ethernet (PPPoE、以太网上的点对点协议)

PPPoE 是将点对点协议封装在以太网框架中的一种网络隧道协议。PPPoE 可以通过一个远端接入设备为以太网上的主机提供因特网接入服务,并对接入的每个主机实现控制、计费功能

PPPoE 报文

PPPoE

  • Ver 版本号(4 bits): 0x01
  • Type 类型(4 bits): 0x01
  • Code 代码(8 bits): 用于区分报文类型
  • Session_ID 会话ID(16 bits)
  • Length 长度(16 bits): 不包含以太网头部和 PPPoE 头部的总长度
  • PPP Packet
常见 PPPoE 类型
Code 报文类型
0x00 会话数据
0x09 PADI
0x07 PADO 或 PADT
0x19 PADR
0x65 PADS

PPPoE 工作原理

PPPoE 协议的工作流程包含发现和会话两个阶段,发现阶段是无状态的,目的是获得 PPPoE 终端(在局端的ADSL设备上)的以太网 MAC 地址,并建立一个惟一的Session_ID。发现阶段结束后,就进入标准的 PPP 会话阶段

PPPoE建立

Discovery (发现阶段)

当一个主机想开始 PPPoE 进程的时候,它必须先识别接入端的以太网 MAC 地址,建立 PPPoE 的 SESSION ID。这就是 Discovery 阶段的目的

PPPoE发现

PPPoE Active Discovery Initiation (PADI)

PPPoE Active Discovery Offer (PADO)

PPPoE Active Discovery Request (PADR)

PPPoE Active Discovery Session-confirmation (PADS)

PPP Session (PPP 会话阶段)

PPPoE会话

启用 PPP 协议
interface s1/0/0
link-protocol ppp    
PAP 认证
认证方
aaa
local-user NAME password cipher PW
local-user NAME server-type ppp
interface s1/0/0
link-protocol ppp    
ppp authentication-mode pap

被认证方
interface s1/0/0
link-protocol ppp    
ppp pap local-user NAME password cipher PW
CHAP 认证
认证方
aaa
local-user NAME password cipher PW
local-user NAME server-type ppp
interface s1/0/0
link-protocol ppp    
ppp authentication-mode chap 

被认证方
interface s1/0/0
link-protocol ppp    
ppp chap user NAME
ppp chap password cipher PW
验证配置
<>debugging ppp pap all
<>debugging ppp chap all
PPPoE 客户端配置
dialer-rule
dialer-rule 1 ip permit     # 允许 IP 协议访问
interface dialer 1
dialer user NAME    # 必须与服务端 PPP 用户名相同
dialer-group 1      # 指定拨号器组
dialer bundle 1     # 指定拨号器捆绑号码

ppp chap user NAME@DOMAIN       // 通过 CHAP 认证
ppp chap password PW
------------------------------------
ppp pap local-user NAME password cipher PW     // 通过 PAP 认证

ip address ppp-negotiate    # 申请地址协商
interface g0/0/1
pppoe-client dial-bundle-number 1 on-demand   # 绑定拨号器,on-demand 按需拨号
q
ip router-static 0.0.0.0 0 dialer 1
PPPoE 服务端简易配置(用于实验)
...(创建地址池)
...(创建 PPP 用户,并指定认证方式)
interface Virtual-Template 1      # 创建虚拟模板
ip address 10.0.0.1 24
ppp authentication-mode chap/pap      # 指定认证方式
remote address IPPoolName     # 调用地址池
interface g0/0/0
pppoe-server bind Virtual-Template 1      # 绑定虚拟模板
查看拨号接口信息
display interface dialer 1
查看客户端会话信息
display pppoe-client session summary

相关指令

接口视图

启用 HDLC 协议

link-protocol hdlc

接口地址借用

# ip address unnumbered interface 接口号
ip address unnumbered interface loopback 0