<URL:http://www.docs.uu.se/~perg/course/datakom/dv96/serviceuppg.html>

Uppgift i Datakommunikation , HT96


Nätverk och nättjänster - bakgrund

På de flesta nätverk för överföring av information finns tjänster av olika slag. En grundläggande tjänst på alla är att kunna överföra information från en plats i nätet till en annan. De två mest kända nätverken för överföring av information är, Internet-boomen till trots, postens och televerkens nät.

I postens nät är den grundläggande tjänsten att förmedla ett vanligt brev till en mottagare, och i televerkens att förbinda två abonnenter med varandra så att de kan tala med varandra. Ovanpå dessa bastjänster tillhandahålls vissa tjänster i nätet. I fallet med posten kan man t.ex rekommendera brev, skicka paket mot postförskott och liknande. I telenätet finns på liknande sätt vissa tjänster som t.ex larm (90000), nummerupplysning och betalsamtal.

Dessa tjänster är välkända tjänster, dvs de finns i alla riktnummerområden och postkontor, och alltid på samma nummer eller under samma namn. Självklart finns det många fler tjänster man kan nå via telefon eller post, men då är de ofta specifika för en viss abonnent i ett visst riktnummer-område eller ett visst företags postadress.

Internet

Internet är på många sätt likt telefon- och postnäten. Varje maskin har en unik adress. Detta kallas för ett IP-nummer och pekar ut just denna maskin, ungefär som ett telefon- eller postnummer. Om man vill ha kontakt med en viss maskin, måste man veta dess IP-nummer. Dock räcker inte detta, för en maskin kan hantera många olika mottagar. Man talar om vilken mottagar man vill ha kontakt med genom att ange det portnummer som mottagaren finns på.

Adresseringen på Internet skulle kunna ses som gamla tiders företagsväxlar. IP-numret motsvaras av numret till företagets växel, medans portnumret är en individuell anställds anknytning. När man vill prata med någon ringer man först till växeln, begär sendan en viss anknytning. Därefter kan man, om det svarar, prata med den man sökte. I fallet Intenet måste man dock alltid veta vilken anknytning den man söker finns på - man kan inte fråga i växeln.

Precis som andra nät så har Internet många tjänster definierade. Eftersom IP-nummer (t.ex 130.238.8.19) är svårare att komma ihåg än något mer uttalbart som ``Kay.DoCS.UU.SE'', så finns en tjänst som liknar nummer-upplysningen med vars hjälp man kan översätta mellan namn och nummer. (OBS, i exemplet ovan är det inte så att t.ex 130 betyder Kay, 238 betyder DoCS osv, utan alla fyra siffrorna översätts till hela namnet. Faktum är att ``Kay.DoCS.UU.SE'' också har IP-numret 130.238.11.25.)

Välkända tjänster

För att sådana välkända tjänster skall vara lätta att hitta, har den ett speciellt portnummer reserverat. Precis som att tjänsten nummerupplysning i telefonnätet har numret 07975, finns Internet-tjänsten som översätter mellan namn och IP-nummer på port nummer 42.

Om kontaktar en maskin på portnummer 42, så kan man förvänta sig att om man får svar, så är det en namn/nummer-översättare som finns i andra ändan. Det finns dock inget krav på att alla maskiner skall tillhandahålla alla välkända tjänster. Om de tillhandahåller dem, så ``ska'' de dock finnas på den förutbestämda porten.

System som kör operativsystemet UNIX och som är inkopplade på Internet brukar ha en lista över de tjänster som systemet känner till. Att en tjänst är listad här brukar också betyda att den tjänsten erbjuds på någon av de lokala maskinerna.

För att titta på listan över kända tjänster på våra system, använder man kommandot ypcat services. Listan som kommer ut är inte sorterad, och ganska lång. Vill man ha den sorterad i bokstavsordning och visad en sida i taget skriver man

ypcat services | sort | more
Vill man se listan i portnummer-ordning skriver man istället
ypcat services | sort -n +1 | more

Somliga tjänster i denna lista är välkända, somliga är bara registrerade och vissa är lokala tjänster. De välkända tjänsterna är kanske de intressantaste, då de är mycket spridda. Under UNIX kan en vanlig användare inte öppna portar i det område (1-1024) som de välkända tjänsterna använder.

(Den intresserade kan konsultera den definitiva listan över tilldelade portnummer. Denna lista täcker alla tjänster som kan kalla sig välkända eller registrerade.)

Fälten i vår lokala lista ser ut som följer:

<namn>	<portnummer>/<protokoll>	<alt. namn1> ... <alt. namn X>
-- 1 -	---- 2 -----/---- 3 ----	-------------- 4 -------------
Fälten betyder:
  1. Det primära namnet på tjänsten, dvs det namn man normalt använder när man pratar om den.
  2. Portnumret som denna tjänst finns på. Dvs, den port man skall kontakta för att nå tjänsten.
  3. Det underliggande nät-protokoll som tjänsten använder.
  4. De sekundära namnen på tjänsten. Ibland kan det finnas alternativa namn på tjänster, oftast av historiska skäl. Dessa listas här.

När man pratar om namnen på en tjänst så tittar man alltså på innehållet i fält 1 och 4.

Listan kan (och bör) även innehålla kommentarer. All text från och med tecknet "#" till slutet av en rad är en kommentar.

Bland de välkända tjänsterna finns även kraftfulla tjänster som FTP (filöverföring), HTTP (som man använder för att överföra WWW-sidor), SMTP (elektronisk post) såväl som enklare tjänster som FINGER (se vilka som är inloggade på en maskin och få information om dem) och TELNET (logga in på en annan maskin).

Tjänster och program

I de allra flesta fall kontaktar man inte tjänster direkt, utan använder något program som sköter kommunikationen med tjänsten. Till exempel kan vi ta tjänsten FINGER. För att ta reda på vilken information som en finger-tjänst på en maskin lämnar ut, använder vi kommandot finger som kopplar upp sig till den specifierade maskinen och "talar" med finger-tjänsten på denna maskin. Prova att köra följande kommando:
finger @Zeke.Update.UU.SE

Detta kommer ge information om vilka användare som för tillfället är inloggade på Zeke.Update.UU.SE. Prova även följande:

finger -l root@Zeke.Update.UU.SE

Detta kommer koppla upp en förbindelse till maskinen Zeke.Update.UU.SE och där fråga efter information om användaren root.

Titta nu efter i listan över tjänster, och ta i denna reda på vilken port som tjänsten finger finns på. Undersök även vilka namn på denna tjänst som finns.

Fråga 1: På vilken port fanns FINGER? Fanns några alternativa namn för tjänsten? (Om ja, vilka?)

Programmet telnet

Programmet telnet används för att prata med tjänsten TELNET. Man kan t.ex skriva:

telnet sol2.docs.uu.se
för att koppla sig till maskinen sol2.docs.uu.se, för att sedan logga in. Detta kan man göra från praktiskt taget vilken maskin som helst på Internet.

Men programmet telnet kan också användas för att kontakta andra (text-baserade) tjänster. Man måste då specifiera portnumret på den tjänst man vill kontakta efter namnet på maskinen. Om man vill kontakta tjänsten som finns på port 23 på sol2.docs.uu.se, skulle man skriva

telnet sol2.docs.uu.se 23
Port 23 råkar dock vara den port som tjänsten TELNET finns på, så i detta exempel är det ingen skillnad mot att skriva telnet sol2.docs.uu.se enbart.

Prova nu att använda programmet telnet för att koppla dig till tjänsten FINGER på maskinen Zeke.Update.UU.SE. Portnumret skall du ju redan ha tagit reda på ovan. När du kopplat upp dig borde det se ut ungefär så här:

Trying 130.238.11.14...
Connected to zeke.update.uu.se.
Escape character is '^]'.
Tjänsten FINGER presenterar sig inte, utan väntar på att du skall skriva vem du vill ha information om. Skriv root och tryck Return. Du kommer då att få samma svar som när du gjorde finger -l root@Zeke.Update.UU.SE tidigare, och sedan avbryts kontakten.

Fråga 2: Vad händer om du kontaktar FINGER-tjänsten på Zeke.Update.UU.SE igen, man inte skriver något namn, utan trycker Return direkt?

Protokollet för tjänsten FINGER är uppenbarligen ganska enkelt. Den intresserade läsaren kan läsa om det kompletta protokollet i RFC1288.

SMTP - elektronisk post

Vi kommer i denna del att utnyttja en främmande SMTP-server. Vår överenskommelse med den ansvarige för denna server säger att vi får experimentera lite med den, men att missbruk av den inte kommer tolereras. All trafik till servern kommer att loggas med användarnamn och maskiner.

Även om det går att "förfalska" brev när man pratar direkt med en SMTP-server uppmanar vi er att INTE försöka göra detta. Universitetet har redan fått dålig publicitet sedan en student skickat brev till olika mottagare i bl.a statsministerns namn...

Elektronisk post är en lite mer komplicerad tjänst. Det finns en hel uppsjö av program för att läsa och skicka elektronisk post. Alla dessa program har det gemensamt att om brevet inte är lokalt, så kommer det att vidarebefordras med hjälp av SMTP-protokollet (Simple Mail Transfer Protocol) genom att mottagar-maskinen (eller någon maskin som ansvarar för att vidarebefordra post till denna) anropas på SMTP-porten, och brevet överförs.

