{idkey=516b0[url=http%3A%2F%2Fwww.cristian-herrera.se%2Fsv%2Fblog%2Finternet-standards%2F%C3%A5%C3%A4%C3%B6-dom%C3%A4ner-f%C3%B6r-dummies][title=%C3%A5%C3%A4%C3%B6-dom%C3%A4ner+f%C3%B6r+dummies][desc=]} {cmp_start idkey=918[url=http%3A%2F%2Fwww.cristian-herrera.se%2Fsv%2Fblog%2Finternet-standards%2F%C3%A5%C3%A4%C3%B6-dom%C3%A4ner-f%C3%B6r-dummies][title=%C3%A5%C3%A4%C3%B6-dom%C3%A4ner+f%C3%B6r+dummies][desc=]}

Jag har sett att det råder ganska stor förvirring därute om s.k åäö-domäner eller IDN / IDNA domäner ute på internet jag var med lite i en diskutiondiskution januari förra året (2010) och efter det verkar folk inte ha blivit klokare på vad detta egentligen är.

Så, hur får jag reda på vad det är?

Jag kan med handen på hjärtat säga att jag inte fördjupat mig mer än vad jag behöver i detta ämne, dock har jag haft tillräckligt med koll för att kunna ge korrekta tips och råd.

Dock skall man veta hur något om Internet och Internet-standards fungerar då finns det ingen bättre källa än att grotta i de gamla RFC (request for comments) som används i utvecklingen av Internet av IETF (The Internet Engineering Task Force)(The Internet Engineering Task Force).

Dom RFC som definierar IDN är f.n RFC4690RFC4690 och RFC4290RFC4290, för IDNA RFC5890RFC5890 och RFC5891RFC5891.

Först skall vi reda ut lite begrepp.

För att vi enklare skall förstå vad vi läser så måste vi först reda ut begreppen.

Binärkod / hex kod

All data som hanteras av en dator sker i binärkod, detta är egentligen inget annat än heltal som beräknas på talbasen 2 istället för 10 (som vi är vana vid).

Det binära systemet används för att datan överfördes i början i elektriska impulser 1 för hög spänning och 0 för låg och dessa grupperas ofta i grupper om 7, 8, 16, 32 och 64 bitar, där varje bit representerar en etta eller nolla.

Därför används även ofta talbaserna octa (8) och hexa (16) då det är mycket enkelt att omvandla binärt till dessa talbaser, t.ex

en 8 bitar med alla ettor skulle bli

binärt 1111 1111 eller 0b11111111

hexa ff eller 0xff

eller 255 Decimalt.

alltså, 4 bitar binärt motsvarar 1 bit i hexa, därför används ofta hexa för läsbarhetens skull en byte eller 8 bitar = 2 bitar hex, se bara på HTML färgkoder, dom är oftast i hexa RGB (röd, grön, blå)

ASCII

American Standard Code for Information Interchange - En teckentabell som omvandlar vanliga heltal till tecken så som "a" "b" "c" och "1" "2" "3". Denna teckentabell baserade sig på ett 7 bitars heltal och således kan den endast anta 128 värden.

Unicode

Unicode är den standard som tas fram för att kunna unifiera alla världens språk och tecken i samma teckenkodnings system, detta system är mycket mer komplext och skulle behöva en egen bok för att förklara något så när hur den fungerar, men kort sagt kan man säga att det kan delas upp i utf-8, utf-16 och utf-32 där siffran anger antal bitar som används, vid större än 8 - bitars måste tecknet delas upp i mindre "paket" då datakommunikationen i princip sker i 8 bitars sekvenser.

UTF-8

UTF-8 är den standard som idag sakta ersätter ASCII, UTF-8 har alla ASCII tecken på samma "position" som förr. UTF-8 har en "variabel längd" och kan spänna upp till 3 byte. UTF-8 är idag standard för UNIX liknande system som mac och linux, samt rekommenderad standard för Internet, dock använder Windows sig idag internt av utf-16.

DNS

