TINIs TCP/IP stakk og TCP/IP verktøy

Disse sidene er en del av dokumentasjonen som Ola Lie utarbeidet da han foreleste faget IP- og webteknologi ved Høgskolen i Østfold i 2005.Websidene ble revidert i 2007.

TINIs TCP/IP stakk

tiniTINIs Ethernet grensesnitt med TCP/IP ligger i ROM på mikrokontrolleren. Når vi snakker om TCP/IP (TCP/IP Protocol Suite) mener vi vanligvis en samling protokoller som er oppkalt etter to av dem, TCP og IP. TCP/IP Suite blir også brukt som en fellesbetegnelse for protokollene på applikasjonsnivå, HTTP, FTP, DNS, etc, og TCP/IP stakken (stack) er en benevnelse på lagene som datapakkene passerer gjennom på veien mellom klient og tjener program.

Vi vil kort beskrive lagene under Java Networking API.

  • Porter (TCP and UDP Port Numbers) er tatt i bruk for å kunne sende meldinger til forskjellige applikasjoner som kjører på samme maskin (og IP adresse). Mer info: Wikipedia og IANA
  • Socket er ett endepunkt på en toveis kommunikasjonsforbindelse mellom to programmer og består av en IP adresse og et portnummer, som identifiserer tjenesten. Mer info: Wikipedia og IETF RFC 147
  • TCP (Transport Control Protocol) gir pålitelig overføring av meldinger etter at det er etablert en sesjon mellom sender og mottager. Mer info: Wikipedia og IETF RFC 793
  • UDP (User Datagram Protocol) er en forbindelsesuavhengig (connectionless) protokoll som sender meldinger (datagrams) med håp om at de kommer frem til mottakeren. Mer info: Wikipedia og IETF RFC 768
  • IP (Internet Protocol) ruter meldinger via nettverk. Mer info: Wikipedia og IETF RFC 791
  • ICMP (Internet Control Message Protocol) for feilmeldinger og kontrollbeskjeder. ping er ICMP type 8 (Echo Request). Mer info: Wikipedia og IETF RFC 792
  • IGMP (Internet Group Management Protocol) blir brukt til multicasting, som vil si at en kan sende en melding til mange mottagere. Mer info: Wikipedia, IETF RFC 966 og IETF RFC 988
  • ARP (Address Resolution Protocol) finner MAC-adressen når IP-adressem er kjent. Arp -a fra kommandolinja viser adresser som er midlertidig lagret (i cache). Mer info: Wikipedia og IETF RFC 826
  • Ethernet (IEEE 802.3 CSMA/CD) lokalnett. Mer info: Wikipedia og IEEE

TINIs TCP/IP verktøy

Så lenge vi benytter kommando skallet slush, har vi tilgjengelig noen TCP/IP verktøy, som vi kjenner igjen fra unix og windows plattformer. Programmene er ikke like slagkraftig som sine søsken, men er likevel nyttige når vi skal feilsøke problemer.

ipconfig

ipconfig

Vi bruker ipconfig til å sette opp TCP/IP nettverksparameterne. Nedenfor vises valgmulighetene på TINI (ipconfig /?)

ipconfig [options]
Configure or display the network settings.
  Options   Description
  [-a IP -m mask]   Set IPv4 address and subnet mask
  [-n domainname]   Set domain name
  [-g IP]   Set gateway address
  [-p IP]   Set primary DNS address
  [-s IP]   Set secondary DNS address
  [-t dnstimeout]   Set DNS timeout (set to 0 for backoff/retry)
  [-d]   Use DHCP to lease an IP address
  [-r]   Release currently held DHCP IP address
  [-x]   Show all Interface data
  [-h mailhost]   Set mailhost
  [-C]   Commit current network configuration to flash
  [-D]   Disable restoration of configuration from flash
  [-f]   Don't prompt for confirmation

Bruken av IP address, subnet mask, gateway address og DNS address forutsettes kjent. Hvis ikke, se for eksempel TCP/IP basics av Johannes Helmig

