12.07.2015 Aufrufe

2 Pakete und Protokolle - Vorlesungen

2 Pakete und Protokolle - Vorlesungen

2 Pakete und Protokolle - Vorlesungen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

152<strong>Pakete</strong> <strong>und</strong> <strong>Protokolle</strong>In diesem Kapitel werden die unteren Schichten der IP-Familie im Detail betrachtet.ApplicationPresentationSessionTFTPSNMPDNSNFSNISportmapperRPCXDRFTPLPDSMTPTELNETTransportUDPTCPNetworkIPICMPARP RARPData LinkIEEE 802.3 EthernetanderePhysical2.1 Ethernet <strong>und</strong> IEEE 802.30 1 23preamble8receiver20protocol (ip 0x800)senderdata, 46 to 1500 bytesCRC, all but preamble and CRCEthernet-<strong>Pakete</strong> haben 64 bis 1518 Bytes (ohne preamble). Am protocol wird der Inhaltunterschieden. Die Adresse ff:ff:ff:ff:ff:ff dient als Broadcast, wird also von allenNetzkarten erkannt.IEEE 802.3 enthält die Länge an Stelle der Protokoll-Nummer <strong>und</strong> muß daher noch ein logicallink control-Paket enthalten. Gebräuchliche Protokoll-Nummern sind groß, damit man sie nichtmit Längen verwechseln kann.


162.2 ARP480 1 2 3hardware type (ethernet 1)protocol (ip 0x800)hardware bytesprotocol bytesoperation (1/2 ARP, 3/4 RARP)sender hardware, sender protocolreceiver hardware, receiver protocolARP (RFC 826) setzt Ethernet Protocol 0x8086, Broadcast ff:ff:ff:ff:ff:ff <strong>und</strong> diegesuchte IP-Adresse. Wenn ein Rechner seine IP-Adresse erkennt, füllt er seine Hardware-Adresse aus. Es gibt Probleme, wenn zwei Rechner die gleiche IP-Adresse haben, weil siesich im Lauf der Zeit immer wieder widersprechen.2.3 RARPRARP (RFC 903) setzt Ethernet Protocol 0x8035, Broadcast <strong>und</strong> die gesuchte Hardware-Adresse. Wenn ein Server(!) die Hardware-Adresse kennt, füllt er die IP-Adresse aus.2.4 IP4812160 1 2 3version hd words priority D T R C packet/fragment length in bytesunique id, to rejoin fragments N M fragmentoffset in bytes/8time to live protocol header checksumsenderreceiveroptions, filled to complete word...IP (RFC 791) verwendet einige type of service Bits, die die Priorität von Nachrichten festlegen,sowie Hinweise an die Router:D low delayT high throughputR high reliablityC low costIP kann <strong>Pakete</strong> fragmentieren, um sie durch Netze mit geringen MTU-Werten (maximum transferunits) zu bringen. Sie müssen dann auch wieder rekombiniert werden:N don't fragmentM more to comeWenn N gesetzt ist <strong>und</strong> ein Paket nicht in ein Netz paßt, wird es verworfen. Die Fragmentewerden anhand ihrer id erkannt <strong>und</strong> anhand von offset zusammengesetzt, bis M nicht mehrgesetzt ist.time to live wird in jedem Router um 1 reduziert, bis ein Paket verworfen wird — dannerfolgt eine ICMP-Meldung.options sind Bytes, die zur Diagnose dienen.


