Dela via


Problem med användargränssnittet för IPv6 Winsock-program

En av de mest uppenbara ändringarna från IPv4 till IPv6 är storleken på IP-adressen. Många användargränssnitt innehåller dialogrutor som gör det möjligt för en användare att ange en IP-adress, vilket exemplifieras i följande bild.

gemensam ipv4-adressruta i ett användargränssnitt

Adressering i IPv6, på grund av många faktorer som längd, komplexitet och betydelsen av avsnitt i IPv6-adressutrymmet, bidrar inte till användarnas ändring eller specifikation. Därför minskar behovet av att ge användarna möjlighet att ange sin egen adress. På grund av komplexiteten som är associerad med IPv6-adressering kommer det sannolikt inte att ske per nod att ge administratörer möjlighet att ange IPv6-adressinformation.

Det är inte otänkbart att visa en IPv6-adress i användargränssnittet, och därför bör utvecklare överväga variabiliteten i storleken på en IPv6-adress när de ändrar ett program för att stödja IPv6.

I resten av det här avsnittet beskrivs skillnaden mellan förutsägbarhet för IPv4-adresslängd och överväganden för IPv6-adresslängd. Det här avsnittet förutsätter att IPv6-adresser visas i deras hexadecimala representation.

IPv4-adresser är förutsägbara i storlek, eftersom de strikt följer streckad decimal notation, vilket visas i följande adressexempel:

10.10.256.1

IPv6-adresser är inte så förutsägbara på grund av IPv6-adresskonventionen som gör det möjligt att använda ett dubbelkolon (::) för att representera en serie med nollor. Därför motsvarar följande IPv6-adressrepresentationer samma IPv6-adress:

1040:0:0:0:0:0:0:1
1040::1

Möjligheten att representera en serie nollor med dubbelkolon resulterar i en oförutsägbar längd för en viss IPv6, vilket kräver att programmerare tar hänsyn till den här funktionen när de skapar användargränssnittsvisningar av IPv6-adresser. Utvecklare bör säkerligen se till att användargränssnittet kan visa IP-adresser som inte använder ett dubbelkolon för att representera en serie nollor (första adressen nedan) samt att de kan visa den längsta möjliga IPv6-adressen (den andra adressen nedan, med den inbäddade IPv4-adressen) när de skapar sitt IPv6-kompatibla användargränssnitt. Observera också att om du lägger till omfångsidentifieraren (ID) till följande adress ökar dess längd med så mycket som ytterligare elva tecken:

21DA:00D3:0010:2F3B:02AA:00FF:FE28:9C5A
0000:0000:0000:0000:0000:ffff:123.123.123.123

En annan viktig faktor är om namnbaserade adresser är lämpligare än nummerbaserade IPv6-adresser. Om namnbaserade adresser är lämpligare bör du överväga namngivningskonventioner i användargränssnittet, inklusive eventuella indatafelkontroller som är lämpliga för uppgiften.

Det finns andra komplexiteter som är associerade med att visa IPv6-adresser som utvecklare måste ta hänsyn till när de ändrar sitt program och när de utformar användargränssnittsrepresentationer av IPv6-adresser. Några av dessa överväganden är följande:

  • Ska adressen innehålla alla sekvenser med nollor eller använda notationen double-colon?
  • Är det lämpligare att använda en nummerbaserad adressrepresentation eller en namnbaserad representation?
  • Är användaren intresserad av att urskilja en viss aspekt av adressschemat, till exempel undernätsprefixet, omfångsidentifieraren eller andra underfält?
  • Är användaren intresserad av att fastställa andra aspekter av adressen, till exempel TLA-identifieraren, NLA-identifieraren eller SLA-identifieraren?
  • Kommer användargränssnittet att kunna urskilja inbäddade IPv6-adresser, och i så fall hur kommer de att hanteras och visas? Kan du skilja mellan IPv4-kompatibla adresser och IPv4-mappade IPv6-adresser när du visar adressinformation för användaren?

Det finns även andra saker att tänka på, och utvecklare bör noga överväga sin kundgrupp när de utvecklar användargränssnitt för IP-adresser.

Metodtips

  • Utvecklare måste överväga lämplig metod för varje användargränssnitt när de ändrar sitt program för att stödja IPv6. Det är absolut nödvändigt att se till att användargränssnittet innehåller tillräckligt med längd för att visa IPv6-adresser, liksom att avgöra om adressen är nummer- eller namnbaserad.
  • När det är möjligt använder du befintliga Funktioner för Winsock och IP-hjälp när du använder IPv6-adresser i stället för att implementera den här logiken igen. Till exempel kan RtlIpv6AddressToString, RtlIpv6AddressToStringEx, RtlIpv6StringToAddressoch RtlIpv6StringToAddressEx-funktioner användas för att konvertera mellan IPv6-adresser och strängrepresentationer av dessa IPv6-adresser.

Kod att undvika

  • Användargränssnittselement som är beroende av en IPv4-adress måste granskas, och en del av den granskningen bör omfatta om den information du tillhandahöll (under IPv4) är lämplig för IPv6.
  • Möjligheten att ange en IP-adress bör också bero på om IPv4 används eller om IPv6 är tillgängligt. Om IPv6 är tillgängligt, är det lämpligt att ange talbaserade (hexadecimala) adresser eller namnbaserade adresser?

Kodningsuppgifter

Om du vill ändra din befintliga kodbas från IPv4 till IPv4- och IPv6-interoperabilitet

  1. Utför en visuell granskning av användargränssnittet och leta efter alla element som är beroende av en viss längd för IP-adresssträngen. Kontroller med den lättidentifierade decimaltecknet med fyra sektioner är lätta att upptäcka, men andra är det inte. Det kan finnas platser där IP-adresser kan visas, till exempel i dialogrutor, där en IPv6-adress kan ta slut i visningsrummet.
  2. När du hittar någon av dessa kontroller kontrollerar du om det är lämpligt att visa adressen när du använder IPv6. Om det är möjligt att antingen IPv4 eller IPv6 används kontrollerar du att användargränssnittet kan hantera något av dem. Ersätt eller utöka eventuella kontroller med användargränssnittskontroller som kan visa en hel IPv6-adress.
  3. Följ upp med testning av användargränssnittet för att säkerställa att de ändringar som aktiverar IPv6-adressvisning bibehåller den avsedda användbarheten när du använder IPv4-adresser. Testa även för visningsplatser för protokolladresser, till exempel informationsdialogrutor, för att säkerställa att de hanterar IPv6-adresser korrekt.

IPv6-guide för Windows Sockets-program

Ändra datastrukturer för IPv6 Winsock-appicationer

Dual-Stack Sockets för IPv6 Winsock-program

Funktionsanrop för IPv6 Winsock-program

användning av hårdkodade IPv4-adresser

underliggande protokoll för IPv6 Winsock-program