orm@doc-tcpip.org | Erstellt: Dezember 2002 - Letzte Modifikation: August 2003 |
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 |.... |
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL