Bagikan melalui


Dukungan IPv6

Untuk mendukung IPv4 dan IPv6 pada Windows XP dengan Service Pack 1 (SP1) dan pada Windows Server 2003, aplikasi harus membuat dua soket, satu soket untuk digunakan dengan IPv4 dan satu soket untuk digunakan dengan IPv6. Kedua soket ini harus ditangani secara terpisah oleh aplikasi.

Jika penyedia layanan TCP/IP di Windows XP dengan SP1 dan pada Windows Server 2003 mendukung pengalamatan IPv4 dan IPv6, ia harus membuat dua soket terpisah dan mendengarkan secara terpisah pada soket ini:

  • Sekali untuk IPv4.
  • Sekali untuk keluarga alamat IPv6.

Windows Vista dan kemudian menawarkan kemampuan untuk membuat soket IPv6 tunggal yang dapat menangani lalu lintas IPv6 dan IPv4. Misalnya, soket mendengarkan TCP untuk IPv6 dibuat, dimasukkan ke dalam mode tumpukan ganda, dan terikat ke port 5001. Soket tumpukan ganda ini dapat menerima koneksi dari klien TCP IPv6 yang terhubung ke port 5001 dan dari klien TCP IPv4 yang terhubung ke port 5001. Fitur ini memungkinkan desain aplikasi yang sangat disederhanakan dan mengurangi overhead sumber daya yang diperlukan dari operasi posting pada dua soket terpisah. Namun, ada beberapa batasan yang harus dipenuhi untuk menggunakan soket tumpukan ganda. Untuk informasi selengkapnya, lihat Soket Tumpukan Ganda.

WSAEnumProtocols mengembalikan dua struktur WSAPROTOCOL_INFO untuk masing-masing jenis soket yang didukung (SOCK_STREAM, SOCK_DGRAM, SOCK_RAW). iAddressFamily harus diatur ke AF_INET untuk alamat IPv4, dan AF_INET6 untuk alamat IPv6.

Alamat IPv6 dijelaskan dalam struktur berikut.

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 */
   };

Jika aplikasi menggunakan fungsi Windows Sockets 1.1 dan ingin menggunakan alamat IPv6, aplikasi dapat terus menggunakan semua fungsi lama yang mengambil struktur sockaddr sebagai salah satu parameter (mengikat, menyambungkan, mengirimto, dan revfrom, menerima, dan sebagainya). Satu-satunya perubahan yang diperlukan adalah menggunakan sockaddr_in6 alih-alih sockaddr_in.

Namun, fungsi resolusi nama (gethostbyname, gethostbyaddr, dan sebagainya) dan fungsi konversi alamat (inet_addr, inet_ntoa) tidak dapat digunakan kembali karena mereka menganggap alamat IP panjangnya 4 byte. Aplikasi yang ingin melakukan resolusi nama dan konversi alamat untuk alamat IPv6 harus menggunakan fungsi khusus Windows Sockets 2. Banyak fungsi baru telah diperkenalkan untuk mengaktifkan aplikasi Windows Sockets 2 untuk memanfaatkan IPv6, termasuk fungsi getaddrinfo dan getnameinfo .

Untuk informasi selengkapnya tentang cara mengaktifkan kemampuan IPv6 dalam aplikasi, lihat Panduan IPv6 untuk Aplikasi Soket Windows.