7. Protokollen



7.1 TCP/IP



Som vi redan känner så kallas protokollet som anänds på Internet för TCP/IP(Transmission Control Protocol/Internet Protocol). Men TCP/IP är egentligen ett samlingsnamn för flera olika protokoll som används, därför är det mera riktigt att säga TCP/IP-stacken. Att det blivit just TCP/IP beror troligen på att dessa två är de mest kända protokollen. Vad vi ska göra nu är söka förstå de viktigaste delarna av TCP/IP stacken och vad de olika protokolen används till. TCP/IP-stacken har fem lager i jämförelse med OSI-modellens sju lager:

TCP/IP
OSI-modellen
Applikation
Applikation, Presentation
TCP/UDP
Session, Transport
IP/ICMP/ARP/RARP
Nätverk
Datalänk
Datalänk
Fysiska
Fysiska


Det vi är intresserade av just nu är Transport och Nätverkslagret eftersom det är där vi har de viktigaste protokollen i TCP/IP-stacken.

7.2 Nätverkslagret



Här finner vi alltså protokollen IP, ICMP, ARP och RARP. Nu ska vi titta lite närmare på dom för att se vilken/vilka delar av nätverkskommunikationen dom har hand om.

7.2.1 IP



Vi börjar nedifrån och arbetar oss uppåt, så vi börjar med IP, eller Internet Protocol. IP-protokollet arbetar på nivå tre enligt OSI-modellen. Vad innebär det? Kommer du ihåg vilken hårdvara i nätverket vi återfann där och/eller vad nivå tre hade för uppgift i OSI-modellen? På nivå tre hade vi ju routern och enligt OSI-modellen sköttes bl.a. adressering och vägval här. Och det är det IP-protokollet har hand om. Datapaketen i IP-protokollet kallas datagram. IP-protokollet har ingen egen säkerhetskontroll, eftersom varje datagram har en egen IP-header med både källadress och destinationsadress, vilket betyder att varje datagram kan ta sin egen väg utan att bry sig om andra datagram. Det betyder också att datagrammen kan komma i fel ordning, försvinna eller komma dubbelt. IP-protokollet litar på att andra protokoll högre upp i OSI-modellen skall ordna säkerheten. En IP-header är vanligtvis på 20 byte, men kan i vissa fall vara ända upp till 60 bytes.

IP-headern

Som vi ser där använder IP-protokollet sex fält om vardera 32 bitar när alla fält används.

Vad betyder dom olika delarna av headern då?

Versionfältet Talar om vilken version det är av IP-protokollet. Det behövs för att mottagaren skall kunna avkoda resten av informationen på rätt sätt. Att det finns ett sånt här versionsfält gör också att man kan byta protokoll under drift. Just nu är det version fyra av IP-protokollet som används.

Dataoffsetfältet Talar om hur lång IP-headern är så att IP-protokollet vet när headern slutar och datan börjar.

Tjänstetypsfältet Talar om vilken tjänst som anropas. Kan användas för att sätta olika prioriteter, t.ex. kanske en viss tjänst vill ha pålitilighet och felkorrigering medan en annan vill ha snabbheten istället. Men i verkligheten är det så att i princip alla protokoll behandlas med samma prioritet, oavsett vad det här fältet säger.

Totallängdsfältet Talar om hur långt hela datagrammet är, alltså både headern och datan. Det här fältet är på 16 bitar vilket begränsar storleken på datagramen till 65.535 bytes.

Identifikationsfältet Talar om vilket datagram ett del-datagram tillhör. För att sedan sätta ihop rätt delar av ett datagram med varandra så används det här fältet.(Fragmenteringen kommer lite senare.)

Flaggfältet Ett trebitars fält med tre olika flaggor. Den första är reserverad, den andra kallas för DF vilket står för Dont Fragment. Här tvingar man alltså ett datagram att bevaras intakt hela vägen. Om en viss nod inte kan göra det så får datagramet antingen ta en annan väg eller kastas bort. Det tredje fältet kallas för MF som står för More Fragments, dvs. det kommer flera fragment som tillhör samma sammanhängande datagram.

Fragmentoffset Talar om var i ett datagram som ett delpaket skall vara. Det kan vara max 8192 fragmenterade block då det här fältet är på 13 bitar.

Livslängdfältet Talar om hur många sekunder ett paket skall leva. Varför har man den här möjligheten? Därför att ett paket inte skall kunna cirkulera runt och ta upp bandbredd på nätet under obegränsad tid. Tänk dig själv om alla paket som skickades och inte nådde sin mottagare skulle cirkulera runt på nätet, då skulle det gå rejält slött. Maxvärde för livslängden är 255 sekunder.

Protokollfältet Talar om vilket protokoll som skall användas på nästa nivå (transportnivån), t.ex. TCP.

Header kontrollsummafältet Används för att kontrollera att headern kommit fram oskadad genom en checksummealgoritm.

Källadress- och destinationsadress- fälten 32 bitars adresser av sändare respektive motttagare. Adressen delas upp i fyra fält om vardera 8 bitar, vilket betyder att varje adress fält kan anta värden mellan0-255. Så en IP-adress ser ut exempelvis så här 192.168.10.1

