ping
TDAT2004 Datakommunikasjon med nettverksprogrammering. Oppgave nummer 51, omhandler hjelpeprogrammet ping.
Skrevet av Olav Dahl Solstad og Tor Andreas Aasebø.
1. Innledning
Ping er et hjelpeprogram som brukes for å teste hvor godt man kan nå en tjener på et IP-nettverk. Dette foregår ved å sende pakker til tjeneren og vente på svar, og blir målt av tiden fra pakken blir sendt til svar er mottatt. Pakkene som sendes er av type ICMP og i retur får man ICMP Echo Reply. Typisk gies det informasjon om eventueller feil, packet loss, og en statistisk oppsumering av minimum- maksimum- og gjennomsnittelig-tid samt standardavik til snittet.
2. Ønsket funksjonalitet
Hjelpeprogrammet ble skrevet i 1983 for bruk i feilsøking av IP-nettverk. Det er da nyttig å få mest mulig relevant informasjon når man prøver å koble til en tjener, og ved bruk av ping får man informasjon om feil, pakketap og statistikk som beskriver tiden det tar fra ping sender en forespørsel til tjeneren og får svar.
3. Virkemåte
Ping sender en ICMP-pakke med data til en tjener og venter på at tjeneren sender en ICMP-pakke med samme data tilbake. Dette gjøres gjerne flere ganger slik at man kan måle tap av pakker og svartid. ICPM ble definert i RFC 792 og illustreres under:
Figur 1: Illustrasjon av en ICMP-pakke hentet fra Wikipedia
For ping er det mest sentralt å se på ICMP headeren og dataene som sendes.
Echo request
Når ping kjøres sendes echo request til tjeneren som en ICMP-melding som beskrevet under:
Type = 8 (8 bit) | Kode = 0 (8 bit) | Header sjekksum (16 bit) |
---|---|---|
Header (ID 16 bit og sekvensnummer 16 bit) | ||
Data (32 bit) |
Tabell 1: Oppbygging av en Echo Request
Dataene som sendes er som regel fylt med ASCII-tegn.
Echo reply
Når tjeneren mottar en echo request er den pålagt å svare med ICMP-meldingen echo reply som beskrevet under der data som sendes er de samme som ble mottatt i echo request:
Type = 0 (8 bit) | Kode = 0 (8 bit) | Header sjekksum (16 bit) |
---|---|---|
Header (ID 16 bit og sekvensnummer 16 bit) | ||
Data (32 bit) |
Tabell 2: Oppbygging av en Echo Reply
Resultat
I de fleste implementasjonene av ping vil prosessen med å sende en echo request og vente på svar i form av et echo reply gjøres flere ganger. Resultatene blir vist til brukeren som vist under (ping i Windows):
Pinging outlook.com [40.97.156.114] with 32 bytes of data: Ping statistics for 40.97.156.114: |
---|
Figur 2: Eksempel på bruk av ping
Feilmeldinger
Dersom ping ikke får svar fra tjeneren vil mange implementasjoner ikke vise noe resultat, mens andre vil skrive ut varsler om at forespørselen har brukt for lang tid.
Dersom man får svar men noe går feil vil man få tilbake en feilmelding/informasjon som en ICMP-pakke som vist i Tabell 3. Pakke inneholder navn på de ulike pakkene definert i RFC 792, Type beskriver "Type of Message" i ICMP-headeren og Kode beskriver "Code" i ICMP-headeren.
Pakke | Type | Koder |
---|---|---|
Destination Unreachable Message (Tjener kan ikke nåes) | 3 | 0 = net unreachable 1 = host unreachable 2 = protocol unreachable 3 = port unreachable 4 = fragmentation needed and DF set 5 = source route failed |
Time Exceeded Message (Tidsgrense overskredet) | 11 | 0 = time to live exceeded in transit 1 = fragment reassembly time exceeded |
Parameter Problem Message (Feil i Header) | 12 | 0 = pointer indicates the error |
Source Quench Message (Ikke nok ressurser til å behandle forespørsel) | 4 | 0 |
Redirect Message (Gateway gir beskjed om at den har omdirigert pakken) | 5 | 0 = Redirect datagrams for the Network 1 = Redirect datagrams for the Host 2 = Redirect datagrams for the Type of Service and Network 3 = Redirect datagrams for the Type of Service and Host |
Tabell 3: ICMP-pakker som indikerer feil
4. Referanser
https://tools.ietf.org/html/rfc792
https://en.wikipedia.org/wiki/Ping_(networking_utility)