Domain name system -  Det system som översätter våra domännamn till internetadresser, varje adress består av en sekvens av 4 bytes alltså en sekvens på 4 heltal mellan 0-255 ser ut som xxx.xxx.xxx.xxx en s.k ip-adress, DNS systemet översätter våra domän namn till ip adresser, så varje gång du ber om en resurs på internet baserat på ett namn så gör du ett DNS uppslag som ger dig rätt ip-adress.

Punycode

Punycode utvecklades för att kunna göra IDN domäner, det är ett sätt att presentera en textsträng som har unicode tecken med bara ascii tecken. Det xn-- som vi är vana att se i idn domäner är bara ett prefix som kallas ACE, och ingår inte i punycode, antagligen är det ett sätt att tala om för klienterna som skall tolka detta att "här kommer en punycode kodad domän, behandla den rätt nu"

ACE

ASCII Compatible Encoding - Detta är just det xn-- prefix som läggs till på punycode strängen

IDN

Internationalized Domain Name - Ett system som skapats för att kunna ha det vi kallar för åäö-domäner, detta är dock inte riktigt sant, IDN har stöd för alla unicode tecken och detta möjliggör att man kan skriva med krylliska, grekiska och chinesiska tecken, t.ex

Här han ni testa hur er IDN domän ser ut för det underliggande Internet systemet.

IDNA

Internationalizing Domain Names in Applications - Dom standards och rekommendationer som bör följas när man skriver ett program eller ett system som skall hantera IDN domäner, som t.ex webbläsare och e-post program.

Protokoll / Nätverksprotokoll

För att olika maskiner skall kunna förstå varandra så är det viktigt att de pratar samma språk, eller som det heter protokoll.

Det språk som ligger underst på Internet heter TCP/IP och det är där alla anslutningarna ligger, "över" det protokollet ligger DNS (namnprotokoll), HTTP (Internet sidor), FTP (ett filöverföringsprotokoll) och alla andra tjänster som vi är vana att använda på Internet, alla har sitt egna språk, eller protokoll.

HTTP

Hyper Text Transfer Protocoll - Det protokoll eller språk som används för att hämta och skicka hemsidor, det är detta språk som din webbläsare använder för att prata med ditt webbhotell, där din sida ligger

Klient

Ett program som används för att nyttja en viss tjänst som sköts av en server. Din webbläsare och ditt e-post program är 2 exempel på detta

Server

En server är en dator som tillhandahåller med en viss tjänst som sen en klient kan ansluta till. T.ex denna sida ligger på en server som din webbläsare (klienten) hämtar denna sida ifrån via ett språk som heter HTTP.

Shiftlägeskänslig

Case sensitivity - Vissa system gör ingen skillnad på gemener och versaler, medans andra gör det. T.ex i Windows är CristianHerrera samma sak som cristianherrera, detta gäller inte i system som bygger på POSIX standarden, system som t.ex Linux och UNIX, detta har betytt problem i kommunikationen mellan systemen.

I detta dokument kommer vi att diskutera just detta då vissa gärna skriver sina domäner i kamelpuckel standard, dvs att man använder en versal som separator emellan sammskrivna ord.

Berättelsen om IDN (snabbversionen)

I begynnelsen kunde inte Internet hantera 8 bitars transaktioner över nätverk och alla tecken som skulle överföras kodades i 7 bitars segment, och då informationen skickas som heltal så användes s.k ASCII tabeller för att tolka informationen till text.

Idag kan man skicka 8 bitars segment och därför kan man enkelt använda utf-8 tecken och detta gav utrymme för att börja internationalisera domän namns systemet, så att man kan använda alla tecken, arabiska, grekiska, utomjordiska heheh, ja kanske inte utomjordiska, men alla som vi har på vår planet i alla fall.

Systemet måste vara bakåtkompatibelt

Då Internet är rejält utbyggt och DNS protokollet är byggda för att klara ASCII standard var ett av kraven var just att hela systemet skall vara bakåtkompatibelt med det gamla systemet (tänk er själva att göra ett globalt projekt som att uppdatera hela Internet), och därför utvecklades punycode, för att kunna ha en ASCII representation av unicode strängar eller texter om man hellre vill kalla dom för det.

Buissiness as usual

Med andra ord kan man säga att det underliggande systemet är i stort sätt orört, våra webbservrar, e-post servrar och DNS förstår fortfarande bara 7 bitars ASCII, så hela systemet bygger helt enkelt på att "översätta" ASCII till Unicode och vice versa och det är det som Punycode gör!