172.5 ICMPICMP (RFC 792) sind Meldungen, die in IP-<strong>Pakete</strong>n als Daten mit protocol 1 verschickt werden.Sie bestehen mindestens aus 4 Bytes: Typ, Code <strong>und</strong> 2 Bytes mit einer Prüfsumme.ping schickt als Typ 8, als Code 0, <strong>und</strong> fügt zwei Bytes mit einer id, zwei Bytes mit einerSequenznummer <strong>und</strong> einige Datenbytes hinzu. Die Antwort erhält den Typ 0.Mit ICMP-Fehlermeldungen, zum Beispiel Typ 3 (destination unreachable), Typ 4 (sourcequench) oder Typ 11 (ttl exceeded) kann man Netzprobleme untersuchen.traceroute sendet <strong>Pakete</strong> mit fortschreitend größerer time to live <strong>und</strong> bestimmt aus den ICMP-Meldungen die wahrscheinliche Route zum Ziel.2.6 UDP40 1 2 3sender portreceiver portlength, UDP header and datachecksumUDP (RFC 768) ist ein verbindungsloses, unsicheres Datagram-Protokoll auf Benutzer-(Prozeß-) Ebene. Zum IP-Paket kommen Port-Nummern für Sender <strong>und</strong> Empfänger sowieeine Daten-Prüfsumme hinzu, die allerdings die IP-Adressen auch berücksichtigt:040 1 2 3senderreceiver0 protocol (udp 0x11) length, UDP header and datasender portreceiver portlength, UDP header and datachecksumUDP hat verschiedene, wichtige Anwendungen:TFTP RFC 1350 trivial file transfer protocolStart von Rechnern ohne PlatteDNS RFC 1034 domain name service IP-Adressen für NamenSNMP RFC 1157 simple network management protocol Rechnerbetrieb via DatenbankRPC RFC 1831 remote procedure call auch über TCPNFS RFC 1813 network file system wesentlichste RPC-Anwendung


182.7 TCP4812160 1 2 3sender portreceiver portsequence numberacknowledgment numberhd words U A P R S F windowchecksumurgent pointeroptions, filled to complete word...data...TCP (RFC 793) ist ein verbindungsorientiertes, sicheres Byte-Strom-Protokoll auf Benutzer-(Prozeß-) Ebene. Zum IP-Paket kommen Port-Nummern für Sender <strong>und</strong> Empfänger, Informationenzur Absicherung der Übertragung <strong>und</strong> für vorrangige Daten sowie eine Daten-Prüfsummehinzu, die allerdings die IP-Adressen auch berücksichtigt:4812160 1 2 3senderreceiver0 protocol (tcp 0x6 ) length, TCP header and datasender portreceiver portsequence numberacknowledgment numberhd words U A P R S F windowchecksumurgent pointeroptions, filled to complete word...data...Man bezeichnet ein TCP-Paket als Segment.Vorrangige Informationen liegen vor, wenn URG gesetzt ist. Sie befinden sich dann am Anfangder Datenfläche <strong>und</strong> urgent pointer ist die Anzahl der vorrangigen Bytes.sequence number ist ein vom Sender über Verbindungen hinweg fortlaufender Byte-Zähler,der die Position des ersten, nicht-vorrangigen Bytes im Datenstrom bezeichnet.acknowledgment number ist gültig, wenn ACK gesetzt ist, <strong>und</strong> ist dann die nächste sequencenumber, die vom Sender erwartet wird, bezeichnet also die Position des ersten Bytes imStrom, das noch nicht empfangen wurde.PUSH wird gesetzt, damit der Empfänger die Daten nicht puffert, sondern sofort der Applikationliefert. RESET wird im Notfall gesetzt, um eine Verbindung brutal abzubrechen. SYN wird inSegmenten gesetzt, die zur Verbindungsaufnahme dienen. FIN wird in Segmenten gesetzt,die zum Abbau der Verbindung dienen.window teilt mit, wieviel Bytes maximal zwischen sequence <strong>und</strong> acknowledgment liegenkönnen. Diese Größe wird zur Flußkontrolle variiert.Es gibt eine einzige option, mit der die maximale Größe für ein Segment mitgeteilt wird.


19VerbindungenDas Quadrupel aus Sender- <strong>und</strong> Empfänger-Adresse <strong>und</strong> -Port-Nummer ist per Verbindungeindeutig (<strong>und</strong> deshalb Teil der Prüfsumme). Das heißt, zwei verschiedene Verbindungenkönnen auf einem Rechner durchaus die gleiche Port-Nummer verwenden.TCP- <strong>und</strong> UDP-Port-Nummern bilden voneinander verschiedene Adreßräume.Aufbau <strong>und</strong> Abbau einer Verbindung werden durch das folgende (bezüglich Fehlern <strong>und</strong>Abbrüchen nicht vollständige) Zustandsdiagramm beschrieben:closedbindcloseconnectSYNcloseSYNSYN+ACKsyn receivedlistenSYNACKsendSYNsyn sentACKSYN+ACKACKcloseFINcloseFINestablishedFINACKfin wait 1close waitACKFINACKcloseFINfin wait 2closinglast ackFINACKACKACKtime waitclosedtimeout 2MSLDie Pfeile sind Zustandsänderungen, die durch Anforderungen an die Transportschicht (fett)oder durch Empfang von ACK-, SYN- oder FIN-Segmenten (rot) ausgelöst werden. In der Regelwerden dann entsprechende Segmente (blau) verschickt.ACK wird anhand der acknowledgment number zugeordnet. ACK darf nur sequentiell verschicktwerden — ein fehlendes Segment unterbindet weitere ACK. Gehen ACK verloren, könnendeshalb Löcher akzeptiert werden.


