orm@doc-tcpip.org

Erstellt: Dezember 2002 - Letzte Modifikation: August 2003

[ Main | Local ]


Die HA Konfiguration des NetDispatcher

Austausch von Status und Heart-Beat

Der NetDispatcher kann hochverfügbar aufgesetzt werden. Dazu braucht man zwei gleichartig installierte Maschinen, es wird ein IP-Adressen Paar über eine gemeinsame Portnummer im Stand-By Modus läuft. Über eine TCP-Verbindung tauschen die Maschinen ununterbrochen Heartbeats und die Informationen aus der Connection- und Reach-Table aus.

In diesem Trace sind einige typische Pakete aus diesem Verkehr dargestellt. Leider habe ich nichts über das Protokoll herausgefunden, auch wenn man sich einige Sachen einfach ableiten kann.

Mit den neueren Versionen (Edge Server Version 2, also eNetDispatcher Version 4) ist das Protokoll ein anderes. Dazu mehr nach dem klassischen Trace..

Die TCP-Verbindung ist über die beiden NF-Adressen (Non Forwardable) und einem frei wählbaren Port konfiguriert. Im Beispiel sind das die 10.10.10.4 und 10.10.10.5 sowie der Port 10006. Die Pakete haben eine unübliche, aber zuläßige Kombination von Flags: FIN, SYN, PUSH und URG. Darüber kann ich nur spekulieren - jedenfalls ist so die Sequenznummer immer 0 und die Flags machen das erkennen des Paketes einfach, sodaß die NetDispatcher-Erweiterung das Paket ohne Probleme schnappen kann.

Der normale Heart-Beat wird etwa alle 500 ms geschickt und sieht so aus:

 
Packet Number 1
ETH: ====( 60 bytes received on interface en0 )==== 15:44:28.903512186
ETH:    [ 00:20:35:8d:97:a3 -> 00:20:35:8d:e7:fd ]  type 800  (IP)
IP:  	< SRC =      10.10.10.4 >  
IP:  	< DST =      10.10.10.5 >  
IP:  	ip_v=4, ip_hl=20, ip_tos=0, ip_len=44, ip_id=57005, ip_off=0
IP:  	ip_ttl=32, ip_sum=9402, ip_p = 6 (TCP)
TCP: 	< source port=10006, destination port=10006 >
TCP: 	th_seq=0, th_ack=0
TCP: 	th_off=5, flags< FIN | SYN | PUSH | URG >
TCP: 	th_win=0, th_sum=3969, th_urp=0
TCP: 00000000     00040000                                |....            |

Packet Number 2
ETH: ====( 60 bytes transmitted on interface en0 )==== 15:44:28.903528376
ETH:    [ 00:20:35:8d:e7:fd -> 00:20:35:8d:97:a3 ]  type 800  (IP)
IP:  	< SRC =      10.10.10.5 >  
IP:  	< DST =      10.10.10.4 >  
IP:  	ip_v=4, ip_hl=20, ip_tos=0, ip_len=44, ip_id=57005, ip_off=0
IP:  	ip_ttl=32, ip_sum=9402, ip_p = 6 (TCP)
TCP: 	< source port=10006, destination port=10006 >
TCP: 	th_seq=0, th_ack=0
TCP: 	th_off=5, flags< FIN | SYN | PUSH | URG >
TCP: 	th_win=0, th_sum=3968, th_urp=0
TCP: 00000000     00050000                                |....            |

Ich vermute, das die Nutzlast (hier: 00050000 bzw. 00040000) etwas über den Status der Sender-Maschine aussagt (Active oder Standby) - oder es ist ein Teil der IP.

