IPv6 (Internet Protocol version 6) là phiên bản mới nhất của Giao thức Internet (IP), giao thức truyền thông cung cấp một hệ thống định vị vị trí cho các máy tính trên mạng và định tuyến lưu lượng trên Internet. IPv6 đã được IETF phát triển để giải quyết vấn đề cạn kiệt địa chỉ IPv4. IPv6 được tạo ra để thay thế IPv4. Như vậy, giao thức IPv6 đang dần được sử dụng phổ biến và chúng tôi viết loạt bài viết này để giới thiệu cho các bạn về giao thức IPv6.
Lịch sử ra đời của IPv6
Internet Engineering Task Force (IETF) là tổ chức chịu trách nhiệm về việc xác định các tiêu chuẩn Giao thức Internet (IP). Khi phát triển IPv4, IETF đã không dự đoán trước được sự phát triển quá nhanh của Internet toàn cầu cũng như những vấn đề bảo mật Internet quan trọng khác. Trong thiết kế ban đầu của IPv4, an ninh mạng không được coi trọng. Vào những năm 1980, khi IPv4 đang được phát triển, thì Internet mới đang được xây dựng dưới sự hợp tác của một số tổ chức. Đến khi IPv4 hoàn tất, cũng là lúc Internet bắt đầu bùng nổ, các mối đe dọa trên Internet trở nên phổ biến. Nếu môi trường hiện tại của các mối đe dọa trực tuyến được dự đoán ngay từ khi phát triển IPv4 thì chúng ta đã có nhiều biện pháp bảo mật hơn được kết hợp với thiết kế của nó. Nhưng điều đó đã không xảy ra. Đầu những năm 1990, IETF đã thừa nhận rằng cần phải có một phiên bản IP mới và họ bắt đầu bằng việc soạn thảo các yêu cầu mà bản IP này cần phải có. IP Next Generation (IPng) đã được tạo ra, sau đó trở thành IPv6 (RFC 1883) như ngày nay. IPv6 là giao thức lớp mạng chuẩn thứ 2 sau IPv4, được dùng cho truyền thông máy tính thông qua Internet và các mạng máy tính khác. IPv6 cung cấp một số chức năng hấp dẫn và thực sự là bước tiếp theo trong quá trình phát triển IP. Những cải tiến này bao gồm việc tăng không gian địa chỉ, định dạng header được sắp xếp hợp lý, header có thể mở rộng và khả năng duy trì tính riêng tư, toàn vẹn của thông tin được truyền trong mạng. IPv6 sau đó được chuẩn hóa hoàn chỉnh vào cuối năm 1998 trong RFC 2460. IPv6 đã hoàn thiện những thiếu sót mà IPv4 để lại và tạo ra những cách mới để truyền thông mà IPv4 không thể hỗ trợ. IPv6 cung cấp một số cải tiến so với IPv4. Ưu điểm của IPv6 được trình bày khá chi tiết trong các tài liệu liên quan. Dưới đây là những đặc tính tóm tắt của IPv6 và những cải tiến mà nó có thể cung cấp:

Nguồn ảnh: Wikipedia
Không gian địa chỉ IPv6
Sự khác nhau đáng kể nhất giữa hai giao thức này là chiều dài của địa chỉ nguồn và địa chỉ của chúng. Việc chuyển sang sử dụng IPv6 là do ngày càng thiếu về số địa chỉ IP. Giao thức IPv6 này có một không gian địa chỉ lớn hơn so với giao thức IPv4.