20VerbindungsaufbauBeim Aufbau einer Verbindung müssen Sender <strong>und</strong> Empfänger ihre nächste sequence numberbekanntgeben. Dies geschieht mit insgesamt zwei SYN- <strong>und</strong> einem ACK-Segment:syn 123syn 456 ack 124ack 457Bleiben Antworten mit ACK-Segmenten zu lange aus, muß erneut übertragen werden. Derthree way handshake dient dazu, vielfaches Hin <strong>und</strong> Her zu vermeiden:syn 123syn 123syn 456 ack 124syn 456 ack 124ack 457syn 456 ack 124ack 457Ein einfaches SYN/ACK könnte sehr leicht zu unendlich vielen Wiederholungen führen. Dieswird unter anderem durch die Nummern vermieden.


21ÜbertragungIm Zustand established werden dann (bei Bedarf in beiden Richtungen!) Daten <strong>und</strong> ACKübertragen:123 data abcd127 data xyz456 ack 127456 ack 130ACK muß innerhalb einer Zeitschranke empfangen werden. Zu deren dynamischer, variablerBestimmung gibt es komplizierte Algorithmen, unter anderem von Phil Karn (KA9Q).Bis zu window Bytes können ohne Empfang von ACK geschickt werden. Jedes ACK schiebtdann dieses Fenster weiter (sliding window), wobei innere ACK nicht gesendet werdenbrauchen.Der Empfänger teilt bei ACK das verbleibende Fenster mit, damit der Sender entsprechendweniger schickt — dies gilt allerdings nur, wenn gültige Daten übertragen wurden. Hat derEmpfänger wieder Platz, schickt er ein ACK mit einer neuen Fenstergröße — allerdings erst,wenn der Puffer zu 25% leer ist oder wenigstens ein maximales Segment empfangen kann(silly window algorithm).Beim Start einer Verbindung wird das Fenster langsam vergrößert (slow start algorithm) <strong>und</strong>später wird das Fenster bei zu vielen Wiederholungen verkleinert, um Netzüberlastung zu vermeiden(congestion avoidance).Kleine Datenpakete werden nach Möglichkeit beim Sender gepuffert, um die weiteren Schichtenweniger zu belasten (Nagle algorithm).EchoEine wichtige Anwendung ist das Netz-Terminal-Protokoll TELNET. Dabei muß inbesondereein zeichenweises Echo möglichst effizient verschickt werden:123 push data c123 push data c456 ack 124 data c456 ack 124124 ack 457456 ack 124 data c124 ack 457Je nach Geschwindigkeit des Servers (rechts) benötigt man für ein Echo drei oder vier Segmente.


22VerbindungsabbauZum ordentlichen Abbau der Verbindung muß jede Seite ein FIN-Segment verschicken <strong>und</strong>ein ACK dafür empfangen. Je nach Zustand wird dann noch die doppelte maximale Segment-Lebensdauer (MSL) abgewartet.123 fin456 fin ack 124124 ack 457Mit netstat kann man relativ häufig unvermittelt abgebrochene Verbindungen im Zustand timewait entdecken.FazitTCP hat sehr viele wichtige Anwendungen:FTP RFC 959 file transfer protocol Datei-ÜbertragungHTTP RFC 2616 hypertext transfer protocol World Wide WebSMTP RFC 821 simple mail transfer protocol elektronische PostTELNET RFC 854 network terminal remote loginX11 RFC 1013 X Window System protocol Fenster-SystemDie einzige Fehlerkorrektur erfolgt end to end, ist aber wegen relativ verläßlicher Übertragungentrotzdem recht effizient — insbesondere wegen der dynamisch änderbaren Fenster.


