【EIGRP】Hello送信時間とホールドタイム

EIGRP は Hello パケットを定期的に送ってネイバーの生存を確認します。既定では Hello の送信間隔が5秒、ホールドタイムが15秒です。どちらもインタフェースごとに変えられますが、ホールドタイムは「自分が待つ時間」ではなく「相手に待ってもらう時間」として働くので、設定する側に注意が必要です。この記事では、R2 で2つの値を変え、パケットキャプチャとネイバーの状態で動きを確かめます。

この記事でわかること
  1. Hello の送信間隔を変える方法と、キャプチャでの見え方
  2. ホールドタイムを変える方法と、Hello で相手に伝わる仕組み
  3. 通信を遮断したとき、どちらのルータがいつネイバーをダウンにするか

Hello 間隔とホールドタイム

Hello 間隔は、Hello パケットを送る間隔です。ホールドタイムは、ネイバーから Hello が届かなくなってから、そのネイバーをダウンと判断するまでの時間です。

項目既定値コマンド(インタフェース)
Hello 間隔5秒(低速の NBMA 回線では60秒)ip hello-interval eigrp <AS> <秒>
ホールドタイム15秒(低速の NBMA 回線では180秒)ip hold-time eigrp <AS> <秒>

ホールドタイムは Hello パケットに載せて相手に伝えます。受け取った側は、その値をそのネイバーを待つ時間として使います。そのため、R2 で設定したホールドタイムは、R3 が R2 を待つ時間になります。また、EIGRP では Hello 間隔やホールドタイムがネイバー同士でそろっていなくても、ネイバーは張れます。

Hello 間隔だけを変えるとき

Hello 間隔を変えても、ホールドタイムは自動では変わりません。Hello 間隔を長くした場合は、ホールドタイムも合わせて変えます。Cisco はホールドタイムを Hello 間隔の3倍以上にすることを推奨しています。

検証構成

R2 と R3 が 192.168.23.0/24 でつながり、EIGRP AS 100 でネイバーになっています。基本設定は EIGRP の基本設定とネイバー・ルーティングテーブルの確認 を参照してください。

EIGRP AS 100 Lo02.2.2.2/32Lo03.3.3.3/32 R2R3 .2.3 192.168.23.0/24 Fa0/0.23 Fa0/0.23
図1 検証構成

Hello 間隔を変える

R2 の R3 側インタフェースで、Hello 間隔を既定の5秒から1秒にします。指定できる範囲は1〜65535秒です。

R2

R2(config)# interface fastEthernet 0/0.23
R2(config-subif)#ip hello-interval eigrp 100 ?
  <1-65535>  Seconds between hello transmissions
R2(config-subif)#ip hello-interval eigrp 100 1

R2 と R3 の間でパケットをキャプチャすると、R2(192.168.23.2)からの Hello がほぼ1秒ごとに送られています。宛先の 224.0.0.10 は EIGRP のマルチキャストアドレスです。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

パケットキャプチャ(Wireshark):R2 の Hello画面イメージ
TimeSourceDestinationProtocolInfo
11.251873192.168.23.2224.0.0.10EIGRPHello
12.140260192.168.23.2224.0.0.10EIGRPHello
13.067754192.168.23.2224.0.0.10EIGRPHello
14.046388192.168.23.2224.0.0.10EIGRPHello
15.017630192.168.23.2224.0.0.10EIGRPHello
15.877014192.168.23.2224.0.0.10EIGRPHello
16.832222192.168.23.2224.0.0.10EIGRPHello
17.761277192.168.23.2224.0.0.10EIGRPHello
18.742839192.168.23.2224.0.0.10EIGRPHello
19.608085192.168.23.2224.0.0.10EIGRPHello
20.504126192.168.23.2224.0.0.10EIGRPHello
21.458886192.168.23.2224.0.0.10EIGRPHello
22.378890192.168.23.2224.0.0.10EIGRPHello
23.240488192.168.23.2224.0.0.10EIGRPHello
図2 R2 からの Hello(実際の画面ではなく、表示内容のポイントを示したイメージです)

Hello 間隔は送る側だけの設定なので、R3 からの Hello は既定の約5秒ごとのままです。

パケットキャプチャ(Wireshark):R3 の Hello画面イメージ
TimeSourceDestinationProtocolInfo
3.829635192.168.23.3224.0.0.10EIGRPHello
8.475883192.168.23.3224.0.0.10EIGRPHello
13.031304192.168.23.3224.0.0.10EIGRPHello
17.688491192.168.23.3224.0.0.10EIGRPHello
22.509442192.168.23.3224.0.0.10EIGRPHello
26.798774192.168.23.3224.0.0.10EIGRPHello
図3 R3 からの Hello(実際の画面ではなく、表示内容のポイントを示したイメージです)

ホールドタイムを変える

続けて R2 で、ホールドタイムを既定の15秒から60秒にします。こちらも範囲は1〜65535秒です。

R2