2001:f68:000:000:000:000:1986:69af
2001:f68:00:00:00:00:1986:69af
2001:f68:0:0:0:0:1986:69af
2001:f68::1986:69af Lưu ý rằng trong mỗi dòng, chúng tôi đã lược bỏ bớt một số 0 trong mỗi nhóm. Khi mà các phần còn lại là các con số 0 chúng ta lại có thể áp dụng thay thế 4 số 0 liên tiếp bằng hai dấu “::”. Điều này chỉ có thể thực hiện được nếu bốn số 0 đi liền nhau mà thôi. Nếu không thỏa mãn điều kiện đó thì chúng ta phải để nguyên các số 0.
Sử dụng các địa chỉ IPv6 trong URL
Mặc dù các máy chủ DNS có thể truy cập vào một website bằng cách sử dụng tên miền thay cho sử dụng một địa chỉ IP, nhưng bạn vẫn có thể vào một địa chỉ IP thay cho một phần của một URL. Ví dụ, một website cá nhân sử dụng URL là www.quantrimang.com, tương ứng với nó là địa chỉ IP 24.235.10.4. Với địa chỉ IP như vậy, tôi hoàn toàn có thể truy cập vào website bằng cách nhập vào URL: http://24.235.10.4 Hầu hết những người lướt web thường không sử dụng thói quen nhập vào địa chỉ IP. Tuy vậy, việc truy cập theo kiểu này vẫn tồn tại. Điều này đặc biệt đúng với các ứng dụng web riêng lẻ. Khi không liên quan đến một tên miền, một ứng dụng có khả năng tránh được người dùng trái phép dò dẫm và nhảy vào ứng dụng của bạn một cách tình cờ. Khi một địa chỉ IP được sử dụng thay thế cho một tên miền, thì số cổng đôi lúc được chỉ định như một phần của địa chỉ. Nếu bạn chỉ đơn giản nhập vào sau HTTP:// sau đó là một địa chỉ thì trình duyệt sẽ thừa nhận rằng bạn muốn sử dụng cổng 80. Mặc dù vậy, bạn có thể chỉ định bất kỳ cổng nào để truy cập đến website, ví dụ nếu bạn muốn truy cập đến website www.quantrimang.com bằng địa chỉ IP và cụ thể là cổng 80 được sử dụng thì lệnh nên dùng đó là http://24.235.10.4:80 Giao thức IPv6 cũng vậy, nó cũng được sử dụng như một phần của một URL. Nhưng nếu quan tâm đến định dạng IPv6 thì bạn nên lưu ý rằng một địa chỉ IPv6 gồm có rất nhiều dấu “:”. Điều này đã nảy sinh một vấn để khi trình duyệt của bạn xử lý bất cứ những cái gì đó phía sau dấu “:” như một số chỉ thị của cổng. Trong trường hợp đó, các địa chỉ IPv6 được phân biệt bên trong dấu ngoặc khi chúng được sử dụng như một phần của URL. Ví dụ: nếu bạn đã sử dụng địa chỉ IPv6 mẫu trong một URL thì nó sẽ giống như thế này: HTTP://[2001:0f68:0000:0000:0000:0000:1986:69af]/ Giống như có thể chỉ định số của cổng với địa chỉ IPv4, bạn cũng có thể chỉ định số cổng khi sử dụng địa chỉ IPv6. Số cổng phải đi sau cùng một định dạng bắt buộc như khi sử dụng IPv4. Và ở bên ngoài các dấu ngoặc. Ví dụ, nếu bạn muốn truy cập vào website tại địa chỉ IPv6 mẫu trên theo cổng 80 thì URL nhập vào sẽ như sau: HTTP://[2001:0f68:0000:0000:0000:0000:1986:69af]:80/ Lưu ý rằng số của cổng trong trường hợp này là 80, nằm giữa dấu đóng ngoặc và dấu sổ. Một dấu “:” cũng được sử dụng để định rõ số cổng như trong giao thức IPv4.
Các thành phần của IPv6
Nếu đã quen với IPv4 thì bạn phải biết rằng một địa chỉ IPv4 gồm có 4 phần, mỗi phần được phân biệt với nhau bằng dấu chấm. Một phần trong địa chỉ này biểu thị số mạng và các bit còn lại dùng để phân biệt một host cụ thể trên mạng. Số của các bit thực được thiết kế cho số mạng và số host khác nhau phụ thuộc vào subnet mask.
Một địa chỉ IPv4 được chia thành các phần khác nhau, trong địa chỉ IPv6 cũng vậy. Trong bài trước, bạn đã biết được về các địa chỉ IPv6 có 128 bit chiều dài. Khi một địa chỉ IPv6 được viết theo dạng đầy đủ, nó được diễn tả thành 8 phần khác nhau, mỗi phần có 4 số và được phân tách bằng dấu “:”. Mỗi phần có 4 chữ số này biểu thị 16 bit dữ liệu, mỗi trường 16 bit này lại được sử dụng cho các mục đích riêng biệt.

