本文档介绍Cisco IOS®上的各种keepalive机制。
保持连接消息由一个网络设备通过物理或虚电路发送,以便通知另一个网络设备它们之间的电路仍然正常工作。要让keepalive正常工作,有两个重要因素:
在广播媒体(如以太网)上,keepalive稍微独特。以太网上可能存在许多邻居,因此,Keepalive 不会确定指向线路上任何特定邻居的路径是否可用。它仅检查本地系统是否拥有对以太网线路的读取和写入访问权限。路由器生成一个以太网数据包,其自身作为源和目的MAC地址,并使用特殊的以太网类型代码0x9000。以太网硬件将此数据包发送到以太网线路,然后立即再次接收此数据包。这样可以检查以太网适配器的发送和接收硬件以及线路的基本完整性。

串行接口可采用不同类型的封装,每种封装类型决定了要使用的keepalive类型。
在接口配置模式下输入keepalive命令,以设置路由器向其对等设备发送ECHOREQ数据包的频率:
另一种众所周知的keepalive机制是HDLC的串行keepalive。串行 Keepalive 在两个路由器之间来回发送,Keepalive 得到确认。通过使用序列号跟踪每个keepalive数据包,每台设备都可以确认HDLC对等设备是否收到发送的keepalive数据包。对于HDLC封装,三个忽略的keepalive会导致接口关闭。
为HDLC连接启用debug serial interface命令,以便允许用户查看生成和发送的keepalive:
Sample Output:
17:21:09.685: Serial0/0: HDLC myseq 0, mineseen 0*, yourseen 1, line up
HDLC keepalive包含三部分,用于确定其工作原理:
由于HDLC keepalive是ECHOREQ类型的keepalive,因此keepalive频率非常重要,建议两端完全匹配。 如果计时器不同步,序列号将开始顺序混乱。例如,如果将一端设置为10秒,另一端设置为25秒,只要频率差异不足以导致序列号因三的差值而关闭,接口仍将保持活动状态。
为了说明HDLC keepalive的工作原理,路由器1和路由器2分别通过Serial0/0和Serial2/0直接连接。为了说明如何使用失败的HDCL keepalive来跟踪接口状态,路由器1上的Serial 0/0将关闭。

