Chuyển đến nội dung chính (Skip to content)
CCNA

IPv6: địa chỉ, NDP, SLAAC và kiểm tra kết nối

IPv6: địa chỉ, NDP, SLAAC và kiểm tra kết nối

Đọc địa chỉ IPv6 và phân biệt link-local, RA, NDP, SLAAC với DHCPv6. Theo dõi vòng đời địa chỉ và chọn phép kiểm tra theo interface, route và neighbor.

Một máy Windows có ba địa chỉ IPv6 trên cùng card mạng: một địa chỉ bắt đầu bằng fe80, một địa chỉ ổn định và một địa chỉ tạm thời. Người hỗ trợ cho rằng máy bị cấp trùng nên tắt IPv6. Thao tác này có thể làm mất đường truy cập đang dùng mà chưa giải thích được lỗi. IPv6 cho phép một interface có nhiều địa chỉ với vai trò và thời gian sống khác nhau; số lượng địa chỉ tự nó chưa chứng minh có sự cố.

Bài này dùng LAN giả định 2001:db8:10::/64, gateway link-local fe80::1 và client minh họa 2001:db8:10::20. Khối 2001:db8::/32 dành cho tài liệu, không dùng để thử Internet thật. Ta tập trung vào địa chỉ, Neighbor Discovery và SLAAC trên Ethernet; ví dụ không phải capture hay kết quả chạy router thực.

1. Đọc địa chỉ 128 bit mà không nhầm cách viết với giá trị

IPv6 có 128 bit, thường viết thành tám nhóm 16 bit bằng hệ hexadecimal. Mỗi nhóm đầy đủ có bốn ký tự. Có thể bỏ số 0 đứng đầu từng nhóm và thay một chuỗi nhóm bằng 0 bằng dấu ::, nhưng chỉ dùng dấu rút gọn này một lần trong một địa chỉ. Nếu dùng hai lần, không xác định được mỗi bên thay bao nhiêu nhóm.

Ví dụ 2001:0db8:0010:0000:0000:0000:0000:0020 và 2001:db8:10::20 là cùng một giá trị. Chữ hoa/thường cũng không tạo ra địa chỉ khác. RFC 5952 khuyến nghị cách viết chuẩn để log và hồ sơ dễ so sánh. Đừng so sánh chuỗi thô rồi báo hai địa chỉ khác nhau chỉ vì một bên còn số 0.

/64 nghĩa 64 bit đầu là prefix mạng trong ví dụ. Bốn nhóm đầu xác định 2001:db8:10:0::/64; phần còn lại là interface identifier. /64 là ranh giới điển hình cho SLAAC trên Ethernet. Điều đó không có nghĩa mọi tuyến IPv6 đều bắt buộc /64: route host /128 và liên kết router /127 là các trường hợp có mục đích riêng.

Cấu trúc tám nhóm IPv6 và prefix /64 của địa chỉ tài liệu
Cùng giá trị có thể có nhiều cách viết hợp lệ. Prefix là số bit, không phải số nhóm có ký tự khác 0.

Cuộn ngang khi cần, hoặc chạm sơ đồ để mở ảnh gốc.

Khi ghi URL có IPv6 literal, đặt địa chỉ trong ngoặc vuông để phân biệt dấu hai chấm trong địa chỉ với dấu ngăn port, ví dụ https://[2001:db8:10::20]:8443/. Đây chỉ là minh họa cú pháp, không phải một website để truy cập. Kiểm tra dịch vụ bằng tên vẫn cần xem DNS trả bản ghi AAAA nào và client chọn đường nào.

2. Phân biệt link-local, global unicast, ULA và multicast

Link-local thuộc không gian fe80::/10 theo kiến trúc địa chỉ, được dùng trên liên kết và không được router chuyển tiếp như địa chỉ toàn cục. Khi cùng giá trị fe80::1 xuất hiện ở nhiều interface, nó không nhất thiết là địa chỉ trùng trên cùng một link. Hệ thống cần phạm vi interface, thường thể hiện bằng zone/interface index, để biết gửi qua đâu.

Global unicast được dùng cho định tuyến toàn cục khi prefix được cấp và mạng có kết nối, còn ULA thuộc fc00::/7 phục vụ không gian địa chỉ cục bộ theo quy tắc riêng. Với ULA tự sinh theo cách thông dụng, phần địa chỉ bắt đầu bằng fd và có Global ID được chọn phù hợp. Không chọn một khối ULA tùy tiện rồi hứa không thể va chạm khi ghép mạng.