Optionfältet Har flera olika användningsområden. Kan användas för att prova nya funktioner och protokoll, för framtida bruk eller för t.ex. säkerhet, felrapportering och felsökning.

Optionsklasser

Här är de optionsklasser och värden som används nu. Det är inte så stor idé att översätta beskrivningen av vad dom gör, de gör sig bäst på engelska. Men som vi ser så har vi exempelvis säkerhet, tidsstämpling och felsökning.

IP-protokollet väljer alltså rätt väg, klarar av att hantera olika långa datagram och kan skicka data i olika media.

7.2.2 Fragmentering



Eftersom Internet består av en massa olika delnät som inte är standardiserade på något visst sätt så kan storleken på datagramen behöva varieras, eftersom alla nät inte klarar av lika stora maxstorlekar. Hur gör man det? Man använder sig av något som kallas fragmentering, dvs. man delar upp ett datagram i mindre deldatagram. Det här kan göras på två sätt, transparent eller icke-transparent. Den transparenta varianten defragmenterar datagrammen mellan varje nod, vilket betyder att alla datagram måste passera samma gateway vilket kan sämka överföringshastigheten. Det kan också bli problem med om deldatagram försvinner och man inte kan återskapa det fullständiga datagrammet. Den icke-transparenta varianten gör varje deldatagram till ett eget datagram med egen header och så sätts alla ihop vid slutstationen. Fördelen med denna metod är att datagrammen kan ta olika vägar, men å andra sidan blir ju paketen lite större eftersom alla har varsin IP-header.

7.2.3 ICMP



ICMP står för Internet Control Message Protocol. ICMP används för olika typer av felrapportering, t.ex. om det inte går att nå en adress, eller om livslängden för datagrammet gått ut, för att eka meddelanden och för tidsförfrågningar. Om det är en felrapportering som komer så har ICMP meddelandet med sig de 64 första bitarna, från datagrammet som det var fel på, i datafältet. PING(Packet InterNet Groper), som används för att kolla om man kan nå en host och för att kontrollera hur lång tid det tar, använder ICMP. PING är ett mycket bra verktyg när man bygger upp ett nätverk då man på ett enkelt sätt kan kontrollera om man kan nå andra delar av nätverket samt hur lång tid det tar.

ICMP-headern ser ut ungefär så här:

ICMP headern

Typfältet Kan sättas till olika värden, t.ex.