Site prefix cũng giống như số mạng của IPv4. Nó là số được gán đến trang của bạn bằng một ISP. Điển hình, tất cả các máy tính trong cùng một vị trí sẽ được chia sẻ cùng một site prefix. Site prefix hướng tới dùng chung khi nó nhận ra mạng của bạn và cho phép mạng có khả năng truy cập từ Internet.
Không giống như site prefix, subnet ID mang tính riêng bởi vì nó ở bên trong mạng của bạn, subnet ID miêu tả cấu trúc trang của mạng. Subnet ID làm việc rất giống với cách mà mạng con làm việc trong giao thức IPv4. Sự khác nhau lớn nhất ở đây là các mạng có đó có thể dài 16 byte là được biểu thị trong định dạng hex nhiều hơn là ký hiệu chữ thập phân có nhiều dấu chấm. Một IPv6 subnet điển hình tương đương với một nhánh mạng đơn (trang) như một subnet của IPv4.
Interface ID làm việc giống như một ID cấu hình IPv4. Số này nhận dạng duy nhất một host riêng trong mạng. Interface ID (thứ mà đôi khi được cho như là một thẻ) được cấu hình tự động điển hình dựa vào địa chỉ MAC của giao diện mạng. ID giao diện có thể được cấu hình bằng định dạng EUI-64.
Để xem một địa chỉ IPv6 được phân chia như thế nào thành các phần con khác nhau của nó, bạn hãy quan sát đến địa chỉ dưới đây:
2001:0f68:0000:0000:0000:0000:1986:69af
Phần site prefix của địa chỉ này là: 2001:0f68:0000. Trường tiếp theo là 0000 biểu thị subnet ID. Các byte còn lại (0000:0000:1986:69af) biểu thị interface ID.
Điển hình khi một tiền tố được biểu diễn, nó được viết trong một định dạng đặc biệt. Các số 0 trong đó đã giải thích trong bài viết trước và các tiền tố được theo sau bởi một dấu sổ và số. Số sau dấu sổ chỉ số lượng của các bit trong tiền tố. Trong ví dụ trước tôi đã đề cập đến site prefix cho địa chỉ 2001:0f68:0000:0000:0000:0000:1986:69af là 2001:0f68:0000. Khi tiền tố này có chiều dài 48 bit thì chúng ta nên thêm vào đó a /48 để kết thúc nó hợp thức. Với các con số 0 đã bỏ, tiền tố đó sẽ viết như sau: 2001:f68::/48
Các loại địa chỉ IPv6
IPv6 có ba loại địa chỉ khác nhau: Unicast, Multicast và Anycast. Địa chỉ Unicast được sử dụng để phân biệt các host đơn lẻ trên một mạng. Các địa chỉ Multicast lại sử dụng để phân biệt một nhóm các giao diện mạng cư trú điển hình trong các máy tính phức hợp. Khi một gói dữ liệu được gửi đến địa chỉ multicast thì gói đó được gửi đến tất cả các giao diện mạng trong nhóm Multicast. Giống như các địa chỉ Multicast, các địa chỉ Anycast cũng phân biệt một nhóm cụ thể các giao diện mạng thường cư trú trong các máy tính phức hợp. Vậy cái gì tạo tuyến Anycast khác với một nhóm Multicast? Khi các gói được gửi đi đến một địa chỉ Multicast chúng được gửi đến tất cả các giao diện mạng trong nhóm. Trái ngược với điều đó, khi các gói dữ liệu được gửi đi đến một địa chỉ Anycast thì các gói này không gửi đến toàn bộ nhóm mà thay vì đó chúng chỉ được gửi đến thành viên gần nhất về mặt vật lý với người gửi.

