偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

新聞 網(wǎng)絡(luò)
隨著電子技術(shù)及網(wǎng)絡(luò)技術(shù)的發(fā)展,計算機網(wǎng)絡(luò)已經(jīng)與人們的生活密切相關(guān),可能身邊的每一樣電子設(shè)備都需要連入網(wǎng)絡(luò),IPv4 的地址數(shù)量已經(jīng)無法滿足。IPv6 的應(yīng)用將徹底解決這些問題。

 [[271457]]


董濤,網(wǎng)易游戲高級運維工程師,主要工作方向為網(wǎng)易集團 DNS 的運維與開發(fā)。
張欣接,網(wǎng)易集團 DNS 團隊負責人,負責網(wǎng)易域名系統(tǒng)的架構(gòu)設(shè)計及生態(tài)建設(shè)。

一、IPv6 支持度報告

IPv6 簡介

IPv6(Internet Protocol version 6,互聯(lián)網(wǎng)通信協(xié)議第 6 版)是用于數(shù)據(jù)包交換互聯(lián)網(wǎng)絡(luò)的網(wǎng)絡(luò)層協(xié)議,是 IETF(互聯(lián)網(wǎng)工程任務(wù)小組 Internet Engineering Task Force,簡稱 IETF)設(shè)計的用來替代 IPv4 協(xié)議的互聯(lián)網(wǎng)協(xié)議版本。

隨著電子技術(shù)及網(wǎng)絡(luò)技術(shù)的發(fā)展,計算機網(wǎng)絡(luò)已經(jīng)與人們的生活密切相關(guān),可能身邊的每一樣電子設(shè)備都需要連入網(wǎng)絡(luò),IPv4 的地址數(shù)量已經(jīng)無法滿足。IPv6 的應(yīng)用將徹底解決這些問題。IPv6 由 128 比特位構(gòu)成,單從數(shù)量級上來說,IPv6 所擁有的地址容量是 IPv4 的約 8×10 28 倍,達到 2 128(約 3.4 × 10 38)個。這不但解決了網(wǎng)絡(luò)地址資源數(shù)量的問題,同時也為物聯(lián)網(wǎng)的發(fā)展提供了基礎(chǔ)。

IPv6 地址的表達形式采用 32 個十六進制數(shù),由兩個邏輯部分組成:一個 64 位的網(wǎng)絡(luò)前綴和一個 64 位的主機地址,主機地址通常根據(jù)物理地址自動生成,叫做 EUI-64(或者 64- 位擴展唯一標識)。例如 2001:0db8:85a3:08d3:1319:8a2e:0370:7344 是一個合法的 IPv6 地址。

IPv6 全球部署更新

  • 2008 年,歐盟發(fā)布了“歐洲部署 IPv6 行動計劃”

  • 2009 年,日本發(fā)布《IPv6 行動計劃》

  • 2010 年,美國政府發(fā)布 IPv6 行動計劃

  • 2010 年,韓國發(fā)布“下一代互聯(lián)網(wǎng)協(xié)議(IPv6) 促進計劃”

  • 2012 年,加拿大政府發(fā)布了《加拿大政府 IPv6 戰(zhàn)略》

  • 2017 年,國務(wù)院辦公廳印發(fā)《推進互聯(lián)網(wǎng)協(xié)議第六版(IPv6)規(guī)模部署行動計劃》

操作系統(tǒng) IPv6 支持度

一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

應(yīng)用軟件 IPv6 支持度

客戶端軟件

1、瀏覽器

一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

服務(wù)器軟件

1、程序開發(fā)軟件

一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

2、數(shù)據(jù)庫

一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

總結(jié)

毋庸置疑,下一代互聯(lián)網(wǎng) IPv6 是萬物互連,智能化時代基礎(chǔ)網(wǎng)絡(luò)的重要支撐協(xié)議,但是從一個只擁有 IPv4 協(xié)議的巨型網(wǎng)絡(luò)要全面、平穩(wěn)地過渡到一個純 IPv6 網(wǎng)絡(luò)需要一段極為漫長的時間。從報告統(tǒng)計的數(shù)據(jù)來看,各種基礎(chǔ)軟件和應(yīng)用軟件都已基本支持 IPv6?,F(xiàn)在在國內(nèi)的環(huán)境下,IPv6 的基礎(chǔ)環(huán)境還需要完善,為此工信部也發(fā)布了