Protokollet SMTP kan man ganska enkelt ``prata'' själv, det finns ett dussin kommandon, och flera av dem behöver man inte använda om man inte vill. En del av kommandona är mycket praktiska om man t.ex undrar över om en adress man fått är korrekt.

Definitionen av SMTP-protokollet kan du läsa mer om i RFC 821.

Slå upp portnumret för SMTP i listan och kontakta tjänsten på maskinen Mail.Update.UU.SE precis som du tidigare kontaktade FINGER-tjänsten.

SMTP-servern kommer att presentera sig, och sedan vänta på kommandon. Vi skall använda de grundläggande SMTP-kommandona. De kommandon som finns är:
Kommandon till SMTP
Kommando Beskrivning
HELP <kommando> Visar hjälp om <kommando>, eller vilka kommandon som finns, om du inte anger något kommando.
HELO <ditt domännamn> Presentera dig.
VRFY <namn> Se ifall <namn> finns. Om du istället för ett namn ger en komplett adress, får du bara adressen tillbaka, eftersom denna maskin bara vet saker om sina egna användare.
EXPN <namn> Som VRFY, men visar även hur brev till denna adress hanteras, t.ex om de eftersänds.
VERB Talar om att du vill veta så mycket som möjligt om vad SMTP-klienten gör.
QUIT Avslutar din session.
RSET Nollställ din session, dvs SMTP-klienten glömmer allt du sagt hittills om mottagare och avsändare.
MAIL FROM: <din adress> Tala om vem som skickar brevet.
RCPT TO: <mottagare> Tala om vem som skall ha brevet.
DATA Texten som följer på raderna efter detta kommando är själva brevet, avsluta med en rad som bara består av en punkt, dvs ``.''.

Svar från servern

Svar från SMTP-servern består normalt av tre siffror följda av text. En SMTP-server bryr sig normalt inte så mycket om texten, utan för servern är den tresiffriga koden det viktiga. Om texten i ett svar från serven inte får plats på en rad, sätts ett minustecken omedelbart efter de tre siffrorna. Detta betyder att svaret fortsätter på nästa rad.
De viktigaste svaren från en SMTP-server
Kod Beskrivning
050 Ett debug-meddelande, dvs ett meddelande som säger något om hur servern fungerar internt.
(Standarden definierar inte denna meddelande-kod; det är ett illegalt svar, men som sådant kommer det att ignoreras av en SMTP-server.)
214 Hjälpmeddelande till användare. (Oftast som svar på kommandot HELP.)
220 Klar att ta emot kommandon. (Startup-meddelande man får när man kopplar upp sig, normalt.)
221 Avslutar sessionen och stänger förbindelsen. (Det normala svaret på ett QUIT-kommando.)
250 OK - operationen lyckades.
354 Mata in texten i brevet.
Felkoder från SMTP
500 Syntax error - kommandot du matade in finns inte.
501 Syntax error - parametrarna till kommandot felaktiga.
503 Felaktig sekvens av kommandon.
SMTP är kinkigt när det gäller ordningen på kommandon!
550
551
552
553
554
Ett fel uppstod vid leverans av brevet.
Beror oftast på att mottagaren inte finns, eller inte kan ta emot brev.

Att presentera sig

Det första man bör göra när man pratar med någon är att presentera sig. Kommandot för att göra detta är ``HELO'' följt av vårt maskin eller domännamn. Förslagsvis använder ni domännamnet för studenter vid Inst. för Datorteknik, ``Student.DoCS.UU.SE''.

SMTP-tjänsten kommer som svar på din presentation att hälsa dig välkommen. Som du kommer se av presentationen, så tar SMTP-servern reda på en del om dig. Denna information kommer att skickas med alla brev som denna server vidarebefordrar. Efter att ha hälsat dig välkommen är servern beredd att ta emot kommandon enligt kommandolistan. Läs igenom kommandolistan så att du får en uppfattning om vad kommandona gör. Notera särskilt den subtila skillnaden mellan kommandona VRFY och EXPN.

Att fråga efter information

Du ska nu prova att ta reda på saker om användare med hjälp av SMTP-servern. Kommandona för detta är VRFY och EXPN.

Fråga 3: Finns användaren daemon, och vad har han i så fall för fullständigt namn?

Fråga 4: Om man skickar ett brev till postmaster, vem eller vilka kommer då att få brevet? (Lista samtliga.)

Att skicka brev

Om du vill skicka ett brev så måste du tala om tre saker: Vem som är avsändaren, vem som är mottagaren och vad meddelandet skall innehålla.

Prova att skicka ett brev till dig själv. För att skicka ett brev måste man i tur och ordning specifiera:

Om man gör saker i fel ordning, kan man behöva använda RSET-kommandot för att nollställa servern. (Man behöver dock inte presentera sig igen.)

