3. grace-LSAパケット
それでは、実際に何が起こっているのか実験で突き止めてみましょう。
グレースフル・リスタートを実行するルータは、
再起動前にgrace-LSAをフラッドして周りのルータに協力を求めます。
R1(Juniper)が送信したこのLSAをCiscoで表示してみましょう。
grace-LSAはリンクローカルのオペークLSA(Type 7 Opaque-LSA)なので、
コマンドはshow ip ospf database opaque-linkです。
グレースフル・リスタートの期間中しか表示されませんので、
タイミング良くコマンドを投入しないといけません。
R6c7206#show ip ospf database opaque-link
OSPF Router with ID (192.168.254.6) (Process ID 100)
Type-9 Opaque Link Local Link States (Area 0)
LS age: 8
Options: (No TOS-capability, No DC)
LS Type: Opaque Link-Local Link
Link State ID: 3.0.0.0
Opaque Type: 3
Opaque ID: 0
Advertising Router: 192.168.254.1
LS Seq Number: 80000001
Checksum: 0x711B
Length: 44
Associate Interface: FastEthernet0/1
Unable to display opaque data
RFC3623によると、grace-LSAのフォーマットは次の通りです。
grace-LSAはOpaque Type=3, Opaque ID=0で固定です。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LS age | Options | 9 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 3 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Advertising Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LS sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LS checksum | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+- TLVs -+
| ... |
Ciscoの表示もだいたいこのフォーマット通りですね。
Opaque LSAなので、Link State IDは存在しません。
Link State IDが3.0.0.0となっていますが、Opaque Type=3, Opaque ID=0の事です。
次にR1-R2間にEtherealを仕込んでパケットをキャプチャしてみましょう。
【Etherealのデータ】
No. Time Source Destination Protocol Info
10 3.529154 192.168.1.1 224.0.0.5 OSPF LS Update
Frame 10 (106 bytes on wire, 106 bytes captured)
Arrival Time: Oct 1, 2004 19:28:32.826318000
Time delta from previous packet: 0.002328000 seconds
Time since reference or first frame: 3.529154000 seconds
Frame Number: 10
Packet Length: 106 bytes
Capture Length: 106 bytes
Ethernet II, Src: 00:90:69:92:34:00, Dst: 01:00:5e:00:00:05
Destination: 01:00:5e:00:00:05 (01:00:5e:00:00:05)
Source: 00:90:69:92:34:00 (JuniperN_92:34:00)
Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.1.1 (192.168.1.1), Dst Addr: 224.0.0.5 (224.0.0.5)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0xc0 (DSCP 0x30: Class Selector 6; ECN: 0x00)
1100 00.. = Differentiated Services Codepoint: Class Selector 6 (0x30)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 92
Identification: 0x247f (9343)
Flags: 0x00
0... = Reserved bit: Not set
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 1
Protocol: OSPF IGP (0x59)
Header checksum: 0xf25b (correct)
Source: 192.168.1.1 (192.168.1.1)
Destination: 224.0.0.5 (224.0.0.5)
Open Shortest Path First
OSPF Header
OSPF Version: 2
Message Type: LS Update (4)
Packet Length: 72
Source OSPF Router: 192.168.254.1 (192.168.254.1)
Area ID: 0.0.0.0 (Backbone)
Packet Checksum: 0xac99 (correct)
Auth Type: Null
Auth Data (none)
LS Update Packet
Number of LSAs: 1
LS Type: Opaque LSA, Link-local scope
LS Age: 1 seconds
Options: 0x2 (E)
Link-State Advertisement Type: Opaque LSA, Link-local scope (9)
Link State ID Opaque Type: grace-LSA (3)
Link State ID Opaque ID: 0
Advertising Router: 192.168.254.1 (192.168.254.1)
LS Sequence Number: 0x80000001
LS Checksum: 8a01
Length: 44
Unknown LSA Type 3
0000 01 00 5e 00 00 05 00 90 69 92 34 00 08 00 45 c0 ..^.....i.4...E.
0010 00 5c 24 7f 00 00 01 59 f2 5b c0 a8 01 01 e0 00 .\$....Y.[......
0020 00 05 02 04 00 48 c0 a8 fe 01 00 00 00 00 ac 99 .....H..........
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 ................
0040 02 09 03 00 00 00 c0 a8 fe 01 80 00 00 01 8a 01 ................
0050 00 2c 00 01 00 04 00 00 00 d2 00 02 00 01 02 00 .,..............
0060 00 00 00 03 00 04 c0 a8 01 01 ..........
LS Updateパケットでフラッドしてます。
RFC3623のフォーマット通りなのですが、EtherealではOpaque LSAの中身までは解析できていません。
仕方ないので、手動で追ってみます。
データ部は次の部分です。
00 01 00 04 00 00 00 d2 00 02 00 01 02 00 00 00 00 03 00 04 c0 a8 01 01
----- ----- ----------- ----- ----- ----------- ----- ----- -----------
Type Len Value Type Len Value(+pad) Type Len Value
GracePeriod=0xd2=210秒 Reason=02=soft reload IP interface address=192.168.1.1
仕様の通り、必要なTLVは全て揃ってます。グレース期間が210秒になっているのは、Juniperのデフォルトでしょうか。イーサネットなので、IP interface addressが必須になっています。
次にパケットの流れを追ってみましょう。
Time Source Destination Protocol Info
3 0.429764 192.168.1.2 224.0.0.5 OSPF Hello Packet
10 3.529154 192.168.1.1 224.0.0.5 OSPF LS Update ☆ grace-LSA
21 4.540671 192.168.1.2 224.0.0.5 OSPF LS Acknowledge ☆ LS ack遅すぎ
35 5.715653 192.168.1.1 224.0.0.5 OSPF LS Update ☆ grace-LSA再送
36 5.716834 192.168.1.2 192.168.1.1 OSPF LS Update ☆ DRの再送
50 6.725669 192.168.1.1 224.0.0.5 OSPF LS Update ☆ grace-LSA再送
51 6.726758 192.168.1.2 192.168.1.1 OSPF LS Update ☆ DRの再送
52 7.725888 192.168.1.1 224.0.0.5 OSPF LS Update ☆ grace-LSA再送
53 7.726746 192.168.1.2 192.168.1.1 OSPF LS Update ☆ DRの再送
54 8.725889 192.168.1.1 224.0.0.5 OSPF LS Update ☆ grace-LSA再送
55 8.726998 192.168.1.2 192.168.1.1 OSPF LS Update ☆ DRの再送
57 9.725977 192.168.1.1 224.0.0.5 OSPF LS Update ☆ grace-LSA再送
58 9.727042 192.168.1.2 192.168.1.1 OSPF LS Update ☆ DRの再送
61 10.310466 192.168.1.2 224.0.0.5 OSPF Hello Packet
62 10.726050 192.168.1.1 224.0.0.5 OSPF LS Update ☆ grace-LSA再送
63 10.726912 192.168.1.2 192.168.1.1 OSPF LS Update ☆ DRの再送
64 11.736033 192.168.1.1 224.0.0.5 OSPF Hello Packet ☆ 再起動後のHello
73 19.211217 192.168.1.2 224.0.0.5 OSPF Hello Packet ☆ 再起動後のHello
74 19.213039 192.168.1.1 192.168.1.2 OSPF DB Descr.
75 19.213207 192.168.1.1 224.0.0.5 OSPF Hello Packet
76 19.214947 192.168.1.2 192.168.1.1 OSPF DB Descr.
77 19.256350 192.168.1.1 192.168.1.2 OSPF DB Descr.
78 19.257948 192.168.1.2 192.168.1.1 OSPF DB Descr.
79 19.258150 192.168.1.2 192.168.1.1 OSPF LS Request
80 19.306368 192.168.1.1 192.168.1.2 OSPF DB Descr.
81 19.306559 192.168.1.1 192.168.1.2 OSPF LS Request
82 19.306810 192.168.1.1 192.168.1.2 OSPF LS Update ☆ Router-LSA, Network-LSAの送信
83 19.308054 192.168.1.2 192.168.1.1 OSPF LS Update ☆ grace-LSAの送信
84 19.377657 192.168.1.1 224.0.0.5 OSPF Hello Packet
85 20.321602 192.168.1.2 224.0.0.5 OSPF LS Acknowledge
86 21.386654 192.168.1.1 224.0.0.5 OSPF LS Update ☆ grace-LSAを再生成
87 22.401730 192.168.1.2 224.0.0.5 OSPF LS Acknowledge
グレースフル・リスタート中、grace-LSAが行ったり来たりしてます。
何しろリスタート中なので、これは仕方ないのかもしれません。
flagをerrorにセットして、Juniperでデバッグしてみると、次のようにエラーをクレームします。
納得です。
[edit protocols ospf traceoptions]
gsi@R1# Oct 1 16:18:17 trace_on: Tracing to "/var/log/ospf-debug" started
Oct 1 16:18:18 OSPF packet ignored: can't find neighbor for 192.168.1.2 (router-id 192.168.254.2)
Oct 1 16:18:18 OSPF rcvd LSAck 192.168.1.2 -> 224.0.0.5 (fe-0/0/0.0, IFL 0x43)
Oct 1 16:18:18 Version 2, length 44, ID 192.168.254.2, area 0.0.0.0
Oct 1 16:18:18 checksum 0x0, authtype 0
Oct 1 16:18:19 OSPF packet ignored: can't find neighbor for 192.168.1.2 (router-id 192.168.254.2)
Oct 1 16:18:19 OSPF rcvd LSUpdate 192.168.1.2 -> 224.0.0.5 (fe-0/0/0.0, IFL 0x43)
Oct 1 16:18:19 Version 2, length 72, ID 192.168.254.2, area 0.0.0.0
Oct 1 16:18:19 checksum 0x0, authtype 0
Oct 1 16:18:19 adv count 1
Oct 1 16:18:19 OSPF packet ignored: can't find neighbor for 192.168.0.6 (router-id 192.168.254.6)
Oct 1 16:18:19 OSPF rcvd LSUpdate 192.168.0.6 -> 192.168.0.1 (fe-0/0/3.0, IFL 0x45)
Oct 1 16:18:19 Version 2, length 72, ID 192.168.254.6, area 0.0.0.0
Oct 1 16:18:19 checksum 0x0, authtype 0
Oct 1 16:18:19 adv count 1
Oct 1 16:18:19 OSPF packet ignored: can't find neighbor for 192.168.0.6 (router-id 192.168.254.6)
Oct 1 16:18:19 OSPF rcvd LSAck 192.168.0.6 -> 224.0.0.5 (fe-0/0/3.0, IFL 0x45)
Oct 1 16:18:19 Version 2, length 44, ID 192.168.254.6, area 0.0.0.0
Oct 1 16:18:19 checksum 0x0, authtype 0
Oct 1 16:18:20 OSPF packet ignored: can't find neighbor for 192.168.0.6 (router-id 192.168.254.6)
Oct 1 16:18:20 OSPF rcvd LSUpdate 192.168.0.6 -> 192.168.0.1 (fe-0/0/3.0, IFL 0x45)
Oct 1 16:18:20 Version 2, length 72, ID 192.168.254.6, area 0.0.0.0
Oct 1 16:18:20 checksum 0x0, authtype 0
Oct 1 16:18:20 adv count 1
Oct 1 16:18:21 OSPF packet ignored: can't find neighbor for 192.168.1.2 (router-id 192.168.254.2)
Oct 1 16:18:21 OSPF rcvd LSUpdate 192.168.1.2 -> 224.0.0.5 (fe-0/0/0.0, IFL 0x43)
Oct 1 16:18:21 Version 2, length 72, ID 192.168.254.2, area 0.0.0.0
Oct 1 16:18:21 checksum 0x0, authtype 0
Oct 1 16:18:21 adv count 1
Oct 1 16:18:21 OSPF packet ignored: can't find neighbor for 192.168.0.6 (router-id 192.168.254.6)
Oct 1 16:18:21 OSPF rcvd LSUpdate 192.168.0.6 -> 192.168.0.1 (fe-0/0/3.0, IFL 0x45)
Oct 1 16:18:21 Version 2, length 72, ID 192.168.254.6, area 0.0.0.0
Oct 1 16:18:21 checksum 0x0, authtype 0
Oct 1 16:18:21 adv count 1
Oct 1 16:18:22 OSPF packet ignored: can't find neighbor for 192.168.1.2 (router-id 192.168.254.2)
Oct 1 16:18:22 OSPF rcvd LSUpdate 192.168.1.2 -> 224.0.0.5 (fe-0/0/0.0, IFL 0x43)
Oct 1 16:18:22 Version 2, length 72, ID 192.168.254.2, area 0.0.0.0
Oct 1 16:18:22 checksum 0x0, authtype 0
Oct 1 16:18:22 adv count 1
Oct 1 16:18:22 OSPF packet ignored: can't find neighbor for 192.168.0.6 (router-id 192.168.254.6)
Oct 1 16:18:22 OSPF rcvd LSUpdate 192.168.0.6 -> 192.168.0.1 (fe-0/0/3.0, IFL 0x45)
Oct 1 16:18:22 Version 2, length 72, ID 192.168.254.6, area 0.0.0.0
Oct 1 16:18:22 checksum 0x0, authtype 0
Oct 1 16:18:22 adv count 1
Oct 1 16:18:23 OSPF packet ignored: can't find neighbor for 192.168.1.2 (router-id 192.168.254.2)
Oct 1 16:18:23 OSPF rcvd LSUpdate 192.168.1.2 -> 224.0.0.5 (fe-0/0/0.0, IFL 0x43)
Oct 1 16:18:23 Version 2, length 72, ID 192.168.254.2, area 0.0.0.0
Oct 1 16:18:23 checksum 0x0, authtype 0
Oct 1 16:18:23 adv count 1
Oct 1 16:18:24 OSPF packet ignored: can't find neighbor for 192.168.1.2 (router-id 192.168.254.2)
Oct 1 16:18:24 OSPF rcvd LSUpdate 192.168.1.2 -> 224.0.0.5 (fe-0/0/0.0, IFL 0x43)
Oct 1 16:18:24 Version 2, length 72, ID 192.168.254.2, area 0.0.0.0
Oct 1 16:18:24 checksum 0x0, authtype 0
Oct 1 16:18:24 adv count 1
Oct 1 16:18:25 OSPF packet ignored: can't find neighbor for 192.168.1.2 (router-id 192.168.254.2)
Oct 1 16:18:25 OSPF rcvd LSUpdate 192.168.1.2 -> 224.0.0.5 (fe-0/0/0.0, IFL 0x43)
Oct 1 16:18:25 Version 2, length 72, ID 192.168.254.2, area 0.0.0.0
Oct 1 16:18:25 checksum 0x0, authtype 0
Oct 1 16:18:25 adv count 1
Oct 1 16:18:26 OSPF packet ignored: can't find neighbor for 192.168.1.2 (router-id 192.168.254.2)
Oct 1 16:18:26 OSPF rcvd LSUpdate 192.168.1.2 -> 224.0.0.5 (fe-0/0/0.0, IFL 0x43)
Oct 1 16:18:26 Version 2, length 72, ID 192.168.254.2, area 0.0.0.0
Oct 1 16:18:26 checksum 0x0, authtype 0
Oct 1 16:18:26 adv count 1
Oct 1 16:18:27 RPD_OSPF_NBRUP: OSPF neighbor 192.168.1.2 (fe-0/0/0.0) state changed from Init to 2Way due to Two way communication established
Oct 1 16:18:27 RPD_OSPF_NBRUP: OSPF neighbor 192.168.1.2 (fe-0/0/0.0) state changed from Loading to Full due to OSPF loading done
Oct 1 16:18:32 RPD_OSPF_NBRUP: OSPF neighbor 192.168.0.6 (fe-0/0/3.0) state changed from Init to ExStart due to Two way communication established
Oct 1 16:18:33 RPD_OSPF_NBRUP: OSPF neighbor 192.168.0.6 (fe-0/0/3.0) state changed from Loading to Full due to OSPF loading done
実はこの実験、ちょっと失敗してます。
本当ならR1は再起動しているので、リンクステートデータベースは空っぽになっているはずです。
にもかかわらず、DB Descrで既にLSAをたくさん所持してしまってます。
これはR6-R1の隣接が先に同期化してしまい、LSAをR6から学習してしまっているためです。
しかも、grace-LSAをパージするパケットが抜けてます。キャプチャの停止が早すぎたようです・・・
気に入らないので、またキャプチャしなおすかもしれません。
Recent Comments