Sdílet prostřednictvím


Podpora protokolu IPv6

Aby bylo možné podporovat protokol IPv4 i IPv6 v systému Windows XP s aktualizací Service Pack 1 (SP1) i v systému Windows Server 2003, musí aplikace vytvořit dva sokety, jeden soket pro použití s protokolem IPv4 a jeden soket pro použití s protokolem IPv6. Tyto dva sokety musí aplikace zpracovávat samostatně.

Pokud poskytovatel služeb TCP/IP v systému Windows XP s aktualizací SP1 a v systému Windows Server 2003 podporuje adresování IPv4 a IPv6, musí vytvořit dva samostatné sokety a naslouchat samostatně na těchto soketech:

  • Jednou pro protokol IPv4.
  • Jednou pro rodinu IPv6 adres.

Windows Vista a novější nabízejí možnost vytvořit jeden soket IPv6, který dokáže zpracovat provoz IPv6 i IPv4. Například se vytvoří soket tcp pro naslouchání IPv6, umístí do režimu duálního zásobníku a vázaný na port 5001. Tento soket se dvěma zásobníky může přijímat připojení od klientů TCP IPv6, kteří se připojují k portu 5001 a z klientů TCP IPv4, kteří se připojují k portu 5001. Tato funkce umožňuje výrazně zjednodušený návrh aplikace a snižuje režijní náklady na prostředky vyžadované při účtování operací na dvou samostatných soketech. Existuje však určitá omezení, která je potřeba splnit, aby bylo možné použít soket se dvěma zásobníky. Další informace naleznete v tématu Dual-Stack sokety.

WSAEnumProtocols vrátí dvě struktury WSAPROTOCOL_INFO pro každý z podporovaných typů soketů (SOCK_STREAM, SOCK_DGRAM, SOCK_RAW). iAddressFami ly musí nastavit AF_INET pro adresování IPv4 a AF_INET6 pro adresování IPv6.

Adresy IPv6 jsou popsány v následujících strukturách.

struct in_addr6 {
    u_char    s6_addr[16];             /* IPv6 address */
};

struct sockaddr_in6 {
    short             sin6_family;     /* AF_INET6 */
    u_short           sin6_port;       /* Transport level port number */
    u_long            sin6_flowinfo;   /* IPv6 flow information */
    struct in_addr6   sin6_addr;       /* IPv6 address */
    u_long            sin6_scope_id;   /* set of interfaces for a scope */
   };

Pokud aplikace používá funkce Windows Sockets 1.1 a chce používat adresy IPv6, může i nadále používat všechny staré funkce, které přebírají strukturu sockaddr jako jeden z parametrů (vytvořit vazbu, připojit, odeslata recvfrom, , přijmoutatd. Jedinou požadovanou změnou je použití sockaddr_in6 místo sockaddr_in.

Funkce překladu názvů (gethostbyname, gethostbyaddratd.) a funkce převodu adres (inet_addr, inet_ntoa) nelze opakovaně použít, protože předpokládají, že IP adresa je 4 bajty. Aplikace, která chce pro adresy IPv6 provádět překlad ip adres a převod adres, musí používat funkce specifické pro Windows Sockets 2. Zavedlo se mnoho nových funkcí, které umožňují aplikacím Windows Sockets 2 využívat IPv6, včetně funkcí getaddrinfo a getnameinfo funkcí.

Další informace o tom, jak povolit funkce IPv6 v aplikaci, naleznete v IPv6 Guide for Windows Sockets Applications.