《推進互聯(lián)網(wǎng)協(xié)議第六版(IPv6)規(guī)模部署行動計劃》(http://www.miit.gov.cn/n1146290/n4388791/c6166476/content.html)

推動各單位加快支持 IPv6。

IPv6 支持度報告的數(shù)據(jù)來源是:下一代國家互聯(lián)網(wǎng)中心在 2017 年 11 月發(fā)布的 IPv6 支持度報告

(https://www.ipv6ready.org.cn/public/download/ipv6.pdf), 感興趣的同學可以查看原文。

二、IPv6 環(huán)境下 DNS 相關(guān)測試

背景介紹

名詞簡介

  • A 記錄

A 記錄是一個域名指向 IPv4 地址的解析結(jié)果,即最常見的記錄類型, 例如 ipv6test.ntes53.netease.com. 1800 IN A 123.58.166.70
  • AAAA 記錄

AAAA 是一個域名指向 IPv6 地址的解析結(jié)果。如果想要一個域名解析到 IPv6 地址,則需要設(shè)置此種類型的解析結(jié)果。同一個域名可以同時有 A 與 AAAA 兩種記錄類型, 例如 ipv6test.ntes53.netease.com. 1800 IN AAAA 2403:c80:100:3000::7b3a:a646
  • 緩存 DNS 服務(wù)器

用戶直接使用的 DNS 服務(wù)器,各種平臺、操作系統(tǒng)上直接設(shè)置的 DNS 服務(wù)器,常見的有 8.8.8.8, 114.114.114.114
  • 權(quán)威 DNS 服務(wù)器

用于域名的管理。權(quán)威 DNS 服務(wù)器只對自己所擁有的域名進行域名解析,對于不是自己的域名則拒絕應(yīng)答。例如網(wǎng)易的權(quán)威 DNS 服務(wù)器只會響應(yīng)網(wǎng)易域名的請求,對于其他域名,則拒絕應(yīng)答。
  • 雙棧網(wǎng)絡(luò)環(huán)境

雙棧網(wǎng)絡(luò)環(huán)境即客戶端或服務(wù)器同時擁有 IPv4、IPv6 兩種網(wǎng)絡(luò)環(huán)境,可以簡單的理解為機器上既有 IPv4 地址又有 IPv6 地址

測試場景

下文中所有測試使用的程序均為測試方法中的程序

1.目前純 IPv4 環(huán)境下,僅新增 AAAA(IPv6) 記錄之后,對已有程序的影響

假定已經(jīng)存在了一個程序(C 程序、python 程序、瀏覽器等),通過域名訪問某個服務(wù),現(xiàn)在在 IPv4 環(huán)境下一切工作正常。當給這個域名增加了 AAAA 記錄之后,測試對目前的程序的影響。

域名解析
一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

HTTP 請求
一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

客戶端
一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

結(jié)論

  • 當在某域名原有的 A 記錄類型的基礎(chǔ)上新增 AAAA 記錄后,原有的程序工作正常

2.客戶端 IPv6/v4 雙棧環(huán)境下,測試程序的行為

假定用戶的環(huán)境是雙棧環(huán)境,假定一個服務(wù)通過域名對外提供服務(wù),測試這種情況下程序的行為。

域名解析

一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

HTTP 請求
一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

客戶端
一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

結(jié)論

  • 當域名同時存在 A 與 AAAA 記錄,并且網(wǎng)絡(luò)類型為雙棧網(wǎng)絡(luò)時,絕大多數(shù)程序工作正常。僅有一種情況例外,即程序中使用了 gethostbyname 函數(shù),同時 resolv.conf 中配置了 options inet6 時,此時程序會返回錯誤的解析結(jié)果

  • RFC 以及絕大多數(shù)實現(xiàn)方式,均回優(yōu)先使用 IPv6 地址建立連接

  • 雙棧環(huán)境下,客戶端使用 IPv4 與 IPv6 緩存 DNS 服務(wù)器獲取的解析結(jié)果是一致的

3. 客戶端純 IPv6 環(huán)境下,測試能否正常工作

假定用戶只有 IPv6 地址,DNS 也是使用 IPv6 地址 (DNS 必須有雙棧環(huán)境,因為現(xiàn)在很多權(quán)威服務(wù)器沒有 IPv6 地址,純 IPv6 環(huán)境下無法正常工作),假定一個服務(wù)通過域名(同時擁有 A、AAAA 記錄)對外提供服務(wù),測試服務(wù)是否可以正常訪問。

域名解析
一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

HTTP 請求
一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

客戶端
一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

結(jié)論
當某域名即存在 A 記錄 又存在 AAAA 記錄時:

  • 如果程序中使用了 gethostbyname 時,程序可能會拿到錯誤的解析結(jié)果,取決于 resolv.conf 的配置(當配置了 option inet6 時,會獲取到錯誤的解析結(jié)果)

  • Windows 在這種情況下,部分應(yīng)用工作不正常。在指定使用 IPv6 socket 的情況下,程序工作正常。

  • 根據(jù)安卓官方的描述,Android 6.0 之后的版本已經(jīng)支持 IPv6,但是根據(jù)對國內(nèi)大多數(shù)廠商的安卓手機的調(diào)研,目前國內(nèi)安卓手機很少可以原生支持 IPv6

4. DNS 解析測試

這里測試了緩存服務(wù)器和權(quán)威服務(wù)器在各種網(wǎng)絡(luò)環(huán)境下,優(yōu)先使用的解析鏈路。

一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

結(jié)論
當權(quán)威服務(wù)器和緩存服務(wù)器均支持 ipv6 時,緩存服務(wù)器優(yōu)先使用 ipv6 鏈路進行解析,其他情況均使用 ipv4 鏈路進行解析。

結(jié)論

  • 經(jīng)過測試與查證,gethostbyname 不支持 IPv6,使用此函數(shù)可能會拿到錯誤的結(jié)果或者程序拋出異常。建議使用 getaddrinfo 函數(shù)取代此函數(shù)

  • 目前已經(jīng)存在 A 記錄的域名,添加 AAAA 記錄后,不管客戶端與服務(wù)端的網(wǎng)絡(luò)環(huán)境如何:

    • 絕大多數(shù)情況下對客戶端與服務(wù)端工作正常

    • 下面一種情況下會出現(xiàn)工作異常:
      當使用了 C 的 gethostbyname 并且在 resolv.conf 中配置了 options inet6時,此函數(shù)返回錯誤的結(jié)果

  • 經(jīng)過測試,雙棧網(wǎng)絡(luò)下 IPv4 與 IPv6 的優(yōu)先級:

    • 優(yōu)先使用 IPv6 發(fā)起解析請求

    • 優(yōu)先使用 IPv6 請求建立連接 (TCP, UDP)

    • 優(yōu)先解析 A 地址記錄

參考資料

  • Windows 8 IPv4 與 IPv6 選擇的方法:Connecting with IPv6 in Windows8
    (https://blogs.msdn.microsoft.com/b8/2012/06/05/connecting-with-ipv6-in-windows-8/)

  • Windows 當 IPv6 不可用后的回退機制:Is there any setting for connection timeout when IPv6 fallback to IPv4?
    (https://social.technet.microsoft.com/Forums/en-US/d09e938a-a594-4766-8898-3926a81fc5dc/is-there-any-setting-for-connection-timeout-when-ipv6-fallback-to-ipv4?forum=w7itpronetworking)

  • 目前廣泛使用的 IPv4 與 IPv6 優(yōu)先選擇算法為 Happy Eyeballs
    (https://en.wikipedia.org/wiki/Happy_Eyeballs):

    • 目前使用此算法的項目有:Chrome, Opera 12.10, Firefox version 13, OS X, cURL

    • 此算法會優(yōu)先選擇 IPv6 鏈路使用

    • 此算法的原理可參考 RFC 6555(Happy Eyeballs: Success with Dual-Stack Hosts)
      (https://tools.ietf.org/html/rfc6555)

    • 此算法的簡略工作流程如下:

    1. 當客戶端是雙棧環(huán)境時,客戶端會向緩存 DNS 服務(wù)器發(fā)起域名 A 記錄與 AAAA 記錄的解析請求,并受到解析結(jié)果,對應(yīng)下圖中的 1-4

    2. 客戶端獲取到解析地址后,會同時使用 IPv4 與 IPv6 兩種鏈路嘗試建立連接,對應(yīng)下圖中的 6-7。當 IPv6 鏈路比 IPv4 鏈路先建立連接,或者 IPv4 已經(jīng)建立連接,但是在很短的時間間隔內(nèi),IPv6 也成功建立連接后,則這兩種情況下客戶端應(yīng)該使用 IPv6 鏈路完成后續(xù)的網(wǎng)絡(luò)請求,對應(yīng)圖中的 8-12

一份完整的 IPv6 環(huán)境下 DNS 相關(guān)測試

測試方法

解析域名

C/ C ++

  • gethostbyname

Linux

 

 

  1. #include <stdio.h> 
  2.     #include <netdb.h> 
  3.     #include <arpa/inet.h> 
  4.  
  5.     int main(void
  6.         int i = 0
  7.         char str[32] = {0}; 
  8.          struct hostent* phost = NULL; 
  9.  
  10.         phost = gethostbyname("IPv6test.ntes53.netease.com"); 
  11.         printf("%s", inet_ntoa(*((struct in_addr*)phost->h_addr)));  
  12.          
  13.         return 0
  14.     } 

 

Windows

 

 

  1.  #include <winsock.h> 
  2.     #include <Windows.h> 
  3.     #include <stdio.h> 
  4.  
  5.     #pragma comment (lib, "ws2_32.lib"
  6.  
  7.     int main(void) { 
  8.         WSADATA wsaData = {0,}; 
  9.         struct in_addr addr = {0,}; 
  10.         struct hostent *res; 
  11.         int i = 0
  12.  
  13.         WSAStartup(MAKEWORD(22), &wsaData); 
  14.  
  15.         res = gethostbyname("IPv6test.ntes53.netease.com."); 
  16.         while (res->h_addr_list[i] != 0) { 
  17.             addr.s_addr = *(u_long *) res->h_addr_list[i++]; 
  18.             printf("IP Address: %s\n", inet_ntoa(addr)); 
  19.         } 
  20.  
  21.         WSACleanup(); 

 

getaddrinfo

  1. #include <stdio.h> 
  2.     #include <string.h> 
  3.     #include <stdlib.h> 
  4.     #include <netdb.h> 
  5.     #include <sys/types.h> 
  6.     #include <sys/socket.h> 
  7.     #include <arpa/inet.h> 
  8.  
  9.     int lookup_host () 
  10.       struct addrinfo hints, *res; 
  11.       int errcode; 
  12.       char addrstr[100]; 
  13.       void *ptr; 
  14.  
  15.       memset (&hints, 0, sizeof (hints)); 
  16.       hints.ai_family = AF_INET; 
  17.  
  18.       errcode = getaddrinfo ("IPv6test.ntes53.netease.com", NULL, &hints, &res); 
  19.       if (errcode != 0
  20.         { 
  21.           perror ("getaddrinfo"); 
  22.           return -1
  23.         } 
  24.       while (res) 
  25.         { 
  26.           inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100); 
  27.           switch (res->ai_family) 
  28.             { 
  29.             case AF_INET: 
  30.               ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr; 
  31.               break
  32.             case AF_INET6: 
  33.               ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr; 
  34.               break
  35.             } 
  36.           inet_ntop (res->ai_family, ptr, addrstr, 100); 
  37.           printf ("IPv%d address: %s (%s)\n", res->ai_family == PF_INET6 ? 6 : 4
  38.                   addrstr, res->ai_canonname); 
  39.           res = res->ai_next; 
  40.         } 
  41.       return 0
  42.     } 
  43.     int main (void
  44.         lookup_host(); 
  45.     } 

windows

 

 

  1. #define WIN32_LEAN_AND_MEAN 
  2.     #define _WIN32_WINNT 0x501 
  3.     #include <windows.h> 
  4.     #include <winsock2.h> 
  5.     #include <stdio.h> 
  6.     #include <string.h> 
  7.     #include <stdlib.h> 
  8.     #include <sys/types.h> 
  9.     #include <ws2tcpip.h> 
  10.  
  11.     #pragma comment (lib, "Ws2_32.lib"
  12.  
  13.     // int iResult; 
  14.     WSADATA wsaData; 
  15.     int iResult = WSAStartup(MAKEWORD(2,2), &wsaData); 
  16.  
  17.     int inet_pton(int af, const char *src, void *dst) 
  18.         struct sockaddr_storage ss; 
  19.         int size = sizeof(ss); 
  20.         char src_copy[INET6_ADDRSTRLEN+1]; 
  21.  
  22.         ZeroMemory(&ss, sizeof(ss)); 
  23.         /* stupid non-const API */ 
  24.         strncpy (src_copy, src, INET6_ADDRSTRLEN+1
  25.         src_copy[INET6_ADDRSTRLEN] = 0
  26.  
  27.         if (WSAStringToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) { 
  28.             switch(af) { 
  29.                 case AF_INET: 
  30.                     *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr; 
  31.                     return 1
  32.                 case AF_INET6: 
  33.                     *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr; 
  34.                     return 1
  35.             } 
  36.         } 
  37.         return 0
  38.     } 
  39.     const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) 
  40.         struct sockaddr_storage ss; 
  41.         unsigned long s = size; 
  42.         ZeroMemory(&ss, sizeof(ss)); 
  43.         ss.ss_family = af; 
  44.         switch(af) { 
  45.             case AF_INET: 
  46.                 ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src; 
  47.                 break
  48.             case AF_INET6: 
  49.                 ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src; 
  50.                 break
  51.             default
  52.                 return NULL; 
  53.         } 
  54.         /* cannot direclty use &size because of strict aliasing rules */ 
  55.         return (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0)? 
  56.                dst : NULL; 
  57.     } 
  58.     int lookup_host () 
  59.         struct addrinfo hints, *res; 
  60.         int errcode; 
  61.         char addrstr[100]; 
  62.         void *ptr; 
  63.         memset (&hints, 0, sizeof (hints)); 
  64.         hints.ai_family = AF_INET6; 
  65.         errcode = getaddrinfo ("IPv6test.ntes53.netease.com", NULL, &hints, &res); 
  66.         if (errcode != 0
  67.         { 
  68.             perror ("getaddrinfo"); 
  69.             printf("%d",errcode); 
  70.             return -1
  71.         } 
  72.         while (res) 
  73.         { 
  74.             // inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100); 
  75.             sockaddr_in in1; 
  76.             memcpy(&in1.sin_addr, res->ai_addr->sa_data, sizeof(res)); 
  77.             switch (res->ai_family) 
  78.             { 
  79.                 case AF_INET: 
  80.                     ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr; 
  81.                     break
  82.                 case AF_INET6: 
  83.                     ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr; 
  84.                     break
  85.             } 
  86.             inet_ntop(res->ai_family, ptr, addrstr, 100); 
  87.             // sockaddr_in6 in; 
  88.             // memcpy(&in.sin6_addr, ptr, sizeof(ptr)); 
  89.             printf ("IPv%d address: %s (%s)\n", res->ai_family == PF_INET6 ? 6 : 4
  90.                    addrstr, res->ai_canonname); 
  91.             //printf ("IPv%d address: %s (%s)\n", res->ai_family == PF_INET6 ? 6 : 4, 
  92.             //        inet_ntoa(in.sin6_addr), res->ai_canonname); 
  93.             res = res->ai_next; 
  94.         } 
  95.         return 0
  96.     } 
  97.     int main (void
  98.         printf("start\n"); 
  99.         lookup_host(); 
  100.     } 

 

Python

  • socket.gethostbyname

  1. import socket 
  2. result = socket.gethostbyname("IPv6test.ntes53.netease.com"
  3. print result 
  • getaddrinfo
  1. import socket 
  2. result = socket.getaddrinfo("IPv6test.ntes53.netease.com"0, socket.AF_INET6) 
  3. print result 
  4. result = socket.getaddrinfo("IPv6test.ntes53.netease.com"0, socket.AF_INET) 
  5. print result 
  6. result = socket.getaddrinfo("IPv6test.ntes53.netease.com"0, socket.AF_UNSPEC) 
  7. print result 

當不指定 socktype 時,此值默認為 socket.AF_UNSPEC

HTTP 請求

Python

requests 包

 

 

  1. import requests 
  2. response = requests.get("http://IPv6test.ntes53.netease.com:8000", stream=True
  3. print response.raw._fp.fp._sock.getpeername() 

 

C++

  1. #include <stdio.h> 
  2. #include <curl/curl.h> 
  3.  
  4. int main(void
  5.   CURL *curl; 
  6.   CURLcode res; 
  7.  
  8.   curl = curl_easy_init(); 
  9.   if(curl) { 
  10.     curl_easy_setopt(curl, CURLOPT_URL, "http://IPv6test.ntes53.netease.com:8000"); 
  11.     /* example.com is redirected, so we tell libcurl to follow redirection */  
  12.     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 
  13.       // curl_easy_setopt(curl, CURL_IPRESOLVE_V6, 1L);  // 使用 IPv6 地址 
  14.       // curl_easy_setopt(curl, CURL_IPRESOLVE_V4, 1L);  // 使用 IPv4 地址 
  15.       // curl_easy_setopt(curl, CURL_IPRESOLVE_WHATEVER, 1L);  // 獲取系統(tǒng)允許的 IPv4 或者 IPv6 地址  
  16.     /* Perform the request, res will get the return code */  
  17.     res = curl_easy_perform(curl); 
  18.     /* Check for errors */  
  19.     if(res != CURLE_OK) 
  20.       fprintf(stderr, "curl_easy_perform() failed: %s\n"
  21.               curl_easy_strerror(res)); 
  22.  
  23.     /* always cleanup */  
  24.     curl_easy_cleanup(curl); 
  25.   } 
  26.   return 0; 
 
責任編輯:張燕妮 來源: 網(wǎng)易游戲運維平臺
相關(guān)推薦

2019-10-25 16:56:18

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全技術(shù)周刊

2010-05-31 18:30:12

IPv6 DNS

2019-04-13 14:21:13

2011-06-07 16:47:22

IPv6IPv6日世界IPv6日

2010-05-26 17:46:51

IPv6測試

2010-06-07 11:52:47

LinuxIPv6協(xié)議

2018-08-10 07:58:43

IPv6NATIPv4

2010-08-11 16:07:14

IPv6協(xié)議H3C

2024-11-07 08:50:56

用戶分析分類維度標簽

2019-12-03 10:28:53

編程語言PythonJava

2023-09-01 14:02:25

用戶分析攻略

2010-05-26 14:12:06

IPv6協(xié)議

2010-06-08 17:30:56

IPv6協(xié)議棧

2010-05-31 09:58:57

關(guān)閉IPv6

2010-05-27 15:44:00

卸載IPv6協(xié)議

2010-06-07 12:29:06

如何安裝IPv6

2012-11-20 09:14:52

IPv6CNGI網(wǎng)絡(luò)Web

2010-05-31 10:16:31

禁用IPv6協(xié)議

2012-05-24 19:08:13

2010-06-02 15:17:48

DNS服務(wù)器IPv6協(xié)議
點贊
收藏

51CTO技術(shù)棧公眾號