Kom ihåg att fylla i fullständig adress, dvs ``<loginnamn>@Student.DoCS.UU.SE'', när du anger avsändare och mottagare. (Om du bara skriver in ditt användarnamn, kommer den försöka leverera till en lokal användare, och troligen har du inget konto på den maskin denna SMTP-server kör på.)

Avsluta sessionen med kommandot ``QUIT''. Och prova sedan med kommanot ``more /var/mail/<loginnamn>'' och se om du fått något brev. (När du kör more så bläddrar man sidor med mellanslagstangenten, och avslutar med 'q'-tangenten.)

OBS, ovanstånde fungerar bara förutsatt att du:

  1. Sitter på en av DoCS SS-4:or eller annan Solaris 2-maskin hos DoCS. (Om inte, koppla dig till Sol2.DoCS.UU.SE och läs där.)
  2. Inte eftersänder din post utanför DoCS. (Då får du koppla dig till lämplig maskin och leta reda på din post där.)

Ibland kan det ta en kort stund innan brevet dyker upp. Om du har flera brev i brevlådan, kommer det brev du just skickade vara det sista i din brevlåda. Om det finns väldigt många brev i brevlådan kan du istället för more använda kommandot ``tail -40 /var/mail/<loginnamn>'' istället. Detta kommando skriver ut de sista 40 raderna av din brevlåda, och avslutar sedan. Om du byter ut -40 mot -20 skrivs de sista 20 raderna ut, osv.

OBS! Du skall alltså inte använda din vanliga brevläsare, eftersom de flesta brevläsare döljer de rader vi är intresserade av.

Raderna som börjar med Received: adderas av varje SMTP-server som vidarebefordrar ett brev. Raderna kommer i omvänd tidsordning, dvs den översta av Received:-fälten är alltså det "senaste". Man kan titta på dessa rader för att avgöra hur ett brev levererats, vilket kan vara praktiskt om man t.ex misstänker att en avsändare förfalskats. På raden brukar det stå t.ex:

Received: from ida.csd.uu.se (bjorn@ida.csd.uu.se [130.238.13.2]) by
Zeke.Update.UU.SE (8.7.6/8.7.3) with SMTP id WAA04608 for bjorn@csd.uu.se;
Sun, 29 Sep 1996 22:57:33 +0200
Raden ovanför betyder att brevet tagits emot av (by) Zeke.Update.UU.SE från (from) ida.csd.uu.se. Namnet på maskinen den tagit emot brevet från är det namn du använde när du presenterade dig. Texten inom parantes efter detta namn, i detta fall (bjorn@ida.csd.uu.se [130.238.13.2]), är den information som SMTP-servern tog reda på om dig.

Om du "glömde" presentera dig med HELO, eller servern tycker något annat med dig var lurt, kommer brevet även innehålla en "Authentication-Warning". Den kan t.ex se ut som:

X-Authentication-Warning: Zeke.Update.UU.SE: Host bjorn@ida.csd.uu.se
[130.238.13.2] didn't use HELO protocol

Fråga 5: Hur har detta brev levererats till dig, dvs vilka maskiner har det passerat på vägen? Rita en figur med pilar som visar hur brevet levererats.

Prova att koppla upp dig igen. Presentera dig, och ge sedan kommandot VERB. Detta kommer låta dig se hur den SMTP-server du använder gör för att leverera brev. Prova att skicka ytterligare ett brev till dig själv. När det skickas iväg kommer du få se hur den SMTP-server du pratar med gör för att leverera brevet.

När SMTP-servern redovisar vad den gör kommer den att skriva ut detta med 050 som prefix, dvs alla rader som börjar med 050 är sånt man bara får se om man givit kommanot VERB.

Det är möjligt att den server som Zeke kontaktar kommer använda ESMTP (utökad SMTP som kan lite mer än vanlig SMTP), men för detta exempel kommer skillnaden i så fall huvudsakligen ligga i att Zeke då presenterar sig med EHLO istället för HELO.

Fråga 6:Kommentera sessionen och förklara vad den gör. (Klipp ut utskriften från SMTP-servern av hur brevet levererades och klipp in den i redovisningen.)

Du ska nu veta lite mer om hur elektronisk post fungerar, hur man kan förfalska brev, och även hur man avslöja förfalskningar. Därtill vet du nu lite om hur man ta reda på hur brev till olika adresser levereras.

Fråga 7:Koppla upp dig till SMTP-servern på student.docs.uu.se, och ta sedan reda på vilka mottagare av brev till armada som eftersänder sin post till maskiner utanför domänen docs.uu.se. Lista person och adress de eftersänder till.

Mottagaren armada är en brevlista med många mottagare. Som du sett kan man ibland ta reda på vilka man når, och hur man når dem, när man skickar brev till en viss adress.