Kiến trúc địa chỉ IPv6 phân biệt unicast, anycast và multicast. Anycast không có một dạng tiền tố riêng dễ nhận biết chỉ qua hình thức: cùng địa chỉ unicast có thể được gán theo ngữ nghĩa anycast trong một thiết kế. Multicast thuộc ff00::/8; IPv6 không có broadcast tương đương cách IPv4 phát tới mọi host trong subnet.

Địa chỉ loopback ::1 chỉ chính host; unspecified :: thể hiện chưa có địa chỉ trong các ngữ cảnh nhất định, không phải IP để cấp cho một máy người dùng. 2001:db8::/32 là khối tài liệu theo RFC 3849; không nhầm nó với prefix public đã được ISP cấp.

Một client có thể giữ địa chỉ ổn định cho việc nhận kết nối và địa chỉ tạm thời để giảm khả năng liên kết các phiên theo cùng định danh. Chính sách này phụ thuộc hệ điều hành. Cần đọc trạng thái preferred/deprecated và lifetime trước khi xóa một địa chỉ mà bạn cho là dư.

3. Neighbor Discovery làm nhiều việc hơn ánh xạ MAC

IPv6 không dùng ARP. Neighbor Discovery chạy bằng các thông điệp ICMPv6 để hỗ trợ tìm router, xác định neighbor trên link, kiểm tra khả năng tiếp cận và các nhiệm vụ liên quan. Neighbor Solicitation và Neighbor Advertisement có vai trò trong phân giải địa chỉ Layer 2, nhưng không nên mô tả toàn bộ NDP là ARP đổi tên.

RFC 4861 mô tả cơ chế này. Khi client cần gửi tới next hop trên Ethernet mà chưa biết địa chỉ Layer 2, nó có thể gửi NS tới solicited-node multicast thích hợp. Đích phản hồi bằng NA trong trường hợp bình thường. Một mục neighbor tồn tại vẫn cần đọc trạng thái; chưa chứng minh HTTP hay SSH phía trên sẽ thành công.

Client tìm router bằng RS/RA và phân giải neighbor bằng NS/NA
RS/RA dùng cho thông tin router; NS/NA dùng cho các nhiệm vụ neighbor. Sơ đồ rút gọn, không mô tả mỗi lần gửi dữ liệu đều phải chạy toàn chuỗi.

Cuộn ngang khi cần, hoặc chạm sơ đồ để mở ảnh gốc.

Router Solicitation giúp host chủ động yêu cầu thông tin router; Router Advertisement có thể xuất hiện định kỳ hoặc để phản hồi RS. Default router thường được học từ nguồn link-local của RA với router lifetime thích hợp. Không lấy một địa chỉ global trong prefix rồi mặc định nó phải là gateway.

Chặn toàn bộ ICMPv6 có thể phá các chức năng nền tảng, bao gồm neighbor discovery và báo Packet Too Big cần cho Path MTU Discovery. Chính sách bảo mật nên phân loại thông điệp, hướng và phạm vi thay vì sao chép quy tắc chặn ICMPv4 thành một lệnh chặn mọi ICMPv6. Khả năng mạng có IPv4 hoạt động không chứng minh nhánh IPv6 đã đúng.

4. SLAAC dùng RA nhưng không cấp mọi thứ bằng một cơ chế

Trong SLAAC, host kết hợp prefix được quảng bá có điều kiện phù hợp với interface identifier do chính nó hình thành. Prefix Information có cờ và lifetime; cờ autonomous cho phép tạo địa chỉ, còn thông tin on-link phục vụ một quyết định khác. Hai cờ này không phải một. RA có thể mang nhiều prefix và không nhất thiết mọi prefix đều được dùng để tạo địa chỉ.

RFC 4862 mô tả autoconfiguration và Duplicate Address Detection. Địa chỉ mới có thể ở trạng thái tentative trong khi kiểm tra trùng; khi có xung đột hoặc trạng thái không hợp lệ, nó không được dùng như một địa chỉ preferred bình thường. Không giải thích DAD là ping một server trung tâm để xin quyền cấp IP.

DHCPv6 có thể cấp địa chỉ hoặc thông tin khác theo thiết kế, nhưng không thay RA để cấp default gateway theo cách DHCPv4 thường làm. DNS có thể đến từ thông tin RA phù hợp hoặc DHCPv6, tùy môi trường và hỗ trợ client. Thấy một địa chỉ global chưa đủ để kết luận client có default route và resolver đúng.

Các trạng thái địa chỉ từ tentative qua preferred, deprecated và invalid
Lifetime của địa chỉ và lifetime của default router là các dữ kiện khác nhau. Địa chỉ còn tồn tại không bảo đảm đường ra vẫn có.

Cuộn ngang khi cần, hoặc chạm sơ đồ để mở ảnh gốc.

