Thiết bị của bạn thường có cả IPv4 lẫn IPv6 cùng lúc. Bài viết giải thích điều gì quyết định website thấy địa chỉ nào, và vì sao kết quả đổi theo từng lần.
Mở công cụ thông tin IP của BrowserInsight trên một kết nối hiện đại, bạn sẽ thường thấy cùng lúc hai địa chỉ: một địa chỉ IPv4 như 198.51.100.20, và một địa chỉ IPv6 như 2001:db8:85a3::8a2e:370:7334. Đôi khi cả hai định vị về cùng một thành phố. Đôi khi thì không. Và nếu bạn kiểm tra lại vào ngày mai, một website hôm nay ghi nhận địa chỉ IPv4 của bạn có thể ngày mai lại ghi nhận địa chỉ IPv6 thay vào đó — cùng một thiết bị, cùng một mạng, không có gì thay đổi. Đây không phải lỗi. Đó là kết quả có thể thấy được của hai quyết định riêng biệt mà hệ điều hành và trình duyệt của bạn đưa ra mỗi khi mở một kết nối mới, và gần như không ai từng thấy hai quyết định đó diễn ra.
Điểm chính cần nhớ
- Một phần lớn kết nối gia đình và di động ngày nay là dual-stack — thiết bị của bạn nắm giữ đồng thời một địa chỉ IPv4 hợp lệ và một địa chỉ IPv6 hợp lệ, và website cuối cùng ghi nhận địa chỉ nào cũng đều có thể xảy ra.
- Hai cơ chế hoàn toàn độc lập, chạy ở hai tầng khác nhau, quyết định việc này: hệ điều hành chọn một địa chỉ nguồn cho từng đích đến (RFC 6724), còn logic kết nối của trình duyệt thì cho cả hai họ giao thức "đua" với nhau và giữ lại bên nào phản hồi trước — đó chính là Happy Eyeballs v2 (RFC 8305).
- Họ giao thức nào "thắng" chỉ là kết quả của lần thử kết nối đó, không phải là một tùy chọn bạn đặt sẵn — cùng một máy hoàn toàn có thể hiện ra là IPv4 ở lượt truy cập này và IPv6 ở lượt sau.
- Vì các cơ sở dữ liệu định vị địa lý thương mại bao phủ dải địa chỉ IPv6 thưa hơn nhiều so với IPv4, hai địa chỉ của bạn có thể định vị về hai thành phố khác nhau, thậm chí hai quốc gia khác nhau.
- Nếu VPN hay proxy chỉ tạo đường hầm cho một họ giao thức, họ còn lại sẽ đi theo đường bình thường, không được bảo vệ — đây là một rò rỉ thật sự, không phải sai lệch vô hại. Xem thêm chống rò rỉ WebRTC và ngăn rò rỉ DNS, hai đường rò rỉ "anh em" hỏng theo đúng kiểu này.
Vì sao bạn có tới hai địa chỉ ngay từ đầu
IPv4 và IPv6 là hai hệ thống địa chỉ độc lập chạy song song, chứ không phải một "phiên bản mới" thay thế phiên bản cũ. Khoảng 4,3 tỷ địa chỉ của IPv4 cạn kiệt nhanh hơn những người thiết kế internet thời kỳ đầu dự đoán, nên IPv6 được thiết kế với không gian địa chỉ lớn hơn rất nhiều và được triển khai dần dần — nghĩa là cả hai hệ thống phải cùng tồn tại suốt hàng chục năm. Nhiều mạng gia đình và mạng di động ngày nay là dual-stack: router hoặc nhà mạng cấp cho thiết bị của bạn một địa chỉ khả dụng ở cả hai hệ thống cùng lúc. Thiết bị của bạn không âm thầm chọn một trong hai ở hậu trường — nó thực sự nắm giữ cả hai địa chỉ, sẵn sàng dùng bất cứ lúc nào.
Tuy vậy, không phải mạng nào cũng đã đi tới bước đó. Mức độ triển khai IPv6 vẫn còn chênh lệch rất nhiều giữa các quốc gia và giữa các nhà mạng, và một kết nối chưa được cấp IPv6 thì đúng là chỉ có một địa chỉ công cộng để trưng ra. Nếu công cụ tra cứu chỉ báo cho bạn một địa chỉ IPv4, đó là do nhà mạng của bạn chưa bật IPv6 chứ không phải công cụ bị lỗi — và mọi thứ nói ở dưới về việc website thấy địa chỉ nào sẽ chưa áp dụng cho bạn cho tới khi nhà mạng bật IPv6 lên.
Đó chỉ là bối cảnh. Điều thực sự quyết định một website cụ thể sẽ thấy địa chỉ nào là hai quyết định riêng biệt, do hai phần mềm khác nhau đưa ra, vào hai thời điểm khác nhau.
Quyết định 1: hệ điều hành chọn địa chỉ nguồn cho từng đích đến
Trước khi bất kỳ lần thử kết nối nào diễn ra, ngăn xếp mạng của hệ điều hành phải quyết định: với một đích đến cụ thể, nên dùng địa chỉ cục bộ nào của bạn — một thiết bị thường có nhiều địa chỉ IPv4 và IPv6 cùng gán trên một giao diện mạng. Đây là cơ chế chọn địa chỉ mặc định, được chuẩn hóa trong RFC 6724, và nó áp dụng một bộ quy tắc cố định: ưu tiên phạm vi (scope) trùng khớp, ưu tiên địa chỉ có số bit tiền tố trùng với đích đến nhiều nhất, ưu tiên địa chỉ IPv6 tạm thời hơn địa chỉ cố định khi cả hai đều khả dụng, cùng một loạt quy tắc phân định khác sau đó. Không quy tắc nào trong số này hỏi bạn thích giao thức nào hơn — chúng chỉ quan tâm, với đích đến đã cho và các địa chỉ giao diện mạng của bạn đang có, địa chỉ nguồn nào phù hợp nhất.
Quyết định 2: trình duyệt cho hai họ giao thức đua nhau, bên nào tới trước thì dùng bên đó
Chọn được địa chỉ nguồn vẫn chưa quyết định được họ giao thức nào — IPv4 hay IPv6 — thực sự mang kết nối tới một website dual-stack. Đó là một quyết định riêng, xảy ra muộn hơn, và do phần logic kết nối trong trình duyệt (hoặc trong thư viện mạng của hệ điều hành mà nó gọi tới) đưa ra — sau khi bộ phân giải đã trả về cả địa chỉ IPv4 lẫn IPv6 cho tên miền của trang. Các cách triển khai cũ thử một họ giao thức trước, đợi nó thất bại hoặc hết thời gian chờ rồi mới chuyển sang họ còn lại — điều này khiến một đường IPv6 vốn có vấn đề hoặc chậm thực sự trở thành nguyên nhân khiến trang tải chậm rõ rệt. Giải pháp hiện tại là Happy Eyeballs v2, được quy định trong RFC 8305: trình duyệt bắt đầu thử kết nối tới địa chỉ IPv6, chờ một khoảng thời gian ngắn (RFC 8305 khuyến nghị khoảng 250 mili giây), và nếu IPv6 chưa thành công trong khoảng đó, nó cũng bắt đầu thử IPv4 — cả hai chạy song song, và kết nối hoàn tất bằng bên nào bắt tay xong trước. Bên thua đơn giản là bị hủy bỏ.
Gộp hai cơ chế lại, câu trả lời cho câu hỏi "website thực sự thấy địa chỉ nào" là: địa chỉ nguồn mà hệ điều hành đã chọn cho lần kết nối đó, được mang đi bởi họ giao thức đã thắng trong cuộc đua cụ thể ấy. Không quyết định nào trong hai quyết định này được đặt một lần rồi dùng mãi — cả hai đều chạy lại độc lập ở mỗi kết nối mới.
Và cũng không có cách nào để phía trình duyệt quan sát được cuộc đua này. Network Information API của trình duyệt (navigator.connection) chỉ báo cho trang web loại kết nối chung chung và tốc độ ước tính — nó không hề nói cho biết một yêu cầu cụ thể đã dùng họ giao thức nào. Thông tin đó chỉ tồn tại ở phía nhận, và đó chính là lý do một công cụ như thông tin IP phải hỏi máy chủ "bạn thấy gì", thay vì đọc thẳng từ trình duyệt.
Hệ quả 1: cùng một thiết bị hôm nay là IPv4, ngày mai có thể là IPv6
Vì cuộc đua này chạy lại ở mỗi kết nối và kết quả phụ thuộc vào các điều kiện tức thời — thời gian phản hồi DNS, tình trạng nghẽn mạng, bộ phân giải nào trả lời trước — nên cùng một chiếc laptop, trên cùng một mạng Wi-Fi, hoàn toàn có thể được ghi nhận là khách IPv4 ở lần tải trang này và khách IPv6 ở lần tải kế tiếp. Dù vậy, hãy thực tế về tần suất: trên một kết nối dual-stack khỏe mạnh, IPv6 thường thắng rồi thắng tiếp, nên bạn sẽ không thấy nó đổi qua đổi lại từng phút. Việc lật kết quả thường chỉ xuất hiện khi có gì đó bên dưới thay đổi — đường IPv6 bị nghẽn hoặc suy giảm, một bộ phân giải khác trả lời, một website chỉ bật IPv6 cho một số tên miền, hoặc bạn chuyển sang mạng khác. Nếu bạn đang cố lý giải vì sao lịch sử đăng nhập, quy tắc giới hạn tần suất, hay quy tắc danh sách cho phép (allowlist) hoạt động thất thường, "cuộc đua lần đó chọn họ giao thức nào" thường chính là biến số bị bỏ sót, chứ không phải dấu hiệu có gì đó hỏng.
Hệ quả 2: hai địa chỉ của bạn có thể định vị về hai nơi khác nhau
Không gian địa chỉ IPv4 đã được các cơ sở dữ liệu định vị địa lý thương mại phân bổ và lập bản đồ suốt nhiều thập kỷ; không gian địa chỉ IPv6 thì còn khá mới và có độ phủ thưa hơn nhiều, vì các khối địa chỉ khổng lồ mới chỉ được cấp gần đây, và nhiều nhà cung cấp định tuyến nó qua hạ tầng mà các cơ sở dữ liệu còn chưa lập bản đồ đầy đủ. Kết quả thực tế là địa chỉ IPv4 và IPv6 của bạn có thể định vị về hai thành phố khác nhau — đôi khi hai quốc gia khác nhau — dù cả hai đều thực sự xuất phát từ cùng một kết nối. Đó không phải là rò rỉ hay lỗi từ phía bạn, mà là khoảng trống trong mức độ lập bản đồ đầy đủ của từng không gian địa chỉ. Độ chính xác định vị qua IP giải thích đầy đủ các cơ sở dữ liệu và tín hiệu đứng sau việc lập bản đồ đó; ở đây chỉ là trường hợp cụ thể khi hai lượt tra cứu cho cùng một kết nối lại cho kết quả khác nhau.
Hệ quả 3: một đường hầm chỉ phủ một họ giao thức sẽ làm rò rỉ họ còn lại
Đây là điều thực sự đáng để bạn kiểm tra. Một số ứng dụng VPN và cấu hình proxy chỉ chặn lưu lượng IPv4 — hoặc do thiết kế có chủ đích, hoặc vì hỗ trợ IPv6 được thêm vào quá muộn, thậm chí không có. Khi đó, lưu lượng IPv4 của bạn đi qua đường hầm đúng như dự định, nhưng địa chỉ IPv6 của thiết bị vẫn còn hoạt động và vẫn thắng cuộc đua Happy Eyeballs trên bất kỳ website dual-stack nào hỗ trợ IPv6, đẩy lưu lượng đó đi qua kết nối thật, không qua đường hầm của bạn. Kết quả là ngay trong cùng một lần tải trang, website nhìn thấy cả địa chỉ IPv4 thoát ra từ VPN của bạn lẫn địa chỉ IPv6 thật của bạn. Đây là một rò rỉ IPv6 đúng nghĩa, không phải sai lệch vô hại, và nó nằm cùng nhóm với các đường rò rỉ khác vốn phá hỏng đường hầm theo cùng một kiểu: chống rò rỉ WebRTC nói về việc thu thập ICE candidate làm điều tương tự ở tầng kết nối media, còn ngăn rò rỉ DNS nói về việc một truy vấn tới bộ phân giải không mã hóa bỏ qua hoàn toàn đường hầm ra sao. Một bài test rò rỉ chỉ kiểm tra xem địa chỉ IPv4 có đổi hay không hoàn toàn có thể bỏ sót điều này — nó phải kiểm tra cả hai họ giao thức.
Hệ quả 4: CGNAT chỉ là vấn đề của IPv4
Carrier-Grade NAT (CGNAT) — khi nhà mạng chia sẻ một địa chỉ IPv4 công cộng cho hàng trăm hay hàng nghìn thuê bao — tồn tại đúng là để kéo dài nguồn cung IPv4 đang cạn dần. Không gian địa chỉ IPv6 đủ lớn để nhà mạng cấp riêng một dải địa chỉ cho từng khách hàng, nên địa chỉ IPv6 của bạn thường không bị chia sẻ với ai cả. Điều này có hai mặt. Ở phía IPv4, việc dùng chung địa chỉ với người lạ nghĩa là chỉ cần một kẻ xấu trong cùng pool CGNAT là có thể khiến cả địa chỉ dùng chung bị gắn cờ — đây chính là cơ chế đứng sau bài viết bị gắn nhãn VPN dù không dùng VPN; còn địa chỉ IPv6 của bạn, vì không bị chia sẻ, không gặp phải rủi ro cụ thể này. Nhưng ngược lại, một địa chỉ IPv6 không chia sẻ cũng là một dấu hiệu nhận diện cá nhân bạn chính xác hơn một chút, vì không có lưu lượng của thuê bao khác trộn lẫn vào để làm mờ bức tranh đó. (Cơ chế thuê/xoay vòng địa chỉ theo thời gian được giải thích đầy đủ trong bài vì sao địa chỉ IP của bạn cứ đổi — ở đây chỉ bàn về khác biệt giữa hai họ giao thức trong việc "có bị chia sẻ hay không".)
Điều bạn có thể kiểm tra ngay bây giờ
Mở thông tin IP và xem hai địa chỉ mà nó báo cáo:
- Chúng có định vị về cùng một nơi không? Nếu không, nhiều khả năng là do độ phủ của cơ sở dữ liệu với IPv6 còn mỏng, chứ không phải lỗi — xem lý do tại độ chính xác định vị qua IP.
- Nếu bạn đang dùng VPN hay proxy, nó có hiện cả địa chỉ IPv4 thoát ra từ đường hầm lẫn một địa chỉ IPv6 không đi qua đường hầm không? Nếu địa chỉ IPv6 thật của bạn hiện ra cùng với một địa chỉ IPv4 đã qua đường hầm, nghĩa là đường hầm của bạn không phủ IPv6, và bạn đang rò rỉ qua nó trên mọi website dual-stack.
- Tải lại trang vài lần. Trên một kết nối dual-stack hoạt động tốt, kết quả thường sẽ đứng yên vì IPv6 cứ thắng mãi — kết quả ổn định là chuyện bình thường, không có nghĩa là chẳng có cuộc đua nào diễn ra. Còn nếu kết quả IPv4/IPv6 thực sự thay đổi giữa các lần tải mà không có gì khác thay đổi, đó là cuộc đua ngã ngũ khác đi khi điều kiện mạng dao động — cũng đúng như dự kiến, không phải lỗi.
Bài này nằm ở đâu so với các bài khác về IP trên trang
Chủ đề này rất dễ bị nhầm với ba cơ chế khác nằm ở các bài lân cận, nên cần nói rõ ranh giới: IPv6 Privacy Extensions nói về phần hậu tố tạm thời trong địa chỉ IPv6 của bạn xoay vòng theo thời gian, trên cùng một mạng; vì sao địa chỉ IP của bạn cứ đổi nói về việc thuê DHCP và CGNAT cấp lại địa chỉ cho bạn theo thời gian; độ chính xác định vị qua IP nói về việc một địa chỉ bất kỳ ánh xạ tới một địa điểm ra sao. Bài này không nói về xoay vòng cũng không nói về ánh xạ — mà nói về việc, trong hai địa chỉ đồng thời hợp lệ của bạn, máy chủ thực sự quan sát thấy địa chỉ nào ở một lần kết nối cụ thể, và vì sao lựa chọn đó không phải do bạn quyết định.
Câu hỏi thường gặp
Công cụ chỉ hiện cho tôi một địa chỉ. Có phải nó bị lỗi không?
Gần như chắc chắn là không. Lý do thường gặp là nhà mạng cố định hoặc nhà mạng di động của bạn chưa triển khai IPv6 trên đường kết nối này, nên đúng là chỉ có một địa chỉ công cộng để báo — mức độ triển khai IPv6 vẫn còn khác nhau rất nhiều giữa các quốc gia và nhà cung cấp. Trường hợp ngược lại hiếm gặp hơn là mạng chỉ có IPv6 và truy cập các website IPv4 qua một cổng chuyển đổi: khi đó địa chỉ IPv4 mà website ghi nhận thuộc về cổng của nhà mạng chứ không phải của bạn. Dù là trường hợp nào, chỉ có một địa chỉ nghĩa là chẳng có cuộc đua nào để chạy.
Vì sao website đôi khi hiện sai quốc gia?
Nếu cụ thể là địa chỉ IPv6 của bạn bị định vị sai, nguyên nhân phổ biến là độ phủ của cơ sở dữ liệu với không gian địa chỉ IPv6 còn mỏng — xem đầy đủ (kể cả nguyên nhân phía IPv4) tại độ chính xác định vị qua IP.
Tôi có thể buộc trình duyệt luôn dùng IPv4 hoặc luôn dùng IPv6 không?
Hầu hết hệ điều hành cho phép bạn tắt một trong hai giao thức ở cấp giao diện mạng, khiến nó bị loại hoàn toàn khỏi cuộc đua Happy Eyeballs. Tuy nhiên đây là biện pháp khá thô: nó ảnh hưởng tới mọi kết nối trên giao diện đó, không chỉ kết nối bạn đang muốn xử lý sự cố, và việc tắt IPv6 không khiến bạn riêng tư hơn — nó chỉ đơn giản là bớt đi một trong hai địa chỉ của bạn.
Có cả địa chỉ IPv4 lẫn IPv6 có phải là rủi ro riêng tư không?
Bản thân điều đó thì không. Nó chỉ có nghĩa là có hai địa chỉ cần kiểm tra thay vì một, đặc biệt khi bạn muốn xác nhận VPN hay proxy có phủ toàn bộ lưu lượng của bạn hay không — như đã nói ở trên, một địa chỉ IPv6 bị bỏ lại ngoài đường hầm chính là một rò rỉ thật sự.
Happy Eyeballs có nghĩa là IPv6 luôn được thử trước không?
Nó được cho một khoảng lợi thế đi trước (RFC 8305 gợi ý khoảng 250 mili giây) trước khi IPv4 cũng được thử, và bên nào hoàn tất bắt tay TCP trước thì thắng — vậy nên IPv6 có ưu tiên khi nó nhanh và hoạt động tốt, nhưng một đường IPv6 chậm hoặc có vấn đề sẽ nhường chỗ cho IPv4 ngay trong cùng lần thử kết nối đó, thay vì khiến kết nối thất bại hẳn.
Kết luận
Hai địa chỉ, hai quyết định độc lập: hệ điều hành chọn địa chỉ cục bộ phù hợp cho một đích đến, còn trình duyệt cho hai họ giao thức đua nhau và giữ lại bên nào phản hồi trước. Không quyết định nào trong hai cái này có thể nhìn thấy được từ bên trong trình duyệt, và cũng không cái nào là thứ bạn cấu hình riêng cho từng lượt truy cập — đó chính xác là lý do vì sao địa chỉ mà một website nhìn thấy có thể đổi giữa các lần tải trang dù phía bạn không có gì thay đổi. Chỗ duy nhất mà chuyện này thôi là lý thuyết suông và bắt đầu thực sự quan trọng chính là đường hầm: nếu bạn đang dựa vào VPN hay proxy, việc kiểm tra xem nó có phủ cả hai họ giao thức hay không chính là ranh giới giữa một kết nối thực sự riêng tư và một kết nối đang âm thầm rò rỉ qua địa chỉ mà bạn đã quên mất là mình có.
Đọc thêm:
- IPv6 Privacy Extensions: ngăn địa chỉ của bạn theo dõi chính bạn
- Vì sao địa chỉ IP của bạn cứ đổi (và khi nào thì không)
- Định vị qua IP: cân bằng độ chính xác và quyền riêng tư
- Chống rò rỉ WebRTC: Điều bắt buộc cho người dùng VPN
- Ngăn rò rỉ DNS: Che giấu dấu vết duyệt web của bạn
- Bị gắn nhãn VPN dù không dùng VPN: vì sao lại xảy ra