Nguồn ảnh: Cisco Các địa chỉ Unicast:
Chúng tôi đã giới thiệu cho các bạn định dạng của một địa chỉ IPv6 và những vị trí bit khác nhau được sử dụng. Quả thực có hai loại địa chỉ Unicast khác nhau đó là: toàn cục và liên kết cục bộ. Một địa chỉ Unicast toàn cục có thể truy cập rộng rãi trong khi đó địa chỉ Unicast liên kết cục bộ chỉ có thể truy cập đến các máy tính khác mà chia sẻ liên kết. Định dạng địa chỉ IP mà tôi đã giới thiệu cho các bạn ở phần trước là một địa chỉ unicast toàn cục. Chúng tôi đã nói về loại địa chỉ này bởi vì nó là loại địa chỉ chung nhất. Các địa chỉ Unicast liên kết cục bộ đã sử dụng một định dạng địa chỉ khác với các địa chỉ Unicast toàn cục. Giống như các địa chỉ Unicast toàn cục, các địa chỉ Unicast liên kết cục bộ cũng gồm 128 byte chiều dài. Sự khác nhau ở hai loại này là các byte được phân phối khác nhau và địa chỉ sử dụng một site prefix đặc biệt. Trong một địa chỉ Unicast liên kết nội bộ, một site prefix chiếm 10 bit đầu tiên của địa chỉ thay vì 48 bit đầu như trong trường hợp của địa chỉ Unicast toàn cục. Site prefix được sử dụng bằng một địa chỉ Unicast liên kết cục bộ là: fe80. Khi site prefix được viết ngắn lại (so với một địa chỉ Unicast toàn cục), bạn có thể không ngạc nhiên khi thấy rằng số lượng của không gian chỉ định trong subnet ID đã được mở rộng từ 16 bit thành 64 bit. Những gì ở đây là 64 bit đó không thực sự được sử dụng. Nhớ rằng một địa chỉ IP liên kết cục bộ chỉ hợp lệ cho các máy tính đang chia sẻ một liên kết chung. Như vậy, không có lý do nào để cần phải có một subnet ID. 64 bit của không gian địa chỉ mà được dành riêng cho subnet ID được biểu diễn như những số 0. Interface ID cho một địa chỉ unicast liên kết cục bộ có chiều dài 54 bit. Interface ID hầu như luôn được bắt nguồn từ 48 bit địa chỉ MAC đã gán vào card giao diện mạng để giao thức được phân danh giới. Dưới đây là một ví dụ về một địa chỉ unicast liên kết cục bộ. Fe80:0000:0000:0000:0000:0000:23a1:b152 Tất nhiên khi các địa chỉ IPv6 được viết ra thì chúng thường được diễn tả với một loạt con số 0 đã bị triệt tiêu. Chính vì vậy, một công thức viết tắt đúng kỹ thuật địa chỉ này là: Fe80::23a1:b152 Khi các địa chỉ đã diễn tả với các số 0 đã bị triệt tiêu, thì địa chỉ đầu tiên trông giống như bất kỳ địa chỉ IPv6 nào. Nhớ rằng bạn có thể nói được sự khác nhau giữa một địa chỉ Unicast liên kết cục bộ với các địa chỉ khác bởi vì một địa chỉ Unicast cục bộ sẽ luôn luôn bắt đầu với fe80. Địa chỉ Multicast:

Giá trị thập phân
Giá trị nhị phân
Phạm vi địa chỉ
0
0000
Dự trữ
1
0001
Phạm vi nút nội bộ
2
0010
Phạm vi liên kết nội bộ
5
0101
Phạm vi trang nội bộ
8
1000
Phạm vi tổ chức nội bộ
14
1110
Phạm vi toàn cầu
15
1111
Dự trữ
112 bit còn lại được sử dụng cho nhóm ID. Kích thước của nhóm ID cho phép các địa chỉ Multicast dùng hết 1/256 phần không gian địa chỉ của IPv6. Để đặt lược đồ địa chỉ này trong phần sắp tới, chúng tôi cho bạn xem một số địa chỉ Multicast được sử dụng thường xuyên nhất: FF0x0:0:0:0:0:1 Đây là một Multicast cho tất cả các nút. Bạn có thể phải lưu ý đến chữ “x” trong địa chỉ, nó không phải là một kí tự hệ số hex. Nó là một trình giữ chỗ cho phạm vi. Địa chỉ cụ thể này có thể sử dụng phạm vi nút nội bộ (FF01:0:0:0:0:0:1) hoặc phạm vi liên kết nội bộ (FF02:0:0:0:0:0:1). FF0x:0:0:0:0:0:2 Địa chỉ Multicast này được gán cho tất cả các router bên trong phạm vi đã định nghĩa. Ở đây cũng có kí tự “x”, nó cũng có chức năng tương tự. Các phạm vi hợp lệ là nút nội bộ (FF01:0:0:0:0:0:2), liên kết nội bộ (FF02:0:0:0:0:0:2) và trang nội bộ (FF05:0:0:0:0:0:2). Địa chỉ Anycast: Nếu đã nghiên cứu giao thức IPv4 thì bạn có thể biết được rằng các khái niệm của Unicast và Multicast cũng tồn tại ở IPv4, mặc dù vậy ở IPv6 chúng được bổ sung nhiều vấn đề khác. Anycast là duy nhất với IPv6. Anycast làm việc giống như một sự kết hợp các địa chỉ Unicast và Multicast. Một địa chỉ unicast được sử dụng để gửi dữ liệu đến một người nhận cụ thể nào đó, một địa chỉ Multicast được sử dụng để gửi dữ liệu đến một nhóm người nhận còn một địa chỉ anycast thì được sử dụng để gửi dữ liệu đến một người nhận cụ thể ở ngoài nhóm người nhận. Trong trường hợp bạn đang phân vân rằng anycast được tạo như một cách làm cân bằng tải trở lên dễ dàng hơn. Hãy hình dung một tình huống bạn cần cung cấp một số lượng lớn người dùng để họ có thể truy cập đến các dịch vụ hoặc đến một router của họ. Trong tình huống như vậy thì nó thường làm cho bạn phải sử dụng nhiều máy chủ để cấu hình dịch vụ đang được cung cấp hoặc sử dụng các router phức hợp hay bất cứ trường hợp nào có thể. Lý do ở đây là vì nó có thể cho phép phân phối luồng công việc giữa các thiết bị phức hợp. Loại cân bằng tải này thực hiện rất khó khăn nếu sử dụng Ipv4 (mặc dù nó đã được thực hiện). Siệc sử dụng các địa chỉ anycast với IPv6 sẽ cho hiệu quả tuyệt đối với việc cân bằng tải. Bạn cần gửi một yêu cầu người dùng đến một trong những thiết bị, trong khi không thể quan tâm đến các thiết bị đã được chỉ định quản lý yêu cầu mà chỉ là yêu cầu phải được quan tâm. Bằng việc sử dụng các địa chỉ Anycast, mỗi yêu cầu sẽ tự động gửi đến thiết bị gần nhất về mặt địa lý đến máy tính đưa ra yêu cầu. Trong một số tình huống, anycast thậm có thể được sử dụng để cung cấp lỗi dung sai cho một router lỗi. Lỗi có thể được phát hiện và các yêu cầu có thể được gửi lại vòng qua một router khác lân cận. Vấn đề kỳ lạ nhất với các địa chỉ anycast là không có lược đồ định địa chỉ đặc biệt nào. Với những gì trong bài viết này, bạn đã thấy được có rất nhiều loại nguyên tắc bao trùm sử dụng và cấu trúc của các địa chỉ unicast và Multicast là để gán cùng một địa chỉ Unicast cho các host phức hợp. Với cách làm như vậy các địa chỉ Unicast trở thành một địa chỉ Anycast. Trong loạt bài viết này, chúng tôi đã cố gắng lướt qua một cách cơ bản về giao thức IPv6. Hầu hết các quản trị viên có thể không cần phải trở thành các chuyên gia ngay lập tức nhưng IPv6 là một thành phần cần thiết trong Windows Vista và Longhorn Server. Chính vì vậy, chúng ta tìm hiểu để biết chút ít về nó là một việc làm cần thiết.