TINI har også støtte for DHCP, som vil si at systemet kan settes opp til å motta TCP/IP konfigurasjonen automatisk fra en DHCP tjener. Skal du konfigurere en DHCP tjener, må du også kjenne til de 4 parameterne nevnt ovenfor.

De valgte parameterne lagres i systemområdet i SRAM, og kan bli slettet ved ulike hendelser:

  • Batteriet går flatt eller fjernes
  • Reboot -a (Clear heap and system memory on reboot)
  • Andre uforutsette årsaker

ipconfig -C lagrer den gjeldende konfigurasjonen i flash ROM. Denne konfigurasjonen vil bli brukt dersom det oppdages forskjeller mellom verdiene i SRAM og flash ROM. Vi kan bare lagre verdiene i flash ROM én gang. Ønsker vi å endre på dem, må vi laste opp innholdet av flash ROM (.tbin filene) på nytt.

Et system som settes i drift med en annen primær java applikasjon en slush, må ha en mulighet til å konfigurere parameterne fra applikasjonen. Det kan vi gjøre med metoder fra klassebiblioteket com.dalsemi.tininet, for eksempel:

  Method   Summary
  setIPAddress(byte[ ] localIP   Sets the IP address of the default interface.
  setSubnetMask(byte[ ] subnetMask)   Sets the subnet mask of the default interface.
  setGatewayIP(byte[ ] gateway)   Sets the gateway address for the default interface.
  setDomainname(java.lang.String domain)   Sets the domain name to the given String.

ping

ping

ping kanskje det mest grunnleggende tcp/ip verktøyet. Kommandoen benytter en protokoll funksjon som tester en maskins mulighet til å kommunisere med en annen maskin. Programmet verifiserer at datamaskinen i den andre enden og nettverket mellom datamaskinene virker. ping bruker Internet Control Message Protocol (ICMP), sender en echo request (Type 8) og venter på et echo reply (Type 0). Se

På grunn av misbruk har mange maskiner på internett sluttet å svare på ping, men vi kan benytte ping i det lokale nettverket, og ping er et nyttig diagnoseverktøy:

  1. ping 127.0.0.1 for å bekrefte at TCP/IP satt opp riktig på maskinen
  2. ping din egen IP adresse for å sjekke at du kan kommunisere på nettverket
  3. ping default gateway for å verifisere at ruteren fungerer
  4. ping en vertsmaskin på internett

ping /? fra Ledetekst viser de ulike kommando alternativene.

Ping er egentlig ikke en del av applikasjonslaget, men hører til på nettverkslaget. Det er imidlertid mulig å nå TINIs ICMP modul fra java programmer. Vår TINI applikasjon har dermed mulighet til å sjekke om en bestemt tjeneste kjører på en vertsmaskin eller om vertsmaskinen kan nås i det hele tatt.

Metoden pingNode er statisk og hører til klassen Ping som ligger i pakken com.dalsemi.tininet.icmp og befinner seg i filen tiniclasses.jar:

ping

ping

Ønsker du å kjøre programmet ovenfor, kan du laste ned filen Pinger.zip (Pinger.java og build.xml). Følg framgangsmåten som er beskrevet i Ant og TiniAnt.

arp

arp

arp viser tabellen som oversetter IP (internet) adresser til MAC (ethernet) adresser og som blir brukt av arp, address resolution protocol. Når vi kjenner de første seks tallene i MAC (Media Access Control) adressen, kan vi finne ut hvem som er leverandør av nettverkskortet. Se Vendor/Ethernet MAC Address Lookup and Search eller IEEEs Organizationally Unique Identifier (OUI) Public Listing

MAC Address

Prefix Vendor
000C6E ASUSTEK COMPUTER INC.
000943 Cisco Systems

nslookup

nslookup

nslookup er et program for å spørre internetts DNS (Domain Name System) tjenere om IP adressen til et domene navn eller omvendt.

netstat

netstat

netstat viser alle tcp forbindelser. Eksempelet over viser en aktiv ftp (21) og telnet (23) forbindelse samtidig som TINI lytter på port 80 (HTTPServer i HelloWeb applikasjonen).

hostname

hostname

hostname viser eller setter hostname og domene navn.