- TDAT2004 - Datakommunikasjon med nettverksprogrammering.
- Oppgave 12: IMAP4
- Torkil Solheim og Tor Skuggevik
1. Innledning
Internet Message Access Protocol version 4 revision one (IMAP4) er en protokoll brukt av klienter for å motta epost fra en e-post server.
Den første versjonen av IMAP ble designet i 1986 av Mark Crispin, og siden har vi sett flere versjoner inkludert IMAP2, IMAP3 og IMAP2bis.
Historisk har IMAP konkurrert med post office protocol (POP) som den mest utbredte protokollen, selv om flere andre (proprietære) protokoller har blitt brukt.
I nyere tid har den mer avanserte IMAP mer eller mindre foreldet POP selv om de fleste e-post klienter enda har støtte for begge.
2. Ønsket funksjonalitet
Ønsket funksjonalitet med IMAP er å forbedre interaksjonen mellom klienter og eposttjenere.
Med IMAP blir eposter lagret på en tjener og kan derfor aksesseres fra flere enheter samtidig. Handlinger utført på epostene blir synkronisert mellom alle enhetene som er tilkoblet Internett. Når en person for eksempel leser en ny epost blir denne eposten markert som «lest» og blir oppdatert på de andre enhetene. I tillegg vil handlinger en person gjør uten å være tilkoblet Internet bli synkronisert neste gang en internettkobling er etablert.
Å lagre epostene på en filserver krever verdifull lagringsplass, men er veldig greit siden det vil fungere som en backup i tilfelle harddisken til en bruker blir ødelagt eller skulle gå tapt.
En annen funksjonalitet til IMAP er at brukeren kan velge å hente ut individuelle deler av en mail i MIME-formatet. Dette gjør at brukeren kan hente ut for eksempel kun teksten av en email uten å hente ut vedlagte filer.
I forhold til POP3 er IMAP4 en komplisert protokoll, men tilbyr mer funksjonalitet og er veldig fleksibel i praksis. POP3 lagrer som regel ikke epostene på en tjener, med en gang brukeren har hentet eposten blir den slettet fra tjeneren og kan derfor kun leses på en enhet. Denne protokollen fungerer derfor ikke så bra lenger, ettersom veldig mange har flere enheter som brukes til å lese epost.
3. Virkemåte
En sesjon starter med en TCP/IP-tilkobling initiert av klienten på port 143 (standard). Kommunikasjonen mellom klient og tjener oppnås ved spesifikke verb i en spør-svar utveksling, all kommunikasjon skjer med 7-bit tekst.
Det er viktig å påpeke at tilkoblingen er asynkron, det vil si både klient og tjener kan utføre transaksjoner uavhengig av hverandre.
Eksempelvis kan klienten først be om å få se innholdet i en innboks for så å sende en epost før han får svar på den første forespørselen. Tjeneren kan også gjøre dette ved å for eksempel oppdatere innboksen om det kommer ny epost.
Siden kommunikasjonen er asynkron må alle spørringer fra klienten inneholde et inkrementelt sekvensnummer som prefiks. Alle svar fra tjeneren vil da inneholde sekvensnummeret samt en av fem responser.
Disse responsene er:
Kode | Forklaring |
---|---|
OK | Transaksjonen var suksessfull |
NO | Transaksjonen feilet |
BAD | Sekvensfeil |
PREAUTH | Brukeren er allerede autorisert |
BYE | Tilkobling lukket |
En sesjon i IMAP består av flere tilstander, der hver tilstand tillater ulike handlinger. Enhver sesjon er kjører så lenge klienten er aktiv.
De ulike tilstandene er:
Not Authenticated - Klienten er ikke autentisert og må etablere identitet og legitimasjon for å få tilgang til serveren.
Authenticated - Klienten er autorisert og kan nå lage, slette, samt manipulere postkasser(inkludert mapper). Men man kan ikke forandre innholdet.
Klienten kan også abonnere/fjerne abonnement på offentlige mapper.
NB! Innboks-postkassen kan ikke lages eller slettes, men man kan endre navnet, da lages en ny postkasse med det navnet og alle meldinger sendt til innboksen blir videresendt til den nye.
Herifra kan man også velge en postkasse for så å se/manipulere innholdet.
Selected - Klienten har åpnet en postkasse med Select, Status eller Examine og er dermed i Selected-tilstanden.
Her kan man manipulere meldinger innenfor en bestemt postkasse.
Logout - Dette er perioden mellom en initiert logout og bekreftelse fra serveren.
I mellomtiden vil serveren slette medlinger markert for sletting, oppdatere markeringer, og oppheve valgte postkasser før den til slutt sender responsen BYE og avslutter tilkoblingen.
Handlinger:
Tilstand | Kommando | Forklaring |
---|---|---|
Alle | Capability | Lister evnene serveren støtter |
Noop | Gjør i prinsippet ingen ting, men brukes for å holde tilkoblingen i live ved lav aktivitet | |
Logout | Avslutter tilkoblingen | |
Not authenticated | Starttls | Starter TLS(Transport Layer Security) på serveren som muliggjør kryptering av meldinger |
Authenticate | Autentiserer klient med gyldig legitimasjon med gitt autentiseringsmekanisme om serveren støtter den, kan også sette et gitt ekstra sikkerhetslag | |
Login | Identifiserer klienten med brukernavn og passord, Bør ikke brukes på usikret nettverk da passordet sendes i klartekst | |
Authenticated | Create/Delete/Rename | Lager/sletter/gir nytt navn til en postkasse |
Subscribe/Unsubscribe | Legg til/slett abonnering på en postkasse | |
List/LSUB | List skriver ut alle postkasser brukeren har tilgang til, LSUB skriver ut alle postkassene en bruker abonnerer på | |
Select/Examine | Select åpner en postkasse som brukeren kan både lese og skrive til (Read/write). Examine åpner en postkasse der brukeren kun kan lese innholdet (read-only) | |
Status | Gir informasjon om innholdet i en postkassen uten å forandre statusen eller innholdet til postkassen, informasjon som blir returnert er blant annet antall meldinger, nye meldinger og meldinger som brukeren ikke har sett | |
Append | Tar inn en postkasse og melding som parametere, legger inn meldingen i postkassen. | |
Selected | Copy | Kopierer meldinger til en annen postkasse |
Fetch | Henter en eller flere meldinger | |
Search | Tar inn søkeparametere og henter indeksnummer til meldinger som oppfyller parameterne | |
Store | Overskriver hva en melding er markert som | |
UID | (Unique ID) Gjør at klienten kan bruke unike identifikatorer for Fetch, Copy, Search og Store istedenfor tall | |
Check | Serveren lager et checkpoint | |
Close | Kombinerer Check og Expunge, sesjonen går ut av den valgte postkassen og tilbake til en autorisert tilstand | |
Expunge | Serveren sletter alle meldinger som er markert for sletting |
4. Referanser
Internet Message Access Protocol