232.8 tcpdumptcpdump erlaubt der Netzkarte, alle <strong>Pakete</strong> einzulesen, <strong>und</strong> läßt sich vom Kern ausgewählte<strong>Pakete</strong> liefern, die dann dargestellt werden. Aus Sicherheitsgründen ist tcpdump nur für denSuper-User verfügbar.tcpdump optionen filter-expressionWesentliche Optionen kontrollieren die Art der Ausgabe:-dd filter-expression darstellen; sonst nichts-e Ethernet- (statt IP-) bezogen-s len Paketlänge-t kein Zeitstempel-v mehr Information-x Hex-Dump der PaketdatenOhne filter-expression wird alles berichtet. Eine filter-expression wird als Pseudo-Code in den Kern geladen <strong>und</strong> dort bezüglich eines Pakets interpretiert:$ tcpdump -dtxv host molly and udp port domain(000) ldh [12] 12: ethernet type code(001) jeq #0x800 jt 2 jf 160x800: IP(002) ld [26] 26: ip sender(003) jeq #0x83ad0dd1 jt 6 jf 4131.173.13.209 molly(004) ld [30] 30: ip destination(005) jeq #0x83ad0dd1 jt 6 jf 16(006) ldb [23] 23: ip protocol(007) jeq #0x11 jt 8 jf 160x11: udp(008) ldh [20] 20: ip flags (fragmenting)(009) jset #0x1fff jt 16 jf 10fragmented?(010) ldxb 4*([14]&0xf)14: ip header length (wds)(011) ldh [x + 14] udp 0: sender port(012) jeq #0x35 jt 15 jf 130x35: DNS(013) ldh [x + 16] udp 2: receiver port(014) jeq #0x35 jt 15 jf 16(015) ret #68(016) ret #0filter-expression kann sich also auf die Felder der verschiedenen Header beziehen <strong>und</strong>diese <strong>und</strong>/oder/nicht verknüpfen <strong>und</strong> auch arithmetisch prüfen. Dies ist hinter einer Vielzahlvon symbolischen Namen <strong>und</strong> relativ verwirrenden Abkürzungen versteckt:term: C-constant LiteralPROTOCOL [ offset : size ] ether ip icmp arp rarp udp tcp1, 2, oder 4 ByteslenPaketlängeproduct: term * term ...term / term ...sum: product + product ...product - product ...bit-and: sum & sum ...bit-or: bit-and | bit-and ...primitive: bit-or RELOP bit-or < >= != =Bis hierher kann man mit einer C-ähnlichen Syntax Bytes in den Protokoll-Schichten bit-weiseuntersuchen.


Als Abkürzungen, die syntaktisch ebenfalls als primitive gelten, kann man die interessantenFelder symbolisch abfragen, zum Beispiel:primitive: ether proto NAME\ip \arp \rarpip proto NAME\icmp \tcp \udpether src NAMEEthernet-Hostether dst NAMEether host NAMEether broadcastEthernet Broadcastsrc host NAMEIP-Hostdst host NAMEhost NAMEip broadcast IP Broadcast (0 oder 1)PROTOCOL dst port NUMMBER \udp \tcp Port-NummerPROTOCOL src port NUMMBERPROTOCOL port NUMMBERMan kann viel weglassen, denn Angaben werden auch von primitive zu primitive kopiert.Es gibt auch Tests für <strong>Pakete</strong>, die das lokale Netz verlassen.primitive schließlich werden verknüpft, wobei fehlende Angaben zu Feldern immer als Wildcardinterpretiert werden:negation:not primitiveprimitive( union )intersection: negation and negation ...union: intersection or intersection ...Beispieleclark 0:a:27:e2:ef:46 131.173.13.200molly 0:30:65:b0:15:da 131.173.13.209penny 0:a0:cc:20:bb:2f 131.173.13.205venus 0:60:8:26:17:79 131.173.13.210Assigned Numbers findet man zum Beispiel im RFC 1700.ARP: Beim Start von venus versucht penny, venus zu finden; venus antwortet selbst. Außerdemversucht venus, den (nicht-existenten) Router zu finden:$ tcpdump -tev host 131.173.13.210 and arptcpdump: listening on en00:a0:cc:20:bb:2f Broadcast arp 64: arp who-has venus tell 131.173.13.2050:60:8:26:17:79 0:a0:cc:20:bb:2f arp 64: arp reply venus is-at 0:60:8:26:17:790:60:8:26:17:79 Broadcast arp 64: arp who-has 131.173.13.254 tell venus24