0 Eko svar(vid användning av PING
3 Målet går inte att nå
11 Livlängden har gått ut
12 Parameter problem/fel
13 Tidsstämpel förfrågning

Kodfältet Här specifieras ännu mera precist vilket fel det gäller.

Typfältsvärde
Kodfältsvärde
3
0 Nätet ej nåbart
 
1 Server ej nåbar
 
2 Protokoll ej nåbart
 
3 Porten ej nåbar
 
4 Fragmentering nödvändig, men DF flaggan är satt
 
5 Källkoppling misslyckad (!?)
 
 
11
0 Livslängden gick ut under överföring
 
1 Tid för hopsättning av fragment överskriden


Kontrollsummefältet Precis samma teknik som i IP-headern, dvs. för kontroll av att headernkommit fram oskadad/oförändrad. Kontrollerar endast headern, inte datan

Parameterfältet Används när det finns ett syntaxfel i IP-headern. När ett problem har upptäckts så innehåller parameterfältet en pekare till den byte i IP-headern som orsakat problemet.

7.2.4 ARP/RARP



ARP står för Address Resolution Protocol och RARP för Reversed Address Resolution Protocol. ARP används för att översätta internetadresser till hårdvaruadresser, RARP gör det motsatta. Vad har ARP för funktion? När en förbindelse skall upprättas i ett nät som stöder ARP så kollar den som vill upprätta förbindelsen i sin ARP-lista, eller ARP-cache.

ARP cache

Har han en ARP-länk där så använder han den, annars får han skicka ut en ARP-request där man ber den man kontaktar att skicka ett ARP-paket med dess hårdvaruadress eller MAC-adress, som vi tidigare sa så är det den som gör varje dator unik i nätverket. När man gjort detta så skapas en ARP-länk. Om man skall gå utanför sitt eget delnät så läggs en ARP-länk upp för det andra delnätets gateway. Man kan även lägga upp en s.k. route. Det man gör då är att lägga upp "genvägar" till andra delnäts gateways, men endast deras IP-adresser, i en lista. På så sätt behöver inte en massa ARP-länkar leda till en och samma gateway utan vår egen gateway kan med ledning av IP-adressen till en annan host skicka paketen till rätt gateway.

Så här ser en ARP-request ut:

ARp request

Hårdvarutypsfältet Identifierar hårdvaru interfacet.

Exempel:

Hårdvaruinterface

Protokolltypen Definierar vilket protokoll som används.

Exempel:

Protokolltyper

Hårdvaruadress längd Längden på varje hårdvaruadress i datagrammet i bytes. Det här är ett 8-bitars fält, vilket innebär att adressen kan anta värden från 0-255.

Protokolladress längd Samma som för hårdvaru adress längdsfältet, men för protokollet istället.

Processkod Talar om om det är en ARP-request eller en ARP-reply. Om det är en ARP-request så är det en etta och om det är en ARP-reply så är det en 2.

Avsändarens hårdvaruadress Är precis som det låter den avsändarens hårdvaruadress

Avsändarens IP-adress Precis vad det låter som, avsändarens IP-adress.

Mottagarens hårdvaruadress Mottagarens hårdvaruadress.

Mottagarens IP-adress Mottagarens IP-adress.

7.3 Transportnivån



Här finner vi protokoll som TCP och UDP. Som vi vet är det här nivå 4 i OSI-modellen. Här finns det en typ av nätklassificering definierad.

Nätklassning

Vad kan man med tanke på denna klassificering säga om Internet? Internet är ju ett jättelikt WAN, och det finns mycket som kan orsaka fel, alltså är det ett klass B eller C nät. Om man vill ha s.k. säkra transaktioner, ex. banker, så skall man konstruera systemen för lägsta säkerhet, dvs. klass C-nät.

7.3.1 TCP



TCP står för Transmission Control Protocol. TCP är ett förbindelsebaserat protokoll vilket betyder att det upprättar en förbindelse mellan två hostar och behåller den tills den är klar. TCP ser till att protokollen en skickar kommer fram med s.k. kvittenser. Använder sig av IP-protokollet.

TCP-protokollet arbetar på nivå fyra(transport) i OSI-modellen. Paketen på transportnivån kallas för Transport Protocol Data Unit(TPDU). Det finns olika typer av TPDU:er t.ex. begäran om uppkoppling, nedkoppling eller dataöverföring. Som du kanske kommer ihåg så var TCP inte det ursprungliga protokollet, utan det hette NCP. TCP utvecklades för att täcka upp NCPs brister som bland annat hade att göra med säkerhet och hantering av stora trafikvolymer. TCP utvecklades t.ex. på ett sånt sätt att det skulle klara att arbeta på en osäker grund, dvs. ett stort nät med många olika vägar och olika hastigheter.

Vi börjar med att titta på TCP-headern.

TCP-headern

Källportfältet Källporten är ett 16 bitars tal som visar från vilken port en TPDU skickas, alltså från vilken applikation datan skickas.

Mottagarportfältet Ett 16 bitars tal som talar om vart en TPDU ska hos mottagaren, alltså till vilken applikation datan ska.

Sekvensnummerfältet Talar om vilken TPDU det här är i ordningen.

Kvittensnummerfältet Talar om vilken TPDU som skall kvitteras med denna sändning.

Headerlängdfältet Talar om hur lång headern är och pekar på så sätt även ut var datan börjar.

URG-fältet Urgent. En flagga som kan sättas om det är bråttom. Då skall detta paket behandlas före andra, vanliga paket.

ACK-fältet Acknowledge. Talar om att det här skall användas som kvittenspaket. Både för kontaktetablering och datatrafik.

EOM-fältet End Of Message. Slut på meddelandet.

RST-fältet Reset. För att starta om en förbindelse.

SYN-fältet För att etablera en förbindelse. Den host som vill ha förbindelsen sätter SYN till ett och ACK till noll och skickar en TBPU. Mottagaren svarar med en TBPU med SYN ett och ACK ett.

FIN-fältet För att avsluta en förbindelse.

Fönsterfältet Hanterar flödeskontrollen. Talar om hur många bytes (16 bitar, dvs. max 65.535 bytes) som kan skickas utan kvittens.

Checksummefältet Feldetektering av enklare modell.

Brådskande pekare talar om var den brådskande informationen finns när URG biten är satt.

Optionfältet T.ex. när hostarna förhandlar om bufferstorleken.

Datafältet Max 64Kb data.

TCP-protokollet erbjuder alltså en säker överföring från punkt till punkt och till rätt applikation. Klarar av att dela upp informationen, fragmentera, och defragmentera information. TCP är väldigt integrerat med IP så det är nästan omöjligt att skilja dom åt, därav det välkända TCP/IP.

7.3.2 UDP



UDP står för User Datagram Protocol. Använder också IP-protokollet, men UDP struntar i om datan den skickar kommer fram, å andra sidan är den snabbare än TCP. Vad använder man det till då? I applikationer där snabbheten är viktigare än säkerheten, t.ex. videokonferenser, eller applikationer som själva hanterar omsändning. Vi tittar på UDP-protokollets header.

UDP-header

Källportfältet Om man vill så kan man specifiera från vilken port datan kommer, men det är bara om någon applikation vill och kan ta emot kvittensen.

Mottagarportfältet Portnumret till mottagarapplikationen.

Längdfältet Talar om hur långt hela paketet är inklusive informationen.

Checksummefältet Man kan ha med en 16 bitars kontrollsumma, men UDP hanterar inte den.

Det är nästan så man skulle klara sig utan UDP och köra med bara IP, men då skulle man inte kunna adressera datan till en applikation och inte heller ha checksumman.

Föregående kapitel Innehållsförteckning Nästa kapitel

Copyright Andreas Höglund © 1999.