Dann gibt es eine Reihe Reihe Pakete, die offensichtlich zum Austausch des State der Connection-Table dienen. Diese Pakete beginnen alle mit 0002, und sie kommen alle von der aktiven Maschine (nur dort fällt State an..).

 
Packet Number 3
ETH: ====( 98 bytes received on interface en0 )==== 15:44:28.903535415
ETH:    [ 00:20:35:8d:97:a3 -> 00:20:35:8d:e7:fd ]  type 800  (IP)
IP:  	< SRC =      10.10.10.4 >  
IP:  	< DST =      10.10.10.5 >  
IP:  	ip_v=4, ip_hl=20, ip_tos=0, ip_len=84, ip_id=57005, ip_off=0
IP:  	ip_ttl=32, ip_sum=93da, ip_p = 6 (TCP)
TCP: 	< source port=10006, destination port=10006 >
TCP: 	th_seq=0, th_ack=0
TCP: 	th_off=5, flags< FIN | SYN | PUSH | URG >
TCP: 	th_win=0, th_sum=f335, th_urp=0
TCP: 00000000     00020002 0109006e e45a0000 0a0a0a0a     |.......n.Z......|
TCP: 00000010     0a0a0a04 0a0a0a07 030a006e e45a0000     |...........n.Z..|
TCP: 00000020     0a0a0a0a 0a0a0a04 0a0a0a07              |............    |

Man kann sich folgendes Ableiten: 0002 ist der Datentyp oder Message-Type. 0002 ist die Anzahl der Updates (2); ein Update beginnt mit 8 Byte irgendwelcher Zahlen - wahrscheinlich Angaben zu den Gewichten, oder etwas in dieser Art. Dann folgen 3 Einheiten zu 4 Byte. Man findet eine Reihe bekannte IP-Adressen wieder: 10.10.10.10 ist eine Cluster-Adresse, 10.10.10.4 ist der aktive NetDispatcher, 10.10.10.7 ist einer der Server in diesem Cluster. Auf die Zahlenwerte kann ich mir leider keinen Reim machen: 1, 9, 0, 110, 228, 90, 0, 0.

 
Packet Number 8
ETH: ====( 78 bytes received on interface en0 )==== 15:44:29.913480677
ETH:    [ 00:20:35:8d:97:a3 -> 00:20:35:8d:e7:fd ]  type 800  (IP)
IP:  	< SRC =      10.10.10.4 >  
IP:  	< DST =      10.10.10.5 >  
IP:  	ip_v=4, ip_hl=20, ip_tos=0, ip_len=64, ip_id=57005, ip_off=0
IP:  	ip_ttl=32, ip_sum=93ee, ip_p = 6 (TCP)
TCP: 	< source port=10006, destination port=10006 >
TCP: 	th_seq=0, th_ack=0
TCP: 	th_off=5, flags< FIN | SYN | PUSH | URG >
TCP: 	th_win=0, th_sum=3a56, th_urp=0
TCP: 00000000     00020001 03120050 b82a0000 0a0a0a6e     |.......P.*.....n|
TCP: 00000010     d40f4675 0a0a0a6c                       |..Fu...l        |

