EIGRP は Hello パケットを定期的に送ってネイバーの生存を確認します。既定では Hello の送信間隔が5秒、ホールドタイムが15秒です。どちらもインタフェースごとに変えられますが、ホールドタイムは「自分が待つ時間」ではなく「相手に待ってもらう時間」として働くので、設定する側に注意が必要です。この記事では、R2 で2つの値を変え、パケットキャプチャとネイバーの状態で動きを確かめます。
- Hello の送信間隔を変える方法と、キャプチャでの見え方
- ホールドタイムを変える方法と、Hello で相手に伝わる仕組み
- 通信を遮断したとき、どちらのルータがいつネイバーをダウンにするか
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 間隔を長くした場合は、ホールドタイムも合わせて変えます。Cisco はホールドタイムを Hello 間隔の3倍以上にすることを推奨しています。
検証構成
R2 と R3 が 192.168.23.0/24 でつながり、EIGRP AS 100 でネイバーになっています。基本設定は EIGRP の基本設定とネイバー・ルーティングテーブルの確認 を参照してください。
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 のマルチキャストアドレスです。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| Time | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 11.251873 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 12.140260 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 13.067754 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 14.046388 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 15.017630 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 15.877014 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 16.832222 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 17.761277 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 18.742839 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 19.608085 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 20.504126 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 21.458886 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 22.378890 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
| 23.240488 | 192.168.23.2 | 224.0.0.10 | EIGRP | Hello |
Hello 間隔は送る側だけの設定なので、R3 からの Hello は既定の約5秒ごとのままです。
| Time | Source | Destination | Protocol | Info |
|---|---|---|---|---|
| 3.829635 | 192.168.23.3 | 224.0.0.10 | EIGRP | Hello |
| 8.475883 | 192.168.23.3 | 224.0.0.10 | EIGRP | Hello |
| 13.031304 | 192.168.23.3 | 224.0.0.10 | EIGRP | Hello |
| 17.688491 | 192.168.23.3 | 224.0.0.10 | EIGRP | Hello |
| 22.509442 | 192.168.23.3 | 224.0.0.10 | EIGRP | Hello |
| 26.798774 | 192.168.23.3 | 224.0.0.10 | EIGRP | 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秒待つようになります。
▸ 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
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Opcode: Hello (5) | Hello パケットであること |
| 2 | Autonomous System: 100 | EIGRP の AS 番号 |
| 3 | Hold Time: 60 | R2 が設定したホールドタイム。受け取った R3 は、この値を R2 を待つ時間として使う |
R2 と R3 がやり取りしている 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 が R2 の障害に気づくのが遅くなります。逆に、障害の検知を速くしたいときは、検知させたい側(今回なら R3)ではなく、相手(R2)のホールドタイムを短くします。
まとめ
| 項目 | 内容 |
|---|---|
| Hello 間隔 | 自分が Hello を送る間隔。ip hello-interval eigrp で設定し、自分の送信にだけ効く |
| ホールドタイム | ip hold-time eigrp で設定し、Hello で相手に伝える。相手が自分を待つ時間になる |
| 値の一致 | ネイバー同士でそろっていなくてもネイバーは張れる |
| 変更するとき | Hello 間隔を変えてもホールドタイムは変わらない。ホールドタイムは Hello 間隔の3倍以上にする |
コメント