R2(config)# interface fastEthernet 0/0.23 
R2(config-subif)# ip hold-time eigrp 100 ?
  <1-65535>  Seconds before neighbor is considered down
R2(config-subif)# ip hold-time eigrp 100 60

show ip eigrp neighbors:R3 から見た R2 のホールドタイム

R3 でネイバーの状態を見ると、R2(192.168.23.2)の Hold が 58 になっています。R2 で設定した60秒が、R3 側で使われていることがわかります。

R3

R3# show ip eigrp neighbors
EIGRP-IPv4 Neighbors for AS(100)
H   Address                 Interface              Hold Uptime   SRTT   RTO  Q  Seq
                                                   (sec)         (ms)       Cnt Num
0   192.168.23.2            Fa0/0.23                 58 00:08:47   34   204  0  15
表示意味
Hネイバーを学習した順番(0 から)
Address/Interfaceネイバーのアドレスと、そのネイバーが見えている自分のインタフェース
Hold (sec)ホールドタイムの残り秒数。ネイバーから受け取った値(今回は60)から減っていき、Hello を受け取るたびに戻る。0 になるとネイバーをダウンにする
Uptimeネイバーになってからの時間
SRTT/RTO信頼性のあるパケットの往復時間の平均と、再送までの待ち時間
Q Cnt/Seq Num送信待ちのパケット数と、ネイバーから最後に受け取ったシーケンス番号

Uptime が 00:08:47 で、値を変えた後もネイバーは切れていません。R2 と R3 で Hello 間隔とホールドタイムが違う状態でも、ネイバーは維持されています。

Hello パケットに載るホールドタイム

R2 が送る Hello の中身を見ると、Parameters の中に Hold Time: 60 が入っています。R3 はこの値を受け取り、R2 を60秒待つようになります。

パケットキャプチャ(Wireshark):R2 の Hello の詳細画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.23.2, Dst: 224.0.0.10▾ Cisco EIGRP    Version: 21    Opcode: Hello (5)    Checksum: 0xef41 [correct]    [Checksum Status: Good]  ▸ Flags: 0x00000000    Sequence: 0    Acknowledge: 0    Virtual Router ID: 0 (Address-Family)2    Autonomous System: 100  ▾ Parameters      Type: Parameters (0x0001)      Length: 12      K1: 1      K2: 0      K3: 1      K4: 0      K5: 0      K6: 03      Hold Time: 60  ▸ Software Version: EIGRP=10.0, TLV=2.0
図4 R2 が送る Hello の中身(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Opcode: Hello (5)Hello パケットであること
2Autonomous System: 100EIGRP の AS 番号
3Hold Time: 60R2 が設定したホールドタイム。受け取った R3 は、この値を R2 を待つ時間として使う

R2 と R3 がやり取りしている Hello をまとめると、次のようになります。

R2R3 Hello(Hold Time: 60) 1 秒ごと(ip hello-interval eigrp 100 1) Hello(Hold Time: 15) 5 秒ごと(既定値のまま) R2 が R3 を待つ時間:15 秒 R3 が R2 を待つ時間:60 秒
図5 Hello で伝わるホールドタイムと、それぞれが相手を待つ時間

通信を遮断して確かめる

R2 と R3 の間の通信を遮断し、それぞれがネイバーをダウンにするまでの時間を比べます。

遮断から約15秒後、R2 に R3 のホールドタイムが切れたログが出ます。R3 からの Hello は既定値の15秒を伝えているので、R2 は R3 を15秒しか待ちません。

R2

R2#
*Sep 22 08:24:19.643: %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 192.168.23.3 
(FastEthernet0/0.23) is down: holding time expired

この時点では、R3 はまだ R2 を待っています。遮断から約60秒後、R3 にも R2 のホールドタイムが切れたログが出ます。2つのログの時刻の差は約44秒で、60秒と15秒の差(45秒)とほぼ一致します。

R3

R3#
*Sep 22 08:25:03.463: %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 192.168.23.2 
(FastEthernet0/0.23) is down: holding time expired
R2–R3 間の通信を遮断したあとの動き 015304560 秒 遮断 R2:R3 をダウン R3 の Hold Time 15 秒 R3:R2 をダウン R2 の Hold Time 60 秒
図6 遮断してからネイバーがダウンするまで

このように、R2 でホールドタイムを延ばすと、R3 が R2 の障害に気づくのが遅くなります。逆に、障害の検知を速くしたいときは、検知させたい側(今回なら R3)ではなく、相手(R2)のホールドタイムを短くします。

まとめ

項目内容
Hello 間隔自分が Hello を送る間隔。ip hello-interval eigrp で設定し、自分の送信にだけ効く
ホールドタイムip hold-time eigrp で設定し、Hello で相手に伝える。相手が自分を待つ時間になる
値の一致ネイバー同士でそろっていなくてもネイバーは張れる
変更するときHello 間隔を変えてもホールドタイムは変わらない。ホールドタイムは Hello 間隔の3倍以上にする

コメント