路由器 1
Router1#show interfaces serial 0/0/0
Serial0/0/0 is up, line protocol is up (connected)
Hardware is HD64570
Internet address is 10.0.0.1/8
MTU 1500 bytes, BW 64 Kbit, DLY 20000 usec, rely 255/255, load 1/255
Encapsulation HDLC, loopback not set, keepalive set (10 sec)
[output is omited]
17:21:09.685: Serial0/0: HDLC myseq 0, mineseen 0*, yourseen 1, line up
17:21:19.725: Serial0/0: HDLC myseq 1, mineseen 1*, yourseen 2, line up
17:21:29.753: Serial0/0: HDLC myseq 2, mineseen 2*, yourseen 3, line up
17:21:39.773: Serial0/0: HDLC myseq 3, mineseen 3*, yourseen 4, line up
17:21:49.805: Serial0/0: HDLC myseq 4, mineseen 4*, yourseen 5, line up
17:21:59.837: Serial0/0: HDLC myseq 5, mineseen 5*, yourseen 6, line up
17:22:09.865: Serial0/0: HDLC myseq 6, mineseen 6*, yourseen 7, line up
17:22:19.905: Serial0/0: HDLC myseq 7, mineseen 7*, yourseen 8, line up
17:22:29.945: Serial0/0: HDLC myseq 8, mineseen 8*, yourseen 9, line up
Router1 (config-if)#shut
17:22:39.965: Serial0/0: HDLC myseq 9, mineseen 9*, yourseen 10, line up
17:22:42.225: %LINK-5-CHANGED: Interface Serial0/0, changed state
to administratively down
17:22:43.245: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0,
changed state to down
路由器 2
Router2#show interfaces serial 0/0/0
Serial0/0/0 is up, line protocol is up (connected)
Hardware is HD64570
Internet address is 10.0.0.2/8
MTU 1500 bytes, BW 64 Kbit, DLY 20000 usec, rely 255/255, load 1/255
Encapsulation HDLC, loopback not set, keepalive set (10 sec)
[output is omited]
17:21:04.929: Serial2/0: HDLC myseq 0, mineseen 0, yourseen 0, line up
17:21:14.941: Serial2/0: HDLC myseq 1, mineseen 1*, yourseen 1, line up
17:21:24.961: Serial2/0: HDLC myseq 2, mineseen 2*, yourseen 2, line up
17:21:34.981: Serial2/0: HDLC myseq 3, mineseen 3*, yourseen 3, line up
17:21:45.001: Serial2/0: HDLC myseq 4, mineseen 4*, yourseen 4, line up
17:21:55.021: Serial2/0: HDLC myseq 5, mineseen 5*, yourseen 5, line up
17:22:05.041: Serial2/0: HDLC myseq 6, mineseen 6*, yourseen 6, line up
17:22:15.061: Serial2/0: HDLC myseq 7, mineseen 7*, yourseen 7, line up
17:22:25.081: Serial2/0: HDLC myseq 8, mineseen 8*, yourseen 8, line up
17:22:35.101: Serial2/0: HDLC myseq 9, mineseen 9*, yourseen 9, line up
17:22:45.113: Serial2/0: HDLC myseq 10, mineseen 10*, yourseen 10, line up
17:22:55.133: Serial2/0: HDLC myseq 11, mineseen 10, yourseen 10, line up
17:23:05.153: HD(0): Reset from 0x203758
17:23:05.153: HD(0): Asserting DTR
17:23:05.153: HD(0): Asserting DTR and RTS
17:23:05.153: Serial2/0: HDLC myseq 12, mineseen 10, yourseen 10, line up
17:23:15.173: HD(0): Reset from 0x203758
17:23:15.173: HD(0): Asserting DTR
17:23:15.173: HD(0): Asserting DTR and RTS
17:23:15.173: Serial2/0: HDLC myseq 13, mineseen 10, yourseen 10, line down
17:23:16.201: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial2/0,
changed state to down
Router2#
17:23:25.193: Serial2/0: HDLC myseq 14, mineseen 10, yourseen 10, line down
PPP keepalive与HDLC keepalive略有不同。与HDLC不同,PPP keepalive更像ping。双方都可以在闲暇时互相ping通。正确的协商操作是始终响应此“ping”。 因此,对于PPP keepalive,频率或计时器值仅在本地相关,对另一端没有影响。即使一端关闭keepalive,它仍会响应来自有保持连接计时器的一端的回应请求。但是,它绝不会发起任何自己的活动。
为PPP连接启用debug ppp packet命令以允许用户查看发送的PPP keepalive:
17:00:11.412: Se0/0/0 LCP-FS: I ECHOREQ [Open] id 32 len 12 magic 0x4234E325
以及收到的响应:
17:00:11.412: Se0/0/0 LCP-FS: O ECHOREP [Open] id 32 len 12 magic 0x42345A4D
PPP keepalive包含三个部分:
对于PPP封装,五个忽略的keepalive会导致接口关闭
GRE 隧道 Keepalive 机制对于以太网或串行接口稍有不同。它使一端能够与远程路由器之间发起和接收 Keepalive 数据包(即使远程路由器不支持 GRE Keepalive)。GRE 是 IP 内隧道传输 IP 的数据包隧道机制,因此,GRE IP 隧道数据包可以在另一个 GRE IP 隧道数据包里构建。对于 GRE Keepalive,发送方在原始 Keepalive 请求包中预先构建 Keepalive 响应数据包,远程端只需对外部 GRE IP 报头执行标准 GRE 解封,然后转发内部 IP GRE 数据包。通过这种机制,可以将 Keepalive 响应转发出物理接口而不是隧道接口。有关GRE隧道Keepalive工作的详细信息,请参阅GRE Keepalive如何工作。
互联网密钥交换(IKE)保持连接是一种用于确定VPN对等体是否启动并是否可以接收加密流量的机制。除了接口keepalive之外,还需要单独的加密keepalive,因为VPN对等体通常从不背对背连接,因此接口keepalive无法提供有关VPN对等体状态的足够信息。
在Cisco IOS设备上,IKE keepalive通过使用称为失效对等体检测(DPD)的专有方法启用。 要允许网关向对等设备发送DPD,请在全局配置模式下输入以下命令:
crypto isakmp keepalive seconds [retry-seconds] [ periodic | on-demand ]
要禁用keepalive,请使用此命令的“no”形式。有关此命令中每个关键字的作用的详细信息,请参阅crypto isakmp keepalive。为了更精确,还可以在ISAKMP配置文件下配置keepalive。有关详细信息,请参阅ISAKMP配置文件概述[Cisco IOS IPsec]。
如果某个VPN对等体位于网络地址转换(NAT)之后,则使用NAT遍历进行加密。但是,在空闲期间,上游设备上的NAT条目可能会超时。当您启动隧道并且NAT不是双向时,这可能会导致问题。启用NAT keepalive,以便在两个对等体之间的连接期间保持动态NAT映射处于活动状态。NAT keepalive是未加密负载为一个字节的UDP数据包。虽然当前的DPD实施类似于NAT keepalive,但有一点不同 — 如果IPsec实体在指定时间段未发送或接收数据包,DPD用于检测对等体状态,而发送NAT keepalive时使用。有效范围为5至3600秒。
有关此功能的详细信息,请参阅IPsec NAT透明度。