På sidorna 6 - 7 i RFC5894RFC5894 som är en sammanfattning av IDNA kan man läsa att själva översättningen mellan IDN domänen och punycode versionen skall ske före och efter det att förfrågan når DNS systemet, och på så sätt slipper man att uppdatera hela infrastrukturen för t.ex DNS systemet och mail system etc etc. Detta möjliggör att det gamla systemet kan samexistera med det nya systemet utan att man skall behöva uppdatera stora delar av Internet, vilket skulle vara en omöjlighet att samordna då många servrar ligger på mindre och större företag runt hela världen.

En liten lustig detalj om shiftlägeskänslighet.

När jag skummade igenom dokumenten hittade jag en lustig liten detalj när det gäller shiftlägeskänslighet, det traditionella ASCII systemet tillåter att man använder gemener och versaler, ja, t.om att man BlAnDaR dom, detta är ej tillåtet i IDN då detta är mycket språkberoende, det kan t.o.m vara så att i vissa språk så har man ingen gemen - versal version av vissa bokstäver, därför tillåts endast gemener i en IDN domän.

Allt gäller inte det svenska språket

Allt som måste tagits i betänkande när IDN skapades gälle inte det svenska språket, hänsyn har tagits till alla språk som har representationer i Unicode standarden, där även Turkiska, arabiska och många fler. Så vad som är intressant för oss är varför fungerar det inte jämt?

Vad är det som inte fungerar?

Då det underliggande DNS systemet inte har rörts så betyder det att själva översättningen sköts av klienten, dvs, din webbläsare eller e-post program.

Men även webbapplikationerna skall då hantera översättningen mellan IDN och punycode, så om t.ex ditt twitterprogram eller annat program som du använder inte stödjer detta, leta reda på en annan klient, testa lite olika program.

Vad gör jag då med tjänster som ej stödjer IDN som t.ex Google Analytics?

Jo, om du skall registrera dig på en tjänst som inte känner igen IDN domäner, gå t.ex in på .SE's IDN-konverterare och ta reda på hur din ASCII representation av domänen ser ut, denna kommer att fungera.

I teorin så skall man även kunna t.ex maila till en IDN-domän i en klient som inte stödjer det. Om man bara skriver in sin ASCII representation i sin mailklient istället för IDN, t.ex Den här e-postadressen skyddas mot spambots. Du måste tillåta JavaScript för att se den. istället för webmaster@domän.se så skall det komma rätt, då mail protokollet är beroende av DNS systemet som i sin tur bara hanterar ASCII. Ja i teorin skall alla system fungera om man använder sig utav ASCII representationen, då DNS systemet är orört.

Hur gör jag när jag länkar?

Jag skulle rekommendera att du använder IDN namnet i ankar-texten men ASCII representationen i själva länken. ex:

[code] <a href="http://xn--domn-noa.se">domän.se</a>[/code]

Om du har ett bra CMS så sköter den detta automatiskt.

Jag skulle inte heller oroa mig för Google, Google är en webbklient som alla andra och har IDN stöd, G kommer att tolka detta som "domän.se"

 

 

Ja det var allt för denna gång, om man vill veta mer skulle jag rekommendera att skumma igenom RFC dokumenten, särskilt RFC5894RFC5894 som är mer en sammanfattning av det hela, dock ett varningens ord, det är mycket text och inte den enklaste engelskan.

Ledsen att jag inte hinner täcka mer just nu, men detta får fungera som en introduktion i ämnet och jag hoppas att jag lyckats räta ut ett eller ett par frågetecken hos någon, och om inte annat, så har ni fått en rätt fin Internet ordlista i början av dokumentet.

 

{cmp_end}
{idkey=516b1[url=http%3A%2F%2Fwww.cristian-herrera.se%2Fsv%2Fblog%2Finternet-standards%2F%C3%A5%C3%A4%C3%B6-dom%C3%A4ner-f%C3%B6r-dummies][title=%C3%A5%C3%A4%C3%B6-dom%C3%A4ner+f%C3%B6r+dummies][desc=]}