Ein Daten-Satz, mit sinnvollen IP-Adressen: Cluster 10.10.10.110, Client 212.15.70.117 und Server 10.10.10.108. Die Zahlen für die Gewichte (oder was immer) sind: 3, 18, 0, 80, 184, 42, 0, 0.

 
Packet Number 19
ETH: ====( 1238 bytes received on interface en0 )==== 15:44:32.465826733
ETH:    [ 00:20:35:8d:97:a3 -> 00:20:35:8d:e7:fd ]  type 800  (IP)
IP:  	< SRC =      10.10.10.4 >  
IP:  	< DST =      10.10.10.5 >  
IP:  	ip_v=4, ip_hl=20, ip_tos=0, ip_len=1224, ip_id=57005, ip_off=0
IP:  	ip_ttl=32, ip_sum=8f66, ip_p = 6 (TCP)
TCP: 	< source port=10006, destination port=10006 >
TCP: 	th_seq=0, th_ack=0
TCP: 	th_off=5, flags< FIN | SYN | PUSH | URG >
TCP: 	th_win=0, th_sum=e6f6, th_urp=0
TCP: 00000000     0002003b 054c01bb e2810000 0a0a0a1e     |...;.L..........|
TCP: 00000010     0a0a0a04 0a0a0a16 054c01bb e2820000     |.........L......|
TCP: 00000020     0a0a0a1e 0a0a0a04 0a0a0a15 054c01bb     |.............L..|
TCP: 00000030     e2840000 0a0a0a0a 0a0a0a04 0a0a0a08     |................|
TCP: 00000040     054c01bb e2860000 0a0a0a0a 0a0a0a04     |.L..............|
TCP: 00000050     0a0a0a07 054c01bb e2880000 0a0a0a6e     |.....L.........n|
TCP: 00000060     0a0a0a04 0a0a0a6c 050a006e e3c90000     |.......l...n....|
TCP: 00000070     0a0a0a0a 0a0a0a04 0a0a0a07 014c0019     |.............L..|
TCP: 00000080     e34a0000 0a0a0a50 0a0a0a04 0a0a0a51     |.J.....P.......Q|
TCP: 00000090     054c01bb e28a0000 0a0a0a6e 0a0a0a04     |.L.........n....|
TCP: 000000a0     0a0a0a6b 050a0050 e3cc0000 0a0a0a1e     |...k...P........|
TCP: 000000b0     0a0a0a04 0a0a0a16 014c01bb e34c0000     |.........L...L..|
TCP: 000000c0     0a0a0a1e 0a0a0a04 0a0a0a16 050a0050     |...............P|
TCP: 000000d0     e3ce0000 0a0a0a1e 0a0a0a04 0a0a0a15     |................|
TCP: 000000e0     014c01bb e34e0000 0a0a0a1e 0a0a0a04     |.L...N..........|
TCP: 000000f0     0a0a0a15 014c0019 e28e0000 0a0a0a50     |.....L.........P|
TCP: 00000100     0a0a0a04 0a0a0a51 050a0050 e3d00000     |.......Q...P....|
TCP: 00000110     0a0a0a0a 0a0a0a04 0a0a0a08 014c01bb     |.............L..|
TCP: 00000120     e3500000 0a0a0a0a 0a0a0a04 0a0a0a08     |.P..............|
TCP: 00000130     050a0050 e3d20000 0a0a0a0a 0a0a0a04     |...P............|
TCP: 00000140     0a0a0a07 014c01bb e3520000 0a0a0a0a     |.....L...R......|
TCP: 00000150     0a0a0a04 0a0a0a07 050a0050 e3d40000     |...........P....|
TCP: 00000160     0a0a0a6e 0a0a0a04 0a0a0a6c 050a0050     |...n.......l...P|
TCP: 00000170     e3d50000 0a0a0a6e 0a0a0a04 0a0a0a6b     |.......n.......k|
TCP: 00000180     014c01bb e3550000 0a0a0a6e 0a0a0a04     |.L...U.....n....|
TCP: 00000190     0a0a0a6c 050a006e e3d70000 0a0a0a0a     |...l...n........|
TCP: 000001a0     0a0a0a04 0a0a0a08 014c01bb e3570000     |.........L...W..|
TCP: 000001b0     0a0a0a6e 0a0a0a04 0a0a0a6b 050a006e     |...n.......k...n|
TCP: 000001c0     e3d80000 0a0a0a0a 0a0a0a04 0a0a0a07     |................|
TCP: 000001d0     014c0019 e3590000 0a0a0a50 0a0a0a04     |.L...Y.....P....|
TCP: 000001e0     0a0a0a52 050a0050 e3da0000 0a0a0a1e     |...R...P........|
TCP: 000001f0     0a0a0a04 0a0a0a16 050a0050 e3dc0000     |...........P....|
TCP: 00000200     0a0a0a1e 0a0a0a04 0a0a0a15 014c01bb     |.............L..|
TCP: 00000210     e35c0000 0a0a0a1e 0a0a0a04 0a0a0a16     |.\..............|
TCP: 00000220     014c01bb e35e0000 0a0a0a1e 0a0a0a04     |.L...^..........|
TCP: 00000230     0a0a0a15 050a0050 e3df0000 0a0a0a0a     |.......P........|
TCP: 00000240     0a0a0a04 0a0a0a08 014c01bb e3600000     |.........L...`..|
TCP: 00000250     0a0a0a0a 0a0a0a04 0a0a0a08 050a0050     |...............P|
TCP: 00000260     e3e10000 0a0a0a0a 0a0a0a04 0a0a0a07     |................|
TCP: 00000270     054c01bb e2610000 0a0a0a1e 0a0a0a04     |.L...a..........|
TCP: 00000280     0a0a0a16 014c01bb e3620000 0a0a0a0a     |.....L...b......|
TCP: 00000290     0a0a0a04 0a0a0a07 050a0050 e3e30000     |...........P....|
TCP: 000002a0     0a0a0a6e 0a0a0a04 0a0a0a6c 054c01bb     |...n.......l.L..|
TCP: 000002b0     e2630000 0a0a0a1e 0a0a0a04 0a0a0a15     |.c..............|
TCP: 000002c0     014c01bb e3640000 0a0a0a6e 0a0a0a04     |.L...d.....n....|
TCP: 000002d0     0a0a0a6c 050a0050 e3e50000 0a0a0a6e     |...l...P.......n|
TCP: 000002e0     0a0a0a04 0a0a0a6b 054c01bb e2650000     |.......k.L...e..|
TCP: 000002f0     0a0a0a0a 0a0a0a04 0a0a0a08 050a006e     |...............n|
TCP: 00000300     e3e60000 0a0a0a0a 0a0a0a04 0a0a0a08     |................|
TCP: 00000310     014c01bb e3660000 0a0a0a6e 0a0a0a04     |.L...f.....n....|
TCP: 00000320     0a0a0a6b 05120050 b8260000 0a0a0a6e     |...k...P.&.....n|
TCP: 00000330     d40f4675 0a0a0a6b 050a006e e3e70000     |..Fu...k...n....|
TCP: 00000340     0a0a0a0a 0a0a0a04 0a0a0a07 054c01bb     |.............L..|
TCP: 00000350     e2670000 0a0a0a0a 0a0a0a04 0a0a0a07     |.g..............|
TCP: 00000360     014c0019 e3680000 0a0a0a50 0a0a0a04     |.L...h.....P....|
TCP: 00000370     0a0a0a51 050a0050 e3e90000 0a0a0a1e     |...Q...P........|
TCP: 00000380     0a0a0a04 0a0a0a16 054c01bb e2690000     |.........L...i..|
TCP: 00000390     0a0a0a6e 0a0a0a04 0a0a0a6c 014c01bb     |...n.......l.L..|
TCP: 000003a0     e36b0000 0a0a0a1e 0a0a0a04 0a0a0a16     |.k..............|
TCP: 000003b0     054c0019 e26b0000 0a0a0a50 0a0a0a04     |.L...k.....P....|
TCP: 000003c0     0a0a0a52 050a0050 e3ec0000 0a0a0a1e     |...R...P........|
TCP: 000003d0     0a0a0a04 0a0a0a15 054c01bb e26c0000     |.........L...l..|
TCP: 000003e0     0a0a0a6e 0a0a0a04 0a0a0a6b 014c01bb     |...n.......k.L..|
TCP: 000003f0     e36d0000 0a0a0a1e 0a0a0a04 0a0a0a15     |.m..............|
TCP: 00000400     050a0050 e3ee0000 0a0a0a0a 0a0a0a04     |...P............|
TCP: 00000410     0a0a0a08 050a0050 e3f00000 0a0a0a0a     |.......P........|
TCP: 00000420     0a0a0a04 0a0a0a07 014c01bb e3700000     |.........L...p..|
TCP: 00000430     0a0a0a0a 0a0a0a04 0a0a0a08 054c0019     |.............L..|
TCP: 00000440     e2700000 0a0a0a50 0a0a0a04 0a0a0a51     |.p.....P.......Q|
TCP: 00000450     050a0050 e3f10000 0a0a0a6e 0a0a0a04     |...P.......n....|
TCP: 00000460     0a0a0a6c 014c01bb e3710000 0a0a0a0a     |...l.L...q......|
TCP: 00000470     0a0a0a04 0a0a0a07 054c01bb e2710000     |.........L...q..|
TCP: 00000480     0a0a0a1e 0a0a0a04 0a0a0a16 050a0050     |...............P|
TCP: 00000490     e3f30000 0a0a0a6e 0a0a0a04 0a0a0a6b     |.......n.......k|

Ein großes Update, mit 59 Datensätzen. Das nächste Paket gehört auch noch dazu, falls Jemand Lust hat, ein wenig zu knobeln...

 
Packet Number 20
ETH: ====( 298 bytes received on interface en0 )==== 15:44:32.465840062
ETH:    [ 00:20:35:8d:97:a3 -> 00:20:35:8d:e7:fd ]  type 800  (IP)
IP:  	< SRC =      10.10.10.4 >  
IP:  	< DST =      10.10.10.5 >  
IP:  	ip_v=4, ip_hl=20, ip_tos=0, ip_len=284, ip_id=57005, ip_off=0
IP:  	ip_ttl=32, ip_sum=9312, ip_p = 6 (TCP)
TCP: 	< source port=10006, destination port=10006 >
TCP: 	th_seq=0, th_ack=0
TCP: 	th_off=5, flags< FIN | SYN | PUSH | URG >
TCP: 	th_win=0, th_sum=8bdb, th_urp=0
TCP: 00000000     0002000c 054c01bb e2730000 0a0a0a1e     |.....L...s......|
TCP: 00000010     0a0a0a04 0a0a0a15 014c01bb e3740000     |.........L...t..|
TCP: 00000020     0a0a0a6e 0a0a0a04 0a0a0a6c 050a006e     |...n.......l...n|
TCP: 00000030     e3f50000 0a0a0a0a 0a0a0a04 0a0a0a08     |................|
TCP: 00000040     054c01bb e2750000 0a0a0a0a 0a0a0a04     |.L...u..........|
TCP: 00000050     0a0a0a08 05120050 c9750000 0a0a0a6e     |.......P.u.....n|
TCP: 00000060     0a0a1415 0a0a0a6c 050a006e e3f60000     |.......l...n....|
TCP: 00000070     0a0a0a0a 0a0a0a04 0a0a0a07 014c01bb     |.............L..|
TCP: 00000080     e3760000 0a0a0a6e 0a0a0a04 0a0a0a6b     |.v.....n.......k|
TCP: 00000090     014c0019 e3770000 0a0a0a50 0a0a0a04     |.L...w.....P....|
TCP: 000000a0     0a0a0a52 054c01bb e2770000 0a0a0a0a     |...R.L...w......|
TCP: 000000b0     0a0a0a04 0a0a0a07 054c01bb e2790000     |.........L...y..|
TCP: 000000c0     0a0a0a6e 0a0a0a04 0a0a0a6c 054c01bb     |...n.......l.L..|
TCP: 000000d0     e27b0000 0a0a0a6e 0a0a0a04 0a0a0a6b     |.{.....n.......k|
TCP: 000000e0     054c0019 e27f0000 0a0a0a50 0a0a0a04     |.L.........P....|
TCP: 000000f0     0a0a0a52                                |...R            |

Die neuen Versionen des eNetDispatchers benutzen statt der TCP-Pakete mit den vielen gesetzten Flags ein richtiges IP-Protokoll: Protokoll 47, das ist GRE, Generic Routing Encapsulation, für die Kommunikation in VPN. Im folgenden Trace wurde eine iptrace-Version benutzt, die die Protokoll-Version noch nicht richtig auflöst.

Zuerst ein kommentiertes Paket eines Tcpdump Mitschnittes. Im Anschluß der Trace, neu ist der GRE-Teil und die lustigen Bit-Muster, die die IBM Programmierer gesetzt haben. An der Art und Weise, in der der HA-Status ausgetauscht wird, hat sich anscheinend nichts geändert.

 
11:45:40.563685626 10.62.13.42 > 10.62.13.41: ip-proto-47 20
                         4500 0028 dead 0000 202f 8d2b 0a3e 0d2a
                         IPv4, 5 32 Bit Worte
                           TOS (Type of Service)
                                Länge des IP-Teil (0x28 == 40)
                                   Paket ID (0xdead == 57005)
                                             TTL (32 Hops)
                                               Folgeprotokoll: 47
                                                  Checksumme
                                                       IP Quelle 
                         0a3e 0d29 2000 0200 beef feed 0001 0300
                         IP Ziel   
                                   GRE Teil des Paketes.
                                   0x20 ist Binär 00100000.
                                   Dieses Flag bedeutet, das ein Key
                                   gesetzt ist. 0x0200 gibt als 
                                   Folgeprotokoll PUP an.
                                   (PARC Universial Protokol).
                                   Der Witz mit beef feed ist der Key.
                                   (Der nicht genutzt wird).
                                   Danach beginnt der PUP Teil, hier
                                   wird der HA-State ausgetauscht.
                         0a3e 0d2a 0004 0000 0000 0000 0000

Der tcpdump in voller Schönheit:

 
11:45:40.563685626 10.62.13.42 > 10.62.13.41: ip-proto-47 20
                         4500 0028 dead 0000 202f 8d2b 0a3e 0d2a
                         0a3e 0d29 2000 0200 beef feed 0001 0300
                         0a3e 0d2a 0004 0000 0000 0000 0000
11:45:40.563730627 10.62.13.41 > 10.62.13.42: ip-proto-47 20
                         4500 0028 dead 0000 202f 8d2b 0a3e 0d29
                         0a3e 0d2a 2000 0200 beef feed 0001 0300
                         0a3e 0d2a 0005 0000 0000 0000 0000
11:45:40.563753819 10.62.13.42 > 10.62.13.41: ip-proto-47 152
                         4500 00ac dead 0000 202f 8ca7 0a3e 0d2a
                         0a3e 0d29 2000 0200 beef feed 0001 0300
                         0a3e 0d2a 0002 0003 0100 0204 0c92 0000
                         c0a8 1401 0a3e 0d07 0a3e 0d29 0000 39a8
                         0304

Aus derselben Verbindung noch ein Mitschnitt mit iptrace, das ist leichter Auszuwerten:

 
Packet Number 16
ETH: ====( 60 bytes received on interface en4 )==== 12:03:55.620755197
ETH: 00000000     00025509 74220002 5509f4ff 08004500     |..U.t"..U.....E.|
ETH: 00000010     0028dead 0000202f 8d2b0a3e 0d2a0a3e     |.(.... /.+.>.*.>|
ETH: 00000020     0d292000 0200beef feed0001 03000a3e     |.) ............>|
ETH: 00000030     0d2a0004 00000000 00000000              |.*..........    |
ETH:    [ 00:02:55:09:f4:ff -> 00:02:55:09:74:22 ]  type 800  (IP)
IP:     < SRC =     10.62.13.42 >  (masch2)
IP:     < DST =     10.62.13.41 >  (masch1)
IP:     ip_v=4, ip_hl=20, ip_tos=0, ip_len=40, ip_id=57005, ip_off=0
IP:     ip_ttl=32, ip_sum=8d2b, ip_p = 47 (unknown internet protocol)
IP:  00000000     20000200 beeffeed 00010300 0a3e0d2a     | ............>.*|
IP:  00000010     00040000                                |....            |

Packet Number 17
ETH: ====( 60 bytes received on interface en4 )==== 12:03:56.120905138
ETH: 00000000     00025509 74220002 5509f4ff 08004500     |..U.t"..U.....E.|
ETH: 00000010     0028dead 0000202f 8d2b0a3e 0d2a0a3e     |.(.... /.+.>.*.>|
ETH: 00000020     0d292000 0200beef feed0001 03000a3e     |.) ............>|
ETH: 00000030     0d2a0004 00000000 00000000              |.*..........    |
ETH:    [ 00:02:55:09:f4:ff -> 00:02:55:09:74:22 ]  type 800  (IP)
IP:     < SRC =     10.62.13.42 >  (masch2)
IP:     < DST =     10.62.13.41 >  (masch1)
IP:     ip_v=4, ip_hl=20, ip_tos=0, ip_len=40, ip_id=57005, ip_off=0
IP:     ip_ttl=32, ip_sum=8d2b, ip_p = 47 (unknown internet protocol)
IP:  00000000     20000200 beeffeed 00010300 0a3e0d2a     | ............>.*|
IP:  00000010     00040000                                |....            |

[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | SMTP | Tracing | GPS ]

Copyright 2001-2014 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )