Jeg bliver *aldrig* IPv6 fan

Dengang tilbage i 1990'erne hvor "IPng" og senere "IPv6" blev til brugte vi allerede : notationen, men alligevel valgte en eller anden klaphat at IPv6 skulle bruge ':' som separator.

Så hvordan er det nu lige man angiver en IPv6 addresse med portnummer ?

Her en en partiel liste af RFC'er der blander sig i emnet:

Der er sikkert kommet flere siden jeg lavede listen, som på ingen måde kan betragtes som komplet.

Min personlige favorit, publikationsdatoen til trods, er RFC1924.

Det siger sig selv at getaddrinfo() kaldet ikke har fulgt med tiden og ideerne...

phk

Kommentarer (31)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Allan Kjær

Man angiver vel IP-adressen med [ ] ?

Fra Wikipedia ( https://en.wikipedia.org/wiki/IPv6_address ):

"Literal IPv6 addresses in network resource identifiers[edit]
Colon (:) characters in IPv6 addresses may conflict with the established syntax of resource identifiers, such as URIs and URLs. The colon has traditionally been used to terminate the host path before a port number.[6] To alleviate this conflict, literal IPv6 addresses are enclosed in square brackets in such resource identifiers, for example:

http://[2001:db8:85a3:8d3:1319:8a2e:370:7348]/
When the URL also contains a port number the notation is:

https://[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443/"

  • 5
  • 1
Poul-Henning Kamp Blogger

Man angiver vel IP-adressen med [ ] ?

Nej, kun i en meget lokal kontext af et subspecie af URN'er.

Resten af HTTP bruger ikke [] konsistent, f.eks ikke i X-Forwarded-For: headeren.

Morsomt nok prøver den nye RFC7239 RFC som skal forgylde "Forwarded:" headeren at være konsistent og specificerer []'er.

Problemet er bare at både '[', ']' og ':' er paria i den normale BNF notation, med det resultat at IPv6 skal i "..." mens IPv4 ikke skal.

På kommandolinen er '[' og ']' naturligvis et helvede...

  • 2
  • 0
Bent Jensen

Så jeg ikke helt er med :-)

Men PHK du kunne ikke få IP6, så er det ikke mere et teoretisk spørgsmål for dig ?

Men inkonsistent er ikke godt , som med med Unix og Dos, hvad er grunden til valget af
"\" i stedet for "/" Patenter, Uvidenhed, eller bare for at være på tværs ?

  • 3
  • 2
Torben Frandsen

hvad er grunden til valget af
"\" i stedet for "/" Patenter, Uvidenhed, eller bare for at være på tværs ?

Fordi "/" allerede var optaget (nemlig til switche, som jo bruger "-" i *nix.) Hvorfor IBM så havde valgt det til deres programmer, fortaber sig vist i tågerne.

Da MS-DOS begyndte at få directories, generede det også MS' udviklere. Derfor kan du stadig i dag selv vælge om du vil skrive "cd \Windows\system32" eller "cd /Windows/system32" - selv om skallen fortsat skriver det med "\"

  • 5
  • 0
Ivan Skytte Jørgensen

Jeg formoder at årsagen til at bruge noget andet end punktum i IPv6 var for at gøre det lettere at skelne mellem IPv4 (dotted-quad) og IPv6. Hvorfor valget faldt på kolon ved jeg ikke, og jeg kan ikke finde mailinglist archive for Network Working Group tilbage fra 1995 (der er muligvis detaljer i draft "Deering94b"), så jeg kan kun gætte på at svampe og whisky har været involveret.

Eller også var kolon blot ikke så meget brugt dengang, og man havde en forventning om at folk ville bruge DNS / hostnavne, og så ville problemet være minimalt. F.eks. taster jeg ikke "2003:16d8:dd30:56:223:4dff:fe9a:54ef" men istedet "isjfs". Den eneste IPv6-adresse jeg taster er ::1

Så du er velkommen til at taste http://[2001:200:dff:fff1:216:3eff:feb1:44d7]:80/, men normale mennesker vil blot taste http://www.kame.net:80/

Så jeg ser det kun som et potentielt problem når URLs er automatisk genererede af programmer, men de må blot fikses så de genererer det rigtigt.

  • 0
  • 0
Torben Mogensen Blogger

Formater er ofte designet, så alle tegn, der ikke har særlig betydning, er lovlige i data-delen af formatet. Det giver problemer, når man senere har brug for endnu et symbol med særlig betydning: Hvis man tager et af datategnene, så man man ikke korrekt behandle data i det "gamle" format, og hvis alle kombinationer af specialtegn allerede har en veldefineret betydning, så er man på herrens mark. Nogen gange er man så heldig, at visse tegnkombinationer er meningsløse (absurde eller indbyrdes kancellerende), og så kan man bruge dem, selv om kombinationerne strengt taget havde en veldefineret (omend ubrugelig) betydning.