25Führt man auf venus$ ping clarkaus, muß venus clark finden:$ tcpdump -texv host 131.173.13.210 and arptcpdump: listening on en00:60:8:26:17:79 Broadcast arp 64: arp who-has 131.173.13.200 tell venus0001 0800 0604 0001 0060 0826 1779 83ad0dd2 0000 0000 0000 83ad 0dc8 c8c8 c8c8c8c8 c8c8 c8c8 c8c8 c8c8 c8c8 c8c8 44d40d390:a:27:e2:ef:46 0:60:8:26:17:79 arp 68: arp reply 131.173.13.200 is-at0:a:27:e2:ef:460001 0800 0604 0002 000a 27e2 ef46 83ad0dc8 0060 0826 1779 83ad 0dd2 c8c8 c8c8c8c8 c8c8 c8c8 c8c8 c8c8 c8c8 c8c8 44d40d39 3457 5e14ping selbst findet in IP-<strong>Pakete</strong>n statt (ist aber ICMP):$ tcpdump -txv host 131.173.13.210 and icmptcpdump: listening on en0venus > 131.173.13.200: icmp: echo request (ttl 32, id 37376)4500 003c 9200 0000 2001 e5cc 83ad 0dd283ad 0dc8 0800 415c 0300 0900 6162 63646566 6768 696a 6b6c 6d6e 6f70 7172 73747576 7761 6263131.173.13.200 > venus: icmp: echo reply (ttl 255, id 14654)4500 003c 393e 0000 ff01 5f8e 83ad 0dc883ad 0dd2 0000 495c 0300 0900 6162 63646566 6768 696a 6b6c 6d6e 6f70 7172 73747576 7761 6263Auf molly kann man mit nslookup direkt DNS-Anfragen bearbeiten. Der DNS-Server mußerreichbar sein, sonst finden ARP-Anfragen zwecks Routing statt:$ tcpdump -txv host molly and udp port domaintcpdump: listening on en0molly.1055 > venus.53: 15645+ A? foo. (21) (ttl 64, id 2536)4500 0031 09e8 0000 4011 4dd7 83ad 0dd183ad 0dd2 041f 0035 001d 256f 3d1d 01000001 0000 0000 0000 0366 6f6f 0000 010001Macht man das auf venus, muß man völlig anders filtern:$ tcpdump -txv host 131.173.13.210 and ip broadcasttcpdump: listening on en0venus.137 > 131.173.13.255.137: udp 50 (ttl 128, id 60160)4500 004e eb00 0000 8011 2c73 83ad 0dd283ad 0dff 0089 0089 003a 8110 00c2 01100001 0000 0000 0000 2045 4745 5045 50434143 4143 4143Hier wird UDP auf Port 137 verwendet -- das ist Windows' Netbios.


SYN- <strong>und</strong> FIN-<strong>Pakete</strong> beim TCP-Verbindungsauf- <strong>und</strong> -abbau kann man beobachten, indemman die relevanten Flaggen filtert <strong>und</strong> zum Beispiel einen TELNET-Anruf (rot) tätigt:$ tcpdump -t 'host venus and tcp[13:1] & 3 != 0' &tcpdump: listening on en0$ telnet venusmolly.1143 > venus.telnet: S 3305751711:3305751711(0) win 32768 (DF) [tos 0x10]venus.telnet > molly.1143: S 3550809343:3550809343(0) ack 3305751712 win 32120 (DF)venus.1032 > molly.auth: S 3548526334:3548526334(0) win 32120 (DF)telnet> qmolly.1143 > venus.telnet: F 75:75(0) ack 122 win 33304 (DF) [tos 0x10]venus.telnet > molly.1143: F 122:122(0) ack 76 win 32120 (DF)Man sieht, daß eine Reihe von Optionen übermittelt werden <strong>und</strong> daß der TELNET-Server ohneErfolg versucht, eine Verbindung zurück zu einem Authentication-Server (RFC 931) aufzubauen,der ihm die Benutzer-Identität mitteilen soll.Das abschließende ACK des three way handshake wird durch die Filterung unterdrückt.26


272.9 etherealethereal ist ein grafisches Frontend für tcpdump, das zum Beispiel unter Linux verfügbar ist:Unter Capture kann man in einem Panel einen Filterausdruck eintragen <strong>und</strong> dann <strong>Pakete</strong>sammeln:Im Hauptfenster wählt man oben ein Paket. In der Mitte kann man mehr Informationen zu deneinzelnen Schichten aufklappen <strong>und</strong> unten sieht man die Rohdaten.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!