EUI-64 sửa đổi là một cách hình thành identifier được giảng dạy trong CCNA, không phải mô tả bắt buộc mọi client hiện nay. Với MAC 00:11:22:33:44:55, chèn ff:fe và đảo bit U/L sẽ có identifier 0211:22ff:fe33:4455. Các cách tạo identifier ổn định không phụ thuộc MAC được mô tả trong RFC 7217; còn có cơ chế địa chỉ tạm thời theo hệ điều hành.

5. Đọc địa chỉ, route và neighbor trên đúng interface

Trên Windows 11, PowerShell có thể dùng các lệnh đọc trạng thái dưới đây. Danh sách có thể dài nếu có VPN hoặc adapter ảo; ghi interface index tương ứng với card đang xử lý sự cố. Không chọn địa chỉ đầu tiên trong output rồi giả định ứng dụng đang dùng nó.

Get-NetIPAddress -AddressFamily IPv6
Get-NetRoute -AddressFamily IPv6
Get-NetNeighbor -AddressFamily IPv6
ipconfig /all

Trên Linux có iproute2, dùng ip -6 addr, ip -6 route và ip -6 neigh. Khi thử link-local, chỉ rõ interface theo cú pháp của công cụ, chẳng hạn ping -6 fe80::1%eth0 trên hệ thống hỗ trợ tên zone như vậy. Thay eth0 bằng interface thật; Windows thường cần chỉ số interface. Không dùng ví dụ này để khẳng định gateway của mạng bạn là fe80::1.

Trên Cisco IOS/IOS XE hỗ trợ IPv6, các lệnh show ipv6 interface brief, show ipv6 route và show ipv6 neighbors giúp đối chiếu. Tính năng, format và quyền có thể khác theo nền tảng. Đây là hướng dẫn đọc dữ liệu, chưa bao gồm việc bật routing hoặc sửa RA trên thiết bị đang dùng chung.

Tài liệu Cisco về stateless autoconfiguration giúp nối địa chỉ với RA trong ngữ cảnh IOS. Khi hệ điều hành client dùng identifier khác EUI-64, hãy đối chiếu nguồn riêng của client thay vì cho rằng RA đã sai vì không nhìn ra MAC trong IPv6.

6. Kiểm chứng cách viết và khoanh vùng lỗi theo điều kiện

Đoạn Python dưới đây chỉ kiểm tra giá trị địa chỉ và subnet, không gửi traffic. Kết quả đã được chạy bằng module chuẩn khi biên tập, nhưng không phải bằng chứng kết nối IPv6 vật lý.

from ipaddress import IPv6Address, IPv6Network

addr = IPv6Address("2001:0db8:0010:0000:0000:0000:0000:0020")
assert str(addr) == "2001:db8:10::20"
assert addr in IPv6Network("2001:db8:10::/64")
assert IPv6Address("fe80::1").is_link_local
assert addr not in IPv6Network("2001:db8:11::/64")

Nếu chỉ có link-local, kiểm tra RA đến interface, prefix autonomous, DAD và chính sách client. Đừng vội yêu cầu DHCPv6 nếu thiết kế đang dùng SLAAC. Nếu có địa chỉ global nhưng thiếu default route, đối chiếu RA/router lifetime. Nếu chỉ một website lỗi, kiểm tra AAAA, đường IPv6 ra ngoài, MTU và TLS thay vì xóa toàn bộ cấu hình.

Thử thành công bằng IPv4 rồi thử riêng IPv6 có giá trị hơn một lần thử bằng tên không ghi endpoint. Trình duyệt có thể chuyển đường theo cơ chế lựa chọn kết nối; thành công nhìn từ người dùng có thể che nhánh IPv6 đang hỏng. Khi báo lỗi, kèm tên, IP đích, interface và thời điểm để phép kiểm tra có thể lặp lại.

7. Giữ nguyên tắc địa chỉ nhiều phạm vi khi học tiếp

Hãy giải thích vì sao fe80::1 cần interface, vì sao một client có nhiều địa chỉ chưa chắc sai và vì sao DHCPv6 không phải lời giải tự động cho thiếu default gateway. Câu trả lời cần phân biệt link scope, vòng đời địa chỉ và cơ chế RA. Sau đó tự rút gọn một địa chỉ có hai chuỗi nhóm 0 nhưng chỉ dùng một dấu ::.

Nếu các bảng đều có vẻ đúng nhưng kết nối chập chờn, cần kiểm tra nền vật lý trước khi thay protocol. Bài cáp và interface sẽ phân tích trạng thái port, CRC và speed/duplex. Có thể trở lại bài subnet IPv4 để đối chiếu khái niệm prefix, nhưng không mang broadcast hay ARP sang IPv6 như những quy tắc giữ nguyên.