Det samme problem findes også i instruktionssæt til CPU'er: Man vil gerne udnytte alle bitkombinationer for at få den mest kompakte kode. Det giver ikke plads til udvidelser med flere instruktionstyper, og så må man være kreativ. Måske er man så heldig, at en bestemt kombination ikke bruges, og så bruger man den som præfix til nye instruktioner (det er den løsning, Intel har brugt i x86). Alternativt begynder man at se på instruktionsinstanser, der ellers koder en no-operation, f.eks. x := x eller x := x AND x. Så kan man klemme nye instruktioner ind i disse bitkombinationer. Den forudseende designer har på forhånd anbefalet, at en NOP skal kodes som en bestemt af disse former, og advaret imod at bruge de andre, hjulpet til dette ved at assemblerens pseudokode NOP bruger dette format.

Men da der ikke er ubegrænset mange måder at kode NOP, har de "indskudte" instruktioner ofte flere begrænsninger end de oprindelige: Ikke alle registre kan angives, kun få konstanter kan angives, osv., og det komplicerer selvfølgelig (dis-)assemblere og lignende værktøjer. På et eller andet tidspunkt må man kaste håndklædet i ringen og lave et helt nyt instruktionssæt med en helt ny indkodning. Det gjorde ARM f.eks. med Thumb2-sættet, der ændrede indkodningen helt i forhold til både det gamle Thumb og det gamle 32-bit instruktionssæt (som netop havde klemt nye instruktioner ind på den føromtalte måde). For stadig at kunne køre gammel kode, kunne man skifte til et andre processor-modes, der kunne afvikle den gamle kode.

Måske er det på tide at gøre det samme for IP-adresser og URL'er: Finde et helt nyt format, der ikke er bagudkompatibelt med det gamle, og lade software køre i forskellige "modes", når de skal behandle nye og gamle formater, og håbe på, at det gamle format efterhånden dør ud -- ligesom FIELDATA-tegnsættet i sin tid gjorde.

  • 7
  • 0
Christian Nobel

Det er jo så lidt samme irritationsmoment man har omkring tekstseparatorer som f.eks. anførselstegn og citationstegn - helt almindelige tegn, brugt i almindeligt sprogbrug, hvorfor man er nødt til at bruge escape karakterer på den ene eller anden måde hvis man f.eks. skal have en tekststreng der indeholder noget ala: "Det er Jens' hat".

Herudover, så mener jeg at IP V6's "pladsbesparende" ::: notation er noget værre rod, da det ikke gør overblikket nemmere.

Og at begynde at lave base 85 konvertering af IP adresser er for mig at se kun et udtryk for en syg hjerne der har været på spil.

  • 2
  • 0
Lasse Mølgaard

At dele et IPv4 net i subnet er forholdsvis nemt. Der findes trods alt en hel del "subnetting for dummies" til IPv4 på Internettet.

Prøv at gøre det samme på IPV6. Jeg har fået et /56 subnet af min udbyder, og jeg ved det kan man splitte op det op i 256 /64 subnet uden man går på kompromis med SLAAC, EUI-64 og hvad de ellers hedder.

... men jeg har endnu ikke set en guide, som skærer det helt ud i pap, hvordan man skal angribe problemet i IPv6.

  • 1
  • 1
Henrik Kramshøj Blogger

Subnets i IPv6 er "altid" /64 - så den del er relativt nem.

Så skåret ud i pap, når du får en /56 eller en /48 så er det dit netværksprefix, og du har så 16 eller 8-bit at lave subnets med.

Eksempelvis:
www.kramse.org has IPv6 address 2a02:9d0:3000:1::17

2a02:9d0: - 32-bit som Solido har fået af RIPE NCC
2a02:9d0:3000 - 48-bit, en /48 - som er det normale man får
2a02:9d0:3000:1 - subnet 1 - det første subnet valgte jeg 16-bit 0001 til

Skrevet helt ud i 64-bit, m hex, 2a02:09d0:3000:0001/64

De eneste steder hvor det giver lidt mening at subnette anderledes for IPv6 er router links, link nets mellem udbydere, der hvor vi også idag på IPv4 bruger /31.

  • 1
  • 0
Baldur Norddahl
  • 2
  • 0
Baldur Norddahl

Du kan faktisk godt skrive en ipv6 adresse på dottet decimal form (hvis jeg husker rigtigt).

Nej det kan du ikke. Men der findes en hybrid-form så at du kan angive de sidste 32 bit som om det var en IPv4 adresse. F.eks.:

::ffff:192.168.1.1

Ovenstående er en IPv4 adresse som er "mapped" til en IPv6 adresse. Det bruges hvis et program kun ønsker at implementere IPv6 i forhold til operativsystemet. Programmet kan så stadig tale med IPv4 destinationer, hvor adressen så blot translateres til formatet ::ffff:ipv4_adresse.

Et andet eksempel er NAT64 som fungerer ved at man translaterer hele IPv4 adresseområdet ind i et IPv6 adresseområde, som så rammer NAT64 serveren. Eksempel:

Baldurs-MBP-2:~ baldur$ host version2.dk
version2.dk has address 109.238.50.21

Baldurs-MBP-2:~ baldur$ ping6 2001:778:0:ffff:64::109.238.50.21
PING6(56=40+8+8 bytes) 2a00:7660:5c6::a1e2:f14f:e9f5:e3be --> 2001:778::ffff:64:0:6dee:3215
16 bytes from 2001:778::ffff:64:0:6dee:3215, icmp_seq=0 hlim=234 time=78.986 ms
16 bytes from 2001:778::ffff:64:0:6dee:3215, icmp_seq=1 hlim=234 time=79.496 ms

Ulempen er så at programmet ikke ved at du ønsker at se denne IP adresse som en "mapped" adresse. Så derfor blev 109.238.50.21 til 6dee:3215 som er det samme skrevet som hex.

2001:778::ffff:64::/96 er en offentlig NAT64 server man kan gøre brug af. Dem findes der et antal af. Man kan selv sætte en op hvis man har lyst :-)

PS.: Hvor blev version2's native IPv6 adresse af?

  • 1
  • 0
Baldur Norddahl

Prøv at gøre det samme på IPV6. Jeg har fået et /56 subnet af min udbyder, og jeg ved det kan man splitte op det op i 256 /64 subnet uden man går på kompromis med SLAAC, EUI-64 og hvad de ellers hedder.

... men jeg har endnu ikke set en guide, som skærer det helt ud i pap, hvordan man skal angribe problemet i IPv6.

Det er ret enkelt så der er ikke rigtig brug for en guide som sådan.

Min prefix er 2a00:7660:5c6::/48

Mit første subnet er ... Tada!: 2a00:7660:5c6::/64
Mit andet subnet er 2a00:7660:5c6:1::/64 og tredie subnet 2a00:7660:5c6:2::/64 og så fremdeles.

Nu har du så fået et /56 prefix. Den største ulempe ved det er at det gøre adressen lidt længere. Du vil have en adresse af formen:

2a00:7660:1234:5600::/56

Forskellen i forhold til min /48 adresse er at du også har en fjerde komponent, som i mit eksempel ovenfor er "5600". De sidste to cifre vil altid være 00 og det er dit første subnet. Dit andet subnet er 01. Eksempel:

2a00:7660:1234:5600::/64
2a00:7660:1234:5601::/64
2a00:7660:1234:5602::/64

Længderne /48 og /56 er valgt således at de deler subnettene nogle smarte steder, dvs. på et byte boundary. Derfor holder den nemme opdeling når du ser på adresserne.

  • 4
  • 0
Jacob Rasmussen

Tjah, det sidder jeg så her og læser på en IPv4 forbindelse...

Survival of the richest. Som facebook-føde, vil du langt hen af vejen kunne klare dig med Carrier Grade NAT. Som hosting udbyder, må du i dag betale, hvis du vil have IPv4 adresser.

Omvendt er der IPv6 adresser nok til at jeg kan give mine lamper, min vejrstation og mit vækkeur en public, routeable IP adresse...

  • 2
  • 0
Anders Rosendal

Men inkonsistent er ikke godt , som med med Unix og Dos, hvad er grunden til valget af
"\" i stedet for "/" Patenter, Uvidenhed, eller bare for at være på tværs ?

I dos kan du skrive "dir/s". Du behøver altså ikke mellemrum mellem program og argumenter. Dette var en tåbelig beslutning som gjorde at det nu er umuligt at vide om du mener dir med option s eller dir som sti og s som program navn.

Åbenbart kan man bruge / i stedet for . Hvad der sker i mit eksempel ved jeg dog ikke :-)

Mere info her:
http://blogs.msdn.com/b/larryosterman/archive/2005/06/24/432386.aspx

  • 0
  • 0
Log ind eller Opret konto for at kommentere