TCVN9802-1:2013

Tiêu chuẩn quốc gia TCVN 9802-1:2013 (RFC 2460:1998) về Giao thức internet phiên bản 6 (IPV6)- Phần 1: Quy định kỹ thuật TIÊU CHUẨN QUỐC GIA TCVN 9802-1:2013 RFC 2460:1998 GIAO THỨC INTERNET PHIÊN BẢN 6 (IPV6) - PHẦN 1: QUY ĐỊNH KỸ THUẬT Internet Protocol, version 6 (IPv6) - Specification Lời nói đầu TCVN 9802-1:2013 hoàn toàn tương đương với tài liệu RFC 2460:1998 (Giao thức Internet, phiên bản 6 - đặc điểm kỹ thuật) của Nhóm đặc trách về kỹ thuật Internet (IETF). TCVN 9802-1:2013 do Vụ Khoa học và Công nghệ biên soạn, Bộ Thông tin và Truyền thông đề nghị, Tổng cục Tiêu chuẩn Đo lường Chất lượng thẩm định, Bộ Khoa học và Công nghệ công bố. GIAO THỨC INTERNET PHIÊN BẢN 6 (IPV6) - PHẦN 1: QUY ĐỊNH KỸ THUẬT Internet Protocol, version 6 (IPv6) - Specification 1. Phạm vi áp dụng Tiêu chuẩn này quy định những đặc điểm kỹ thuật của giao thức Internet (IP), phiên bản 6. Giao thức Internet phiên bản 6 (IPv6) được thiết kế để dùng trong các hệ thống liên kết của các mạng truyền thông máy tính chuyển mạch gói. Giao thức IPv6 giúp cho việc truyền các khối dữ liệu, được gọi là các gói tin, từ các nguồn đến các đích, trong đó các nguồn và các đích là các máy chủ được nhận dạng bởi các địa chỉ có độ dài 128 bit. Giao thức IPv6 cho phép phân mảnh và tái lắp ráp các gói tin lớn để truyền qua các mạng truyền gói tin nhỏ, cung cấp các chức năng cần thiết cho việc phân phát một gói các bit (một gói tin Internet) từ nguồn tới đích trên một hệ thống liên kết đa mạng. 2. Tài liệu viện dẫn Các tài liệu viện dẫn sau là cần thiết cho việc áp dụng tiêu chuẩn này. Đối với các tài liệu viện dẫn ghi năm công bố thì áp dụng phiên bản được nêu. Đối với các tài liệu viện dẫn không ghi năm công bố thì áp dụng phiên bản mới nhất, bao gồm cả các sửa đổi (nếu có). TCVN 8072:2009 Mạng viễn thông - Giao thức IPv4 IETF RFC 2402 Mào đầu xác thực IP (IP Authentication Header) IETF RFC 2406 Đóng gói an toàn phần dữ liệu IP (IP Encapsulating Security Payload) 3. Thuật ngữ và định nghĩa 3.1. Nút mạng (Node) Thiết bị thực thi IPv6. 3.2. Bộ định tuyến (Router) Nút mạng có khả năng chuyển tiếp các gói tin IPv6 không được định địa chỉ cho nút mạng đó. 3.3. Máy chủ (Host) Bất kỳ nút mạng nào mà không phải là Bộ định tuyến. 3.4. Tầng trên (Upper layer) Tầng giao thức ngay phía trên IPv6. Ví dụ các giao thức giao vận TCP và UDP, các giao thức điều khiển như ICMP, các giao thức định tuyến như OSPF. 3.5. Liên kết (Link) Thiết bị hay môi trường truyền thông mà trên đó các nút mạng có thể kết nối với nhau tại tầng liên kết, tức là tầng ngay bên dưới IPv6. Ví dụ như mạng Enthernet (kết nối đơn hay kết nối cầu), các liên kết PPP. 3.6. Nút láng giềng (Neighbors) Các nút mạng gắn với cùng một liên kết. 3.7. Giao diện (Interface) Mặt tiếp giáp của nút mạng và liên kết. 3.8. Địa chỉ (Address) Phần định danh tầng IPv6 cho một giao diện hoặc một tập hợp các giao diện. 3.9. Gói tin (packet) Phần mào đầu IPv6 cộng với phần dữ liệu (payload). 3.10. MTU (Maximum Transmission Unit) Đơn vị truyền tải tối đa. 3.11. MTU liên kết (Link MTU) Đơn vị truyền tải tối đa của một liên kết, tức là kích thước lớn nhất của một gói tin (tính bằng octet) có thể truyền tải được qua một liên kết. 3.12. MTU tuyến (Path MTU) MTU liên kết nhỏ nhất trong tất cả các MTU liên kết trên một đường truyền giữa Nút nguồn và Nút đích. 3.13. Địa chỉ Unicast Địa chỉ Unicast dùng để xác định một giao diện (Interface). Gói tin có đích đến là địa chỉ Unicast sẽ được chuyển đến một giao diện duy nhất. 3.14. Địa chỉ Anycast Địa chỉ Anycast dùng để xác định nhiều giao diện. Gói tin có đích đến là địa chỉ Anycast sẽ được chuyển đến một giao diện trong số các giao diện có cùng địa chỉ Anycast, thông thường là giao diện gần nhất (được xác định thông qua giao thức định tuyến đang sử dụng). 3.15. Địa chỉ Multicast Địa chỉ Multicast dùng để xác định nhiều giao diện. Gói tin có đích đến là địa chỉ Mulicast sẽ được chuyển đến tất cả các giao diện có cùng địa chỉ Multicast. 3.16. ICMP (Internet Control Message Protocol) Giao thức bản tin điều khiển Internet. 4. Quy định kỹ thuật 4.1. Giới thiệu Giao thức Internet phiên bản 6 (IPv6) là một phiên bản mới của Giao thức Internet, được thiết kế như sự kế thừa Giao thức Internet phiên bản 4 (IPv4). Những thay đổi từ IPv4 sang IPv6 chủ yếu tập trung vào: Mở rộng không gian địa chỉ: Bằng việc tăng kích cỡ địa chỉ IP từ 32 bit lên 128 bit, IPv6 hỗ trợ nhiều cấp độ phân cấp địa chỉ, nhiều nút mạng định địa chỉ và làm cho quá trình cấu hình tự động của địa chỉ đơn giản hơn. Khả năng mở rộng của định tuyến Multicast (tìm đường đi cho địa chỉ Multicast) được cải thiện bằng cách thêm trường Phạm vi vào địa chỉ Multicast. Đồng thời định nghĩa một kiểu địa chỉ mới là địa chỉ Anycast, được dùng để gửi một gói tin đến một nhóm rút mạng bất kỳ. Đơn giản hóa khuôn dạng Phần mào đầu: Một số trường trong Phần mào đầu IPv4 được lược bỏ hoặc chuyển thành Tùy chọn giúp giảm thời gian xử lý các trường hợp thường gặp của quá trình xử lý gói tin và hạn chế được băng thông phải sử dụng cho Phần mào đầu IPv6. Cải tiến các Phần mở rộng và các Tùy chọn: Các Tùy chọn của Phần mào đầu IP được mã hóa, cho phép chuyển tiếp hiệu quả hơn, giảm bớt các giới hạn nghiêm ngặt về độ dài của các Tùy chọn và tăng tính linh hoạt của các tùy chọn trong tương lai. Khả năng ghi Nhãn luồng: Khả năng mới này của IPv6 cho phép ghi nhãn các gói tin thuộc các luồng lưu lượng cụ thể mà bên gửi yêu cầu xử lý đặc biệt, chẳng hạn như yêu cầu "không thiết lập các thông số mặc định cho chất lượng dịch vụ" hoặc yêu cầu dịch vụ "thời gian thực". Khả năng xác thực và bảo mật: Các Phần mở rộng của Phần mào đầu IPv6 giúp hỗ trợ xác thực, bảo đảm tính toàn vẹn dữ liệu và bảo mật dữ liệu. 4.2. Định dạng của Phần mào đầu của IPv6 Hình 1 - Định dạng Phần mào đầu IPv6 Phiên bản : Sử dụng 4 bit. Số hiệu phiên bản của Giao thức Internet, trong trường hợp này giá trị trường Phiên bản = 6. Phân lớp lưu lượng : Sử dụng 8 bit. (Xem 4.6) Nhãn luồng : Sử dụng 20 bit. (Xem 4.5) Độ dài tải : Sử dụng 16 bit. Độ dài phần dữ liệu của gói tin IPv6, tức là phần còn lại của gói tin sau Phần mào đầu IPv6 này, tính bằng đơn vị octet. Các mào đầu mở rộng [điều 4.3] được coi là một phần của dữ liệu gói tin, do đó nó được tính toán vào chiều dài gói tin. Mào đầu kế tiếp : Sử dụng 8 bit. Xác định kiểu của mào đầu liền kề ngay sau Phần mào đầu IPv6. Giá trị của trường này có cùng giá trị với trường Giao thức của IPv4. Giới hạn số chặng : Sử dụng 8 bit. Giới hạn số chặng chuyển tiếp. Giá trị của trường này sẽ giảm đi 1 mỗi khi gói tin bị chuyển tiếp qua một nút mạng. Gói tin sẽ bị loại nếu trường này giảm xuống 0. Địa chỉ nguồn : Sử dụng 128 bit. Địa chỉ của nơi khởi tạo gói tin. Địa chỉ đích : Sử dụng 128 bit. Địa chỉ của nơi dự kiến sẽ nhận gói tin (có thể không phải là nơi nhận cuối cùng nếu có sự hiện diện của Mào đầu định tuyến). 4.3. Các mào đầu mở rộng của IPv6 Trong IPv6, thông tin về tầng kết nối mạng tùy chọn (optional internet-layer) được mã hóa trong các mào đầu riêng biệt đặt giữa Phần mào đầu IPv6 và mào đầu của tầng trên (upper layer header) trong một gói tin IPv6. Các mào đầu này được gọi là mào đầu mở rộng và được xác định bởi các giá trị khác nhau trong trường Mào đầu kế tiếp của Phần mào đầu IPv6. Một gói tin IPv6 có thể không mang hoặc mang một hay nhiều mào đầu mở rộng, mỗi mào đầu mở rộng cụ thể thì được xác định bởi trường Mào đầu kế tiếp của mào đầu liền kề trước nó. Ví dụ: Hình 2 - Một số ví dụ về các mào đầu mở rộng của gói tin IPv6 Trên đường đi của gói tin, các mào đầu mở rộng không bị kiểm tra hay xử lý bởi bất kỳ nút mạng nào cho đến khi gói tin đến được nút mạng (hoặc bộ các nút mạng trong trường hợp Multicast) đã được xác định trong trường Địa chỉ đích của Phần mào đầu IPv6. Lúc này, quá trình tách kênh (demultiplexing) trong trường Mào đầu kế tiếp của Phần mào đầu IPv6 sẽ gọi các mô đun để xử lý mào đầu mở rộng đầu tiên, hoặc Mào đầu của tầng trên nếu không có sự hiện diện của mào đầu mở rộng nào. Nội dung và ngữ nghĩa trong mỗi mào đầu mở rộng xác định liệu có xử lý hay không xử lý Mào đầu ngay sau nó. Vì vậy, các mào đầu mở rộng phải được xử lý theo đúng trình tự chúng xuất hiện trong gói tin. Có một trường hợp ngoại lệ không giống như đã nói ở trên đó là Mào đầu tùy chọn từng chặng, sự hiện diện của mào đầu này buộc gói tin phải được kiểm tra và xử lý bởi tất cả các nút mạng dọc theo đường đi của một gói tin, bao gồm cả Nguồn và Đích. Vì vậy, Mào đầu tùy chọn từng chặng nếu có thì luôn đứng sau Phần mào đầu IPv6. Sự hiện diện của nó được chỉ định bởi các giá trị 0 trong trường Mào đầu kế tiếp của Phần mào đầu IPv6. Trong quá trình xử lý một mào đầu, một nút mạng được yêu cầu xử lý Mào đầu kế tiếp nhưng nút mạng không nhận diện được giá trị trường Mào đầu kế tiếp trong mào đầu hiện tại, nó sẽ loại bỏ gói tin và gửi một Tin nhắn sự cố tham số ICMP tới nơi tạo lập gói tin, với giá trị mã ICMP là 1 (gặp lỗi không nhận diện được Mào đầu kế tiếp) và trường Con trỏ ICMP có chứa phần lệch của các giá trị không nhận diện được trong các gói tin ban đầu. Hành động tương tự sẽ được thực hiện nếu một nút mạng gặp phải giá trị 0 trong Mào đầu kế tiếp của một mào đầu bất kỳ ngoại trừ Phần mào đầu IPv6. Độ dài của một mào đầu mở rộng luôn là một bội số của 8 octet để luôn giữ được 8 octet cho các mào đầu theo sau. Một thực thi IPv6 đầy đủ bao gồm sự thực thi của các mào đầu mở rộng sau đây: • Tùy chọn từng chặng • Định tuyến (kiểu 0) • Phân mảnh • Tùy chọn đích • Xác thực • Đóng gói an toàn phần dữ liệu (Encapsulating Security Payload) Bốn mào đầu đầu tiên được quy định trong tiêu chuẩn này, hai mào đầu cuối cùng được quy định tương ứng trong [RFC-2402] và [RFC-2406] 4.3.1 Thứ tự của các mào đầu mở rộng Khi gói tin có chứa nhiều mào đầu mở rộng, chúng được sắp xếp theo thứ tự sau: • Phần mào đầu IPv6. • Mào đầu tùy chọn từng chặng. • Mào đầu tùy chọn đích (Chú thích 1). • Mào đầu định tuyến. • Mào đầu phân mảnh. • Mào đầu xác thực (Chú thích 2). • Mào đầu đóng gói an toàn phần dữ liệu (Encapsulating Security Payload) (Chú thích 2). • Mào đầu tùy chọn đích (Chú thích 3). • Mào đầu của tầng trên (Upper layer). CHÚ THÍCH 1: Cho các Tùy chọn được xử lý bởi đích đầu tiên trong trường Địa chỉ đích của Phần mào đầu IPv6 và những nút mạng còn lại được liệt kê trong Mào đầu định tuyến. CHÚ THÍCH 2: Các yêu cầu bổ sung liên quan đến thứ tự tương đối của Mào đầu xác thực và Mào đầu đóng gói an toàn phần tải được đưa ra trong [RFC-2406]. CHÚ THÍCH 3: Cho các Tùy chọn chỉ được xử lý bởi đích đến cuối cùng của gói tin. Mỗi mào đầu mở rộng sẽ xuất hiện nhiều nhất là một lần, ngoại trừ Mào đầu tùy chọn đích. Nó có thể xuất hiện tối đa hai lần (một lần ở trước Mào đầu định tuyến và một lần trước Mào đầu của tầng trên). Nếu Mào đầu của tầng trên cũng là Phần mào đầu IPv6 (trong trường hợp IPv6 được ngầm hóa hoặc đóng gói trong IPv6), nó có thể được theo sau bởi mào đầu mở rộng của chính nó. Nếu nhận diện được mào đầu mở rộng nào khác, thứ tự tương đối của chúng cũng phải xác định theo thứ tự của các mào đầu mở rộng như đã nêu ở trên. Các nút mạng IPv6 phải chấp nhận và cố gắng xử lý các mào đầu mở rộng theo bất kỳ thứ tự nào và thực hiện với số lần xuất hiện bất kỳ trong cùng một gói tin, ngoại trừ trường hợp Mào đầu tùy chọn từng chặng phải xuất hiện ngay sau Phần mào đầu IPv6. Tuy nhiên cần phải nhấn mạnh rằng, các gói tin gốc IPv6 (từ nút nguồn đầu tiên) phải tuân theo thứ tự nêu ở trên [4.3.1] cho đến khi và chỉ khi yêu cầu này được rà soát hoặc sửa đổi. 4.3.2. Các Tùy chọn Hai mào đầu mở rộng là Mào đầu tùy chọn từng chặng và Mào đầu tùy chọn đích đều mang theo một số Tùy chọn được mã hóa kiểu T-L-V (Type-Length-Value) theo định dạng như sau: Kiểu tùy chọn Độ dài Dữ liệu tùy chọn Dữ liệu tùy chọn Kiểu tùy chọn : Sử dụng 8 bit. Ký hiệu nhận dạng kiểu của Tùy chọn Độ dài của Dữ liệu tùy chọn : Sử dụng 8 bit. Độ dài của trường Dữ liệu tùy chọn của chính Tùy chọn đó (đơn vị là Octet). Dữ liệu tùy chọn : Trường có độ dài thay đổi Dữ liệu cụ thể của kiểu Tùy chọn đã xác định ở trên. Chuỗi các Tùy chọn bên trong một mào đầu phải được xử lý đúng theo thứ tự chúng xuất hiện trong mào đầu, nhưng bên nhận có thể không làm như vậy, ví dụ bên nhận có thể quét qua Mào đầu, tìm kiếm một tùy chọn cụ thể và xử lý tùy chọn trước khi xử lý các tùy chọn trước nó. Các bộ nhận dạng Kiểu tùy chọn được mã hóa sao cho nếu trong quá trình xử lý, nút mạng IPv6 không nhận ra Kiểu tùy chọn thì hai bit bậc cao nhất sẽ xác định các bước phải thực hiện: • 00: Bỏ qua Tùy chọn này và tiếp tục xử lý Mào đầu. • 01: Loại bỏ gói tin. • 10: Loại gói tin bất kể Địa chỉ đích của gói tin có thể là một địa chỉ Multicast, đồng thời gửi một Tin nhắn sự cố tham số ICMP, mã 2 tới Địa chỉ nguồn của gói tin và trỏ tới Kiểu tùy chọn chưa nhận ra được. • 11: Loại bỏ gói tin và nếu Địa chỉ đích của gói tin đó không phải là một địa chỉ Multicast thì gửi một Tin nhắn sự cố tham số ICMP, mã 2 tới Địa chỉ nguồn của gói tin, trỏ tới Kiểu tùy chọn chưa xác định được. Bit bậc 3 của Kiểu tùy chọn xác định việc Dữ liệu tùy chọn của Tùy chọn đó có thay đổi hay không thay đổi trên đường đi đến đích cuối cùng của gói tin. Khi một Mào đầu xác thực xuất hiện trong gói tin, bất kỳ Tùy chọn nào mang dữ liệu có thể thay đổi trên đường đi của gói tin thì toàn bộ trường Dữ liệu tùy chọn của Tùy chọn đó phải được coi như những octet không mang giá trị khi tính toán hoặc khi đang xác minh giá trị xác thực của gói tin. • Giá trị 0 (Dữ liệu tùy chọn không thay đổi trên toàn tuyến) • Giá trị 1 (Dữ liệu tùy chọn có thể thay đổi trên toàn tuyến) Ba bit bậc cao được mô tả ở trên được coi như là một phần không tách rời của Kiểu tùy chọn. Do đó, mỗi Tùy chọn cụ thể được xác định bởi đầy đủ 8 bit Kiểu tùy chọn, chứ không phải 5 bit còn lại của Kiểu tùy chọn. Mào đầu tùy chọn từng chặng và Mào đầu tùy chọn đích sử dụng cùng một khoảng cách đánh số Kiểu tùy chọn. Tuy nhiên, các đặc điểm kỹ thuật của một tùy chọn cụ thể có thể giới hạn việc sử dụng khoảng cách này cho chỉ một trong hai mào đầu này. Các Tùy chọn đặc biệt có thể có những yêu cầu liên kết đặc biệt để đảm bảo rằng các giá trị nhiều octet trong các trường Dữ liệu tùy chọn rơi vào trong những giới hạn quy định. Sự sắp xếp của một Tùy chọn được xác định bằng cách sử dụng ký hiệu xn + y, có nghĩa là Kiểu tùy chọn phải xuất hiện tại một số nguyên lần của x octet từ điểm bắt đầu của mào đầu cộng với y octet. Ví dụ: • 2n Được hiểu là lệch đi mỗi khoảng 2 octet bất kỳ kể từ điểm đầu của Mào đầu. • 8n + 2 Được hiểu là lệch đi mỗi khoảng 8 octet bất kỳ từ điểm bắt đầu của Mào đầu sau đó cộng thêm 2 octet. Có hai Tùy chọn đệm được sử dụng khi cần thiết để sắp xếp các Tùy chọn theo trật tự liên tiếp nhau và chèn mào đầu đang mang nó tới một bội số của 8 octet dài. Các Tùy chọn đệm này phải được nhận ra bởi tất cả các điểm xử lý IPv6: 0 Tùy chọn đệm 1 CHÚ THÍCH: Định dạng của các Tùy chọn đệm 1 là định dạng đặc biệt, nó không có trường độ dài và các trường giá trị. Tùy chọn đệm 1 được sử dụng để chèn một octet của bộ đệm vào miền Tùy chọn của một mào đầu. Nếu cần đến nhiều hơn một octet của bộ đệm thì Tùy chọn đệm N (mô tả trong phần tiếp theo) sẽ được sử dụng thay cho Tùy chọn đệm 1. Tùy chọn đệm N 1 Độ dài dữ liệu tùy chọn Dữ liệu tùy chọn Các Tùy chọn đệm N được sử dụng để chèn hai hoặc nhiều hơn hai octet của bộ đệm vào miền Tùy chọn của một mào đầu. Đối với N octet của bộ đệm, trường Độ dài dữ liệu tùy chọn có chứa giá trị N-2, và Dữ liệu tùy chọn bao gồm N-2 octet chưa có giá trị. 4.3.3. Mào đầu tùy chọn từng chặng Mào đầu tùy chọn từng chặng được sử dụng để mang những thông tin tùy chọn bắt buộc bị kiểm tra bởi tất cả các nút mạng trên đường đi của gói tin. Mào đầu tùy chọn từng chặng được nhận dạng bởi giá trị 0 của Mào đầu kế tiếp trong Phần mào đầu IPv6 và có định dạng như sau: Mào đầu kế tiếp : Sử dụng 8 bit. Xác định kiểu mào đầu ngay sau Mào đầu tùy chọn từng chặng, sử dụng các giá trị giống như trường Giao thức của IPv4 [TCVN 8072:2009] Độ dài mào đầu mở rộng : Sử dụng 8 bit. Kích thước của Mào đầu tùy chọn từng chặng theo đơn vị 8 octet (không tính đến 8 octet đầu tiên). Các Tùy chọn : Trường có độ dài thay đổi. Độ dài thay đổi sao cho Mào đầu tùy chọn từng chặng hoàn toàn là một bội số của 8 octet dài. Chứa một hoặc nhiều Tùy chọn (mã hóa TLV), như mô tả trong 4.3.2. Chỉ có các Tùy chọn từng chặng được xác định trong tiêu chuẩn này là các Tùy chọn đệm 1 và Đệm N quy định trong 4.3.2. 4.3.4. Mào đầu định tuyến Mào đầu định tuyến được sử dụng bởi một Nút nguồn IPv6 nhằm liệt kê tất cả các nút mạng trung gian mà gói tin IPv6 phải đi qua trên đường từ nguồn đến đích của gói tin. Chức năng này rất tương đồng với Nguồn không nghiêm ngặt và Tùy chọn tuyến ghi của IPv4 [TCVN 8072:2009]. Mào đầu định tuyến được nhận dạng bởi giá trị Mào đầu kế tiếp là 43 của mào đầu ngay trước nó và có định dạng như sau: Mào đầu kế tiếp Độ dài mào đầu mở rộng Kiểu định tuyến Phân đoạn còn lại Dữ liệu kiểu riêng Mào đầu kế tiếp : Sử dụng 8 bit. Giúp xác định kiểu mào đầu ngay sau Mào đầu định tuyến. Sử dụng chung các giá trị như các trường của giao thức IPv4. Độ dài mào đầu mở rộng : Sử dụng 8 bit. Kích thước của Mào đầu định tuyến theo đơn vị 8 octet (không tính đến 8 octet đầu tiên). Kiểu định tuyến : Sử dụng 8 bit. Giúp xác định các kiểu Mào đầu định tuyến khác nhau. Phân đoạn còn lại : Sử dụng 8 bit. Số phân đoạn tuyến còn lại. Tức là, số lượng các nút mạng trung gian vẫn còn phải đi qua của gói tin trước khi đến được đích cuối cùng. Dữ liệu kiểu riêng : Trường có độ dài thay đổi. Trường (có khuôn dạng xác định bởi Kiểu định tuyến) có độ dài thay đổi sao cho Mào đầu định tuyến là bội của độ dài 8 Octet. Nếu trong quá trình xử lý một gói tin đã nhận, một nút mạng gặp một Mào đầu định tuyến với giá trị Kiểu định tuyến chưa nhận diện được, hành động tiếp theo của các nút mạng phụ thuộc vào giá trị của trường Phân đoạn còn lại, như sau: • Nếu trường Phân đoạn còn lại bằng 0, nút mạng phải bỏ qua Mào đầu định tuyến và tiến hành xử lý mào đầu tiếp theo trong gói tin, mào đầu mà đã được xác định bởi trường Mào đầu kế tiếp trong Mào đầu định tuyến. • Nếu trường Phân đoạn còn lại khác 0, nút mạng phải loại bỏ gói tin và gửi một tin nhắn sự cố tham số ICMP, Mã 0 tới Địa chỉ nguồn của gói tin, trỏ tới Kiểu định tuyến chưa nhận diện được. Sau khi xử lý một Mào đầu định tuyến của gói tin đã nhận được, nếu một nút mạng trung gian xác định rằng gói tin được chuyển vào một liên kết có MTU liên kết nhỏ hơn so với kích thước của gói tin, nút mạng phải loại bỏ gói tin và gửi một Tin nhắn gói tin ICMP quá lớn đến Địa chỉ nguồn của gói tin. Kiểu 0 của Mào đầu định tuyến có định dạng như sau: Mào đầu kế tiếp Độ dài mào đầu mở rộng Kiểu định tuyến=0 Phân đoạn còn lại Dự trữ Địa chỉ [1] Địa chỉ [2] Địa chỉ [n] Mào đầu kế tiếp Sử dụng 8 bit. Xác định các kiểu của mào đầu ngay sau Mào đầu định tuyến. Sử dụng cùng một giá trị như các trường trong giao thức IPv4 [TCVN 8072:2009]. Độ dài mào đầu mở rộng Sử dụng 8 bit Chiều dài của Mào đầu định tuyến tính bằng đơn vị 8 octet, không bao gồm 8 octet đầu tiên. Với kiểu 0 của Mào đầu định tuyến, Chiều dài mào đầu mở rộng bằng hai lần số lượng địa chỉ trong mào đầu. Kiểu định tuyến : Trong trường hợp này là kiểu 0 Phân đoạn còn lại : Sử dụng 8 bit Số lượng các phân đoạn định tuyến còn lại, nghĩa là số lượng các nút mạng trung gian đã được liệt kê rõ ràng vẫn được truy cập trước khi đi đến đích cuối cùng. Dự trữ Sử dụng 32 bit dự trữ. Khởi tạo về 0 để truyền đi và bỏ qua khi nhận được. Địa chỉ [1 .. n] Vectơ của các địa chỉ 128 bit, đánh số từ 1 đến n. Các địa chỉ Multicast không được xuất hiện trong một Mào đầu định tuyến kiểu 0, hoặc trong trường Địa chỉ đích IPv6 của một gói tin mang Mào đầu định tuyến kiểu 0. Một Mào đầu định tuyến không bị kiểm tra hoặc xử lý cho đến khi nó tới nút mạng đã được xác định trong trường Địa chỉ đích của Phần mào đầu IPv6. Trong nút mạng, quá trình xử lý trường Mào đầu kế tiếp của mào đầu liền kề trước nó làm cho mô-đun Mào đầu định tuyến được gọi ra, trong trường hợp của Định tuyến kiểu 0, thực hiện các thuật toán sau đây: If Phân đoạn còn lại = 0 { tiến hành xử lý mào đầu tiếp theo trong gói tin, kiểu mào đầu đã được xác định bởi trường Mào đầu kế tiếp trong Mào đầu định tuyến } else if Độ dài mào đầu mở rộng là lẻ { gửi một tin nhắn sự cố tham số ICMP, Mã 0 đến các Địa chỉ nguồn, trỏ tới đến trường Độ dài mào đầu mở rộng, và loại bỏ gói tin } else { tính toán n - số lượng địa chỉ trong Mào đầu định tuyến, bằng cách chia Độ dài mào đầu mở rộng cho 2 if Phân đoạn còn lại lớn hơn n { gửi một tin nhắn sự cố tham số ICMP, Mã 0 đến các địa chỉ nguồn, trỏ vào trường Phân đoạn còn lại và loại bỏ gói tin } else { Giảm Phân đoạn còn lại đi 1; tính i - các chỉ số của địa chỉ tiếp theo sẽ được truy cập trong vectơ địa chỉ, bằng cách lấy n trừ đi Phân loại còn lại if Địa chỉ [i] hoặc Địa chỉ Đích IPv6 là Multicast { loại bỏ gói tin } else { hoán vị giữa Địa chỉ đích IPv6 và Địa chỉ [i] nếu Giới hạn số chặng của IPv6 là nhỏ hơn hoặc bằng 1 {gửi một tin nhắn ICMP về vượt quá giới hạn về thời gian, số chặng cho phép ở nút trung gian tới Địa chỉ nguồn và loại bỏ các gói tin } else { giảm Giới hạn số chặng đi, gửi lại gói tin tới mô đun IPv6 để truyền đến đích mới } } } } Ví dụ sau mô tả những tác động của các thuật toán trên trong trường hợp của một nút nguồn S gửi một gói tin đến đích nút D, sử dụng Mào đầu định tuyến để buộc gói tin phải định tuyến thông qua các nút trung gian I1, I2, I3. Các giá trị của Phần mào đầu IPv6 có liên quan và các trường Mào đầu định tuyến trên mỗi phân đoạn của đường đi của gói tin sẽ như sau: Khi gói dữ liệu truyền từ S đến I1: Địa chỉ nguồn = S Độ dài phân đoạn mở rộng = 6 Địa chỉ đích = I1 Phân đoạn còn lại = 3 Địa chỉ [1] = I2 Địa chỉ [2] = I3 Địa chỉ [3] = D Khi gói dữ liệu truyền từ I1 đến I2: Địa chỉ nguồn = S Độ dài phân đoạn mở rộng = 6 Địa chỉ đích = I2 Phân đoạn còn lại = 2 Địa chỉ [1] = I1 Địa chỉ [2] = I3 Địa chỉ [3] = D Khi gói dữ liệu truyền từ I2 đến I3: Địa chỉ nguồn = S Độ dài phân đoạn mở rộng = 6 Địa chỉ đích = I3 Phân đoạn còn lại = 1 Địa chỉ [1] = I1 Địa chỉ [2] = I2 Địa chỉ [3] = D Khi gói dữ liệu truyền từ I3 đến D: Địa chỉ nguồn = S Độ dài phân đoạn mở rộng = 6 Địa chỉ đích = D Phân đoạn còn lại = 0 Địa chỉ [1] = I1 Địa chỉ [2] = I2 Địa chỉ [3] = I3 4.3.5. Mào đầu phân mảnh Mào đầu phân mảnh được sử dụng khi một nguồn IPv6 gửi một gói tin lớn, không vừa MTU tuyến đến đích của nó CHÚ THÍCH: Không giống như IPv4, sự phân mảnh trong IPv6 chỉ được thực hiện bởi Nút nguồn, chứ không phải bởi các Bộ định tuyến dọc theo đường đi của gói tin. Mào đầu phân mảnh được xác định bởi giá trị của Mào đầu kế tiếp là 44 trong mào đầu liền kề trước nó, và nó có định dạng sau: Mào đầu kế tiếp Dự trữ Độ lệch phân mảnh Res M Bộ nhận dạng Mào đầu kế tiếp Sử dụng 8 bit Xác định kiểu của mào đầu ban đầu của Phần phân mảnh của gói tin gốc. Sử dụng các giá trị giống như trường Giao thức của IPv4 [TCVN 8072-2009]. Dự trữ Sử dụng 8 bit Trường dự trữ. Khởi tạo về 0 để truyền, bỏ qua khi nhận. Độ lệch phân mảnh Sử dụng 13 bit. Độ lệch theo đơn vị 8 octet của các dữ liệu sau mào đầu này, liên quan đến sự bắt đầu của Phần phân mảnh của gói tin gốc. Res Sử dụng 2 bit trường dự trữ. Khởi tạo về 0 để truyền, bỏ qua khi nhận. Cờ M Mang giá trị 1 có nghĩa là còn phân mảnh; Mang giá trị 0 có nghĩa đây là phân mảnh cuối cùng. Bộ nhận dạng Sử dụng 32 bit. Xem mô tả dưới đây. Để có thể gửi một gói tin lớn hơn đơn vị truyền tải tối đa - MTU của tuyến từ nguồn đến đích, nút nguồn có thể chia các gói tin thành các phân mảnh và gửi từng phân mảnh như là một gói tin riêng biệt sau đó được tổng hợp lại ở nút nhận. Đối với mỗi gói tin phân mảnh, nút nguồn tạo ra một giá trị nhận dạng. Với cùng một Địa chỉ nguồn và Địa chỉ đích, giá trị nhận dạng được tạo ra ở trên phải khác nhau đối với mỗi gói tin bị phân mảnh khác. Nếu có sự xuất hiện của Mào đầu định tuyến thì Địa chỉ đích của phân mảnh này là đích cuối cùng. Gói tin lớn ban đầu khi chưa phân mảnh được gọi là gói tin gốc, bao gồm hai phần, như minh họa: Gói tin gốc: Phần không phân mảnh Phần phân mảnh Phần không phân mảnh là Phần mào đầu IPv6 cộng với bất kỳ mào đầu mở rộng nào mà bắt buộc phải xử lý bởi các nút mạng trên đường truyền gói tin, có nghĩa là tất cả các mào đầu, bao gồm cả Mào đầu định tuyến nếu có, Mào đầu tùy chọn từng chặng nếu có, hoặc không có các mào đầu mở rộng nào khác. Phần Phân mảnh bao gồm các phần còn lại của gói tin, có nghĩa là, bất kỳ mào đầu mở rộng nào cần được xử lý chỉ tại Nút đích cuối cùng cộng với Mào đầu của tầng trên và dữ liệu. Phần phân mảnh của gói tin gốc được chia thành nhiều đoạn, mỗi đoạn (ngoại trừ đoạn cuối cùng - ngoài cùng bên phải) là một bội số của độ dài 8 octet. Các phân mảnh được truyền đi như các gói tin phân mảnh riêng biệt như minh họa: Gói tin gốc: Phần không phân mảnh Phân mảnh đầu tiên Phân mảnh thứ 2 … Phân mảnh cuối cùng Các gói phân mảnh: Phần không phân mảnh Mào đầu phân mảnh Phân mảnh đầu tiên Phần không phân mảnh Mào đầu phân mảnh Phân mảnh thứ 2 o o o Phần không phân mảnh Mào đầu phân mảnh Phân mảnh cuối cùng Mỗi gói tin phân mảnh gồm có: (1) Phần Không phân mảnh của gói tin gốc với Độ dài tải của Phần mào đầu IPv6 ban đầu thay đổi sao cho chỉ chứa độ dài của gói tin phân mảnh này (không bao gồm chiều dài của bản thân Phần mào đầu IPv6) và trường Mào đầu kế tiếp (của mào đầu cuối cùng của Phần không phân mảnh) thay đổi thành 44. (2) Một Mào đầu phân mảnh có chứa: • Giá trị Mào đầu kế tiếp xác định mào đầu đầu tiên của Phần phân mảnh của gói tin gốc. • Một Độ lệch phân mảnh chứa phần lệch của phân mảnh tính theo đơn vị 8 octet, tùy thuộc vào phần bắt đầu của Phần phân mảnh trong gói tin gốc. Phần độ lệch phân mảnh của đoạn đầu tiên (ngoài cùng bên trái) là 0. • Một cờ M có giá trị 0 nếu phân mảnh đó là cuối cùng (ngoài cùng bên phải), các trường hợp khác cờ M có giá trị là 1. • Giá trị nhận diện được tạo từ gói tin gốc. (3) Bản thân mỗi phân mảnh. Kích thước của các phân mảnh phải đảm bảo sao cho phân mảnh đó đi qua được MTU tuyến đến đích của các gói tin (hoặc các đích trong trường hợp Multicast). Tại điểm đích, các gói tin bị phân mảnh được tái lập lại thành hình dạng ban đầu của chúng (như lúc chưa phân mảnh), như minh họa: Tái lập gói tin gốc: Phần không phân mảnh Phần phân mảnh Sự tái lập tuân theo các quy tắc sau: Gói tin gốc được tái hợp lại chỉ từ các gói tin phân mảnh có cùng một địa chỉ nguồn, địa chỉ đích và mã nhận diện phân mảnh. Phần Không phân mảnh của gói tin đã tái lập bao gồm tất cả các mào đầu, nhưng không bao gồm Mào đầu phân mảnh của gói phân mảnh đầu tiên (có nghĩa là các gói tin có Độ lệch phân mảnh là không) với hai sự thay đổi sau đây: • Trường Mào đầu kế tiếp của mào đầu cuối cùng trong Phần không phân mảnh được nhập từ trường Mào đầu kế tiếp của Mào đầu phân mảnh của phân mảnh đầu tiên. • Độ dài tải của gói tin đã tái lập lại được tính toán từ độ dài của Phần không phân mảnh cộng với độ dài và phần lệch của phân mảnh cuối cùng. Ví dụ, công thức để tính toán Độ dài tải của gói tin gốc sau khi được tái lập: PL.orig = PL.first - FL.first - 8 + (8 * FO.last) + FL.last Trong đó: PL.orig = Trường Độ dài tải của gói tin sau tái lập. PL.first = Trường Độ dài tải của gói tin phân mảnh đầu tiên. FL.first = Độ dài của phân mảnh theo sau Mào đầu phân mảnh của gói tin phân mảnh đầu tiên. FO.last = Trường Độ lệch phân mảnh của Mào đầu phân mảnh của gói tin phân mảnh cuối cùng. FL.last = Độ dài của phân mảnh theo sau Mào đầu phân mảnh của gói tin phân mảnh cuối cùng. Phần phân mảnh của gói tin sau tái lập được xây dựng từ các phân mảnh theo sau các Mào đầu phân mảnh trong mỗi các gói tin phân mảnh. Chiều dài của từng phân mảnh được tính toán bằng cách lấy độ dài tải của gói tin trừ độ dài của các mào đầu nằm giữa Phần mào đầu IPv6 và phân mảnh của chính nó. Vị trí tương đối của nó trong Phần phân mảnh được tính từ giá trị Độ lệch phân mảnh của nó. Các Mào đầu phân mảnh không xuất hiện ở gói tin sau tái lập. Các lỗi sau đây có thể phát sinh trong quá trình tái lập các gói tin bị phân mảnh: - Nếu phân mảnh đã được nhận không đủ để hoàn thiện quá trình tái lập gói tin thì trong vòng 60 giây kể từ khi nhận phân mảnh đầu tiên, quá trình tái lập các gói tin đó phải được hủy bỏ và tất cả các phân mảnh đã được nhận được của gói dữ liệu đó phải được loại bỏ. Nếu phân mảnh đầu tiên (tức là, phân mảnh có phần độ lệch phân mảnh là 0) đã được nhận về thì một tin nhắn ICMP thông báo quá thời gian tái lập phân mảnh được gửi đến nguồn của các phân mảnh đó. - Nếu chiều dài của một phân mảnh (lấy từ trường Độ dài tải của gói tin phân mảnh) không phải là bội của 8 octet và cờ M của phân mảnh đó là 1 thì phân mảnh đó phải bị loại bỏ và gửi một Tin nhắn sự cố tham số ICMP, Mã 0 đến nguồn của phân mảnh đó, trỏ tới trường Độ dài tải của gói tin phân mảnh. - Nếu độ dài và phần lệch của một phân mảnh (khiến cho Độ dài tải của gói tin được tái lập lại từ phân mảnh đó) vượt quá 65.535 octet, thì phân mảnh đó phải được loại bỏ và một tin nhắn sự cố tham số ICMP, Mã 0 được gửi đến nguồn của phân mảnh, trỏ đến trường Độ lệch phân mảnh của gói tin phân mảnh. Các tình huống sau đây là không mong đợi, tuy nhiên nếu xuất hiện thì không được coi là lỗi: - Số lượng và nội dung của các mào đầu trước Mào đầu phân mảnh của các phân mảnh khác nhau của cùng một gói tin ban đầu có thể khác nhau. Khi các gói tin đến, bất kỳ mào đầu nào xuất hiện trước Mào đầu phân mảnh trong mỗi gói tin phân mảnh đều được xử lý trước khi các phân mảnh chuẩn bị vào quá trình tái lập. Chỉ có những mào đầu trong gói tin phân mảnh có phần lệch là 0 được giữ lại trong gói tin sau tái lập. - Các giá trị Mào đầu kế tiếp trong các Mào đầu phân mảnh của các phân mảnh khác nhau trong cùng một gói tin gốc có thể khác nhau. Chỉ có giá trị từ gói tin không có độ lệch phân mảnh được sử dụng cho quá trình tái lập. 4.3.6. Mào đầu tùy chọn đích Mào đầu tùy chọn đích được sử dụng để mang thông tin tùy chọn cần được kiểm tra chỉ bởi nút mạng đích của gói tin (hoặc các nút mạng đích của gói tin Multicast). Mào đầu tùy chọn đích được xác định bởi giá trị Mào đầu kế tiếp là 60 trong mào đầu trước liền kề trước, và có định dạng sau: Mào đầu kế tiếp Sử dụng 8 bit Xác định kiểu của mào đầu ngay sau Mào đầu tùy chọn đích. Sử dụng cùng một giá trị giống như trường Giao thức của IPv4 [TCVN 8072-2009]. Độ dài mào đầu mở rộng Sử dụng 8 bit Chiều dài của Mào đầu tùy chọn đích tính theo đơn vị 8 octet, không bao gồm 8 octet đầu tiên. Các tùy chọn Trường có độ dài thay đổi. Độ dài của Mào đầu tùy chọn đích là bội của độ dài 8 octet. Chứa một hoặc nhiều tùy chọn mã hóa TLV, như đã mô tả trong 4.3.2. Chỉ các tùy chọn đích đã được xác định trong tiêu chuẩn này là Đệm 1 và Đệm N đã quy định trong 4.3.2. Có thể có hai cách để mã hóa thông tin tùy chọn đích trong một gói tin IPv6: • Mã hóa như là một Tùy chọn trong Mào đầu tùy chọn đích • Mã hóa như là một mào đầu mở rộng riêng biệt. Các Mào đầu phân mảnh và Mào đầu xác thực chính là những ví dụ về cách mã hóa như một mào đầu mở rộng riêng biệt. Cách sử dụng này tùy thuộc vào yêu cầu Nút đích phải làm gì khi không hiểu các thông tin Tùy chọn: • Nếu yêu cầu là Nút đích loại bỏ gói tin và trong trường hợp Địa chỉ đích của gói tin không phải là một địa chỉ Multicast, nút đích gửi một Tin nhắn ICMP không nhận diện được kiểu đến địa chỉ nguồn của gói tin, thì thông tin có thể được mã hóa như một Mào đầu riêng biệt hoặc như một Tùy chọn trong Mào đầu tùy chọn đích với Kiểu tùy chọn có 2 bit bậc cao nhất mang giá trị là 11. • Với các yêu cầu khác, thông tin phải được mã hóa như là một tùy chọn trong Mào đầu tùy chọn đích với Kiểu tùy chọn có giá trị 00, 01, hoặc 10 trong hai bit bậc cao nhất, quá trình thực hiện xem 4.3.2. 4.3.7. Chỉ thị không có mào đầu kế tiếp Giá trị là 59 trong trường Mào đầu kế tiếp của Phần mào đầu IPv6 hoặc mào đầu mở rộng bất kỳ sẽ chỉ ra rằng không có gì sau mào đầu đó. Nếu trường Độ dài tải của Phần mào đầu IPv6 chỉ thị có các octet đi sau một mào đầu có trường Mào đầu kế tiếp có giá trị 59 thì những octet đó phải được bỏ qua, hoặc cho đi qua mà không bị thay đổi khi chuyển tiếp gói tin. 4.4. Các vấn đề về kích thước gói tin IPv6 yêu cầu tất cả liên kết trên Internet phải có MTU là 1280 octet hoặc hơn. Trên một liên kết bất kỳ, nếu không thể truyền tải một lần một gói gồm 1280 octet thì tầng dưới của IPv6 phải cung cấp phân mảnh và tái lập gói tin. Các liên kết có khả năng cấu hình MTU (ví dụ liên kết PPP [RFC-1661] phải được cấu hình để có một MTU gồm có ít nhất là 1280 octet. Tuy nhiên có thể cấu hình với một MTU gồm 1500 octet hoặc cao hơn để phù hợp với khả năng đóng gói (tunneling) nhưng vẫn phải đảm bảo không bị phân mảnh bởi tầng IPv6. Từ mỗi liên kết mà một nút mạng được gắn trực tiếp vào đó, nút mạng này phải xử lý được các gói tin lớn bằng MTU của liên kết đó. Cần phải nhấn mạnh rằng, các nút mạng IPv6 thực hiện việc tìm kiếm MTU tuyến [RFC-1981] để phát hiện và tận dụng lợi thế của các MTU tuyến lớn hơn 1280 octet. Tuy nhiên, một thực thi IPv6 tối thiểu (ví dụ: trong một khởi động ROM) có thể chỉ đơn giản là tự hạn chế nhằm gửi các gói tin không lớn hơn 1280 octet và bỏ qua quá trình thực hiện tìm kiếm MTU tuyến. Để gửi đi một gói tin lớn hơn MTU tuyến, một nút mạng có thể sử dụng Mào đầu phân mảnh IPv6 để phân mảnh các gói tin tại nguồn và tái lập lại gói tin tại điểm Đích (hoặc các Đích với trường hợp Multicast). Tuy nhiên, việc sử dụng phương pháp phân mảnh như vậy không được khuyến khích trong các ứng dụng cho phép điều chỉnh kích thước gói tin của mình để phù hợp với MTU tuyến (ví dụ như giảm kích thước các gói tin đến 1280 octet). Nút mạng phải có khả năng chấp nhận một gói tin phân mảnh mà sau khi tái lập có kích thước lớn như 1500 octet. Một nút mạng có thể chấp nhận các gói tin bị phân mảnh được lắp ráp lại có kích thước lớn hơn 1500 octet. Một giao thức tầng trên hoặc ứng dụng mà phụ thuộc vào sự phân mảnh IPv6 để gửi gói tin lớn hơn MTU trong một đường dẫn thì không nên gửi các gói tin lớn hơn 1500 octet trừ khi nó chắc chắn rằng Nút đích có khả năng lắp ráp lại các gói tin có kích thước lớn. Trong quá trình nhận phản hồi khi một gói tin IPv6 được gửi đến một Đích IPv4 (ví dụ, một gói tin trải qua quá trình biên dịch từ IPv6 sang IPv4), Nút nguồn IPv6 có thể nhận được một tin nhắn ICMP Gói tin quá lớn thông báo một MTU của chặng tiếp theo có ít hơn 1280 octet. Trong trường hợp này, các nút mạng IPv6 không cần thiết làm giảm kích thước của các gói tin tiếp theo để ít hơn 1280, nhưng phải mang một Mào đầu phân mảnh trong các gói tin đó để bộ định tuyến biên dịch IPv6 về IPv4 có thể nhận được một giá trị nhận dạng phù hợp để có thể sử dụng trong quá trình phân mảnh IPv4. Lưu ý rằng điều này có nghĩa là kích thước gói có thể được giảm xuống còn 1232 octet (1280 trừ đi 40 cho Phần mào đầu IPv6 và 8 cho Mào đầu phân mảnh), và tiếp tục nhỏ hơn nếu sử dụng thêm các mào đầu mở rộng. 4.5. Các Nhãn luồng 20 bit của trường Nhãn luồng trong Phần mào đầu IPv6 có thể được sử dụng bởi một Nút nguồn để ghi nhãn chuỗi các gói tin được yêu cầu xử lý đặc biệt bởi các bộ định tuyến IPv6, chẳng hạn như yêu cầu "không cần thiết lập mặc định về chất lượng dịch vụ" hoặc dịch vụ đòi hỏi "thời gian thực". Tính năng này của IPv6 hiện vẫn đang thử nghiệm và có thể được sửa đổi khi yêu cầu về điều khiển luồng trên mạng Internet trở nên rõ ràng hơn. Các Máy chủ hoặc các bộ định tuyến không hỗ trợ các chức năng của trường Nhãn luồng được yêu cầu: thiết lập trường này về 0 khi khởi tạo gói tin; bỏ qua trường này và không thay đổi thông tin của trường khi chuyển tiếp gói tin; bỏ qua trường này khi nhận được gói tin. 4.6. Phân lớp lưu lượng 8 bit của trường Phân lớp lưu lượng trong Phần mào đầu IPv6 được sử dụng bởi các nút mạng gốc và các bộ định tuyến để xác định và phân biệt các loại hoặc sự ưu tiên khác nhau của các gói tin IPv6. Các yêu cầu chung sau đây áp dụng cho trường Phân lớp lưu lượng: • Giao diện dịch vụ IPv6 trong một nút mạng phải đảm bảo giao thức tầng trên hỗ trợ giá trị của các bit phân lớp lưu lượng trong các gói tin được khởi nguồn từ giao thức tầng trên đó. Giá trị mặc định là 0 cho cả 8 bit. • Các nút mạng hỗ trợ sử dụng một vài hoặc tất cả các bit trong Phân lớp lưu lượng được phép thay đổi giá trị của các bit này trong các gói tin mà chúng tạo ra, chuyển tiếp hoặc nhận về theo yêu cầu sử dụng cụ thể. Các nút mạng bỏ qua và không thay đổi bất kỳ bit nào của Phân lớp lưu lượng mà chúng không hỗ trợ sử dụng cụ thể. • Một Giao thức tầng trên phải không được coi giá trị của các bit Phân lớp lưu lượng trong một gói tin nhận được giống như giá trị được gửi bởi nguồn của gói tin. 4.7. Các vấn đề về giao thức tầng trên 4.7.1. Tổng kiểm tra tầng trên Giao thức giao vận hoặc giao thức tầng trên bất kỳ nào mà có chứa các địa chỉ từ các Mào đầu IP trong tính toán kiểm tra tổng của nó phải được điều chỉnh để sử dụng trên IPv6 để chứa 128 bit địa chỉ thay cho 32 bit địa chỉ IPv4. Một cách cụ thể, hình sau minh họa "Mào đầu giả" TCP và UDP cho IPv6: Địa chỉ nguồn Địa chỉ đích Độ dài gói tin tầng trên Để trống Mào đầu kế tiếp • Nếu các gói tin IPv6 chứa một Mào đầu định tuyến, địa chỉ đích được sử dụng trong Mào đầu giả là địa chỉ đích đến cuối cùng. Tại nút nguồn, địa chỉ đó sẽ là thành phần cuối cùng của Mào đầu định tuyến, tại điểm nhận (hoặc nhiều điểm nhận), địa chỉ đó sẽ được đưa vào trường Địa chỉ Đích của Phần mào đầu IPv6. • Giá trị Mào đầu kế tiếp trong Mào đầu giả xác định các giao thức tầng trên (ví dụ, giá trị 6 cho TCP, hoặc giá trị 17 cho UDP). Nó sẽ khác với giá trị Mào đầu kế tiếp trong Phần mào đầu IPv6 nếu có các mào đầu mở rộng giữa Phần mào đầu IPv6 và mào đầu của tầng trên. • Độ dài gói tin tầng trên trong Mào đầu giả là độ dài của Mào đầu của tầng trên và phần dữ liệu (ví dụ, mào đầu TCP cộng với phần dữ liệu TCP). Một số giao thức tầng trên mang thông tin chiều dài của nó (ví dụ, trường Độ dài trong Mào đầu UDP). Với các giao thức như vậy, đó là chiều dài được sử dụng trong Mào đầu giả. Các giao thức khác (chẳng hạn như TCP) không mang thông tin chiều dài của chúng thì trong trường hợp này độ dài được sử dụng trong Mào đầu giả là Độ dài tải từ Phần mào đầu IPv6 trừ đi độ dài của Phần mào đầu mở rộng bất kỳ hiện tại nằm giữa Phần mào đầu IPv6 và Mào đầu của tầng trên. • Không giống như IPv4, khi các gói tin UDP được khởi tạo bởi một nút mạng IPv6, việc kiểm tra tổng UDP là bắt buộc. Có nghĩa là, bất kỳ khi nào khởi tạo một gói tin UDP, một nút mạng IPv6 phải tính toán giá trị kiểm tra tổng UDP trên gói và Mào đầu giả, và nếu kết quả tính toán là 0, nó phải được thay đổi sang hệ cơ số 16 về giá trị FFFF để đưa vào Mào đầu của UDP. Nút nhận IPv6 phải loại bỏ các gói tin UDP có chứa giá trị Kiểm tra tổng là 0, và ghi nhận lỗi. 4.7.2. Vòng đời tối đa của gói tin Không giống như IPv4, các nút mạng IPv6 không yêu cầu thực thi "vòng đời tối đa" của gói tin. Đó là lý do trường Thời gian sống trong IPv4 được đổi tên thành Giới hạn số chặng trong IPv6. Trong thực tế là rất ít thiết bị triển khai IPv4 tuân thủ yêu cầu giới hạn thời gian sống của gói tin, do đó, thực tế đây không phải là một sự thay đổi. Bất kỳ giao thức tầng trên nào phụ thuộc vào tầng internet (cho dù IPv4 hoặc IPv6) để hạn chế vòng đời gói tin phải được nâng cấp để có thể cung cấp các cơ chế của chính nó để phát hiện và loại bỏ các gói tin lỗi thời. 4.7.3. Kích thước tải tối đa của tầng trên Khi tính toán kích thước tải tối đa cho phép truyền của dữ liệu tầng trên, một giao thức tầng trên sẽ phải tính đến kích thước lớn hơn của Phần mào đầu IPv6 so với Mào đầu IPv4. Ví dụ, trong IPv4 tùy chọn MSS (Maximum Segment Size - Kích thước phân đoạn tối đa) của TCP được tính bằng cách lấy kích thước gói tin lớn nhất (giá trị mặc định hoặc giá trị có được từ quá trình tìm MTU tuyến) trừ đi 40 octet (20 octet cho độ dài tối thiểu của Mào đầu IPv4 cộng với 20 octet cho độ dài tối thiểu của mào đầu TCP). Khi sử dụng TCP qua IPv6, MSS phải lấy kích thước gói tin tối đa trừ đi 60 octet, bởi vì độ dài tối thiểu của Phần mào đầu IPv6 (tức là một Phần mào đầu IPv6 không có các mào đầu mở rộng) dài hơn 20 octet so với độ dài tối thiểu của Mào đầu IPv4. 4.7.4. Phản hồi từ các gói tin mang Mào đầu định tuyến Khi giao thức tầng trên gửi một hay nhiều gói tin để phản hồi lại gói tin đã nhận có chứa Mào đầu định tuyến, các gói tin phản hồi này phải không bao gồm Mào đầu định tuyến được lấy tự động bằng cách đảo ngược Mào đầu định tuyến đã nhận trừ khi đã xác minh được tính toàn vẹn và tính xác thực của Địa chỉ nguồn và Mào đầu định tuyến của gói tin đã nhận được (ví như thông qua việc sử dụng Mào đầu xác thực trong gói tin đã nhận được). Nói cách khác, chỉ có các loại gói tin sau đây mới được phép phản hồi lại gói tin đã nhân có chứa Mào đầu định tuyến: • Các gói tin phản hồi không mang các Mào đầu định tuyến. • Các gói tin phản hồi mang các Mào đầu định tuyến mà không phải lấy được từ đảo ngược Mào đầu định tuyến của gói tin nhận. Ví dụ như Mào đầu định tuyến sinh ra từ quá trình cấu hình nội bộ. • Các gói tin phản hồi mang các Mào đầu định tuyến lấy được bằng cách đảo ngược Mào đầu định tuyến của gói tin nhận khi và chỉ khi đã xác minh được tính toàn vẹn và tính xác thực của Địa chỉ nguồn cùng với Mào đầu định tuyến của gói tin đã nhận được. Phụ lục A (Quy định) Quy định và cách sử dụng trường Nhãn luồng Một luồng là một chuỗi thứ tự các gói tin được gửi từ một nút nguồn cụ thể đến một nút đích cụ thể (có thể là địa chỉ Unicast hoặc Multicast) mà phía nguồn muốn xử lý đặc biệt bởi các bộ định tuyến trên đường đi của các gói tin. Việc xử lý đặc biệt này có thể được truyền tải tới các bộ định tuyến bởi một giao thức điều khiển (chẳng hạn như là một giao thức dành riêng tài nguyên - RSVP) hoặc bởi các thông tin được mang trong chính các gói tin trong luồng đó, ví dụ như bên trong Tùy chọn từng chặng. Chi tiết về những giao thức điều khiển hoặc các Tùy chọn ở trên không thuộc phạm vi của tiêu chuẩn này. Có thể có nhiều luồng được truyền từ một nguồn tới một đích, cũng như phần lưu lượng không có sự liên kết với bất kỳ luồng nào. Một luồng dữ liệu được xác định duy nhất bởi sự kết hợp của một địa chỉ nguồn và Nhãn luồng khác 0. Các gói tin không thuộc về một luồng nào thì mang một Nhãn luồng là 0. Nhãn luồng được gán vào một luồng dữ liệu bởi nút nguồn của luồng đó. Các Nhãn luồng mới phải lựa chọn ngẫu nhiên và thống nhất trong khoảng từ 1 đến FFFFF (hệ cơ số 16). Mục đích của việc phân bổ ngẫu nhiên là để tạo ra tập hợp các bit bất kỳ bên trong trường Nhãn luồng phù hợp cho việc sử dụng như một mã băm qua các bộ định tuyến để tìm kiếm tình trạng liên quan đến luồng đó. Tất cả các gói tin thuộc cùng luồng dữ liệu được gửi đi phải có cùng địa chỉ nguồn, địa chỉ đích và Nhãn luồng. Nếu bất kỳ gói tin nào trong các gói tin trên có chứa Mào đầu tùy chọn từng chặng thì ngay từ nguồn gửi, tất cả các gói tin đó phải mang Mào đầu tùy chọn từng chặng có cùng nội dung (ngoại trừ trường Mào đầu kế tiếp của Mào đầu tùy chọn từng chặng). Nếu một trong những gói tin trên mang Mào đầu định tuyến thì tất cả các gói tin này khi được tạo ra phải mang cùng nội dung trong tất cả các mào đầu mở rộng, bao gồm cả Mào đầu định tuyến (ngoài trừ trường Mào đầu kế tiếp trong Mào đầu định tuyến). Các bộ định tuyến hoặc các nút đích được cho phép xác minh (nhưng không bắt buộc) tính thỏa mãn của những điều kiện này. Nếu phát hiện vi phạm, nó sẽ báo cáo về nguồn bằng các Tin nhắn sự cố tham số ICMP, Mã 0, trỏ vào octet có thứ tự cao trong trường Nhãn luồng (tức là, độ lệch 1 trong gói tin IPv6). Thời gian tồn tại tối đa của bất kỳ trạng thái xử lý luồng nào được thiết lập dọc theo đường truyền của luồng phải được xác định như một phần của sự mô tả cơ cấu thiết lập trạng thái. Ví dụ, giao thức dành riêng tài nguyên hoặc thiết lập luồng của tùy chọn từng chặng. Một nút nguồn không được tái sử dụng Nhãn luồng cho một luồng mới trong khoảng thời gian tồn tại tối đa của bất kỳ trạng thái xử lý luồng nào mà có thể đã được thiết lập cho việc sử dụng Nhãn luồng đó từ trước. Khi một Nút mạng dừng và bắt đầu lại (ví dụ như gặp sự cố), nó không được sử dụng lại Nhãn luồng mà nó có thể đã sử dụng cho các luồng trước đó khi thời gian tồn tại chưa hết. Điều này được thực hiện bằng cách lưu trữ tình trạng sử dụng Nhãn luồng ở một nơi ổn định nhằm tránh xung đột hoặc tránh sử dụng lặp lại các Nhãn luồng cho đến khi hết thời gian tồn tại tối đa của bất kỳ luồng nào. Nếu biết thời gian tối thiểu cho việc khởi động lại nút, khoảng thời gian đó có thể trừ đi trong thời gian đợi cần thiết trước khi bắt đầu phân bổ các Nhãn luồng mới. Tất cả hoặc phần lớn các gói tin thuộc về luồng không bắt buộc phải mang các Nhãn luồng khác 0. Điều này được đặt ra để lưu ý bộ phận thiết kế giao thức và người thực hiện không đưa ra các giả định khác. Ví dụ, sẽ là không thận trọng khi thiết kế một bộ định tuyến mà chức năng của nó chỉ dùng cho các gói tin thuộc về các luồng hoặc thiết kế một phương án nén mào đầu mà chỉ thực hiện trên các gói tin thuộc về các luồng. Phụ lục B (Quy định) Quy định hướng dẫn định dạng cho các Tùy chọn Phụ lục này đưa ra một số khuyến nghị về việc làm thế nào để bố trí các trường khi thiết kế các tùy chọn mới để sử dụng trong Mào đầu tùy chọn từng chặng hoặc Mào đầu tùy chọn đích, như đã mô tả trong 4.3.2. Những hướng dẫn này được dựa trên các giả định sau đây: • Một tính năng mong muốn là mọi trường gồm nhiều octet trong vùng dữ liệu tùy chọn của một tùy chọn được sắp xếp trên giới hạn thông thường của chúng, nghĩa là, các trường có độ dài n octet được đặt tại một bội số nguyên của n octet tính từ điểm bắt đầu của Mào đầu tùy chọn từng chặng hoặc Mào đầu tùy chọn đích, với n = 1, 2, 4 hoặc 8. • Một tính năng mong muốn khác là Mào đầu tùy chọn từng chặng hoặc Mào đầu tùy chọn đích chiếm dụng số lượng bit ít nhất có thể, đảm bảo yêu cầu các Mào đầu là một bội số nguyên của độ dài 8 octet. • Có thể giả định rằng, khi có sự hiện diện của một trong hai Mào đầu trên, chúng mang một số lượng tùy chọn rất nhỏ, thông thường chỉ có một. Những giả định này gợi ý một phương pháp để bố trí, sắp xếp các trường của một tùy chọn như sau: thứ tự của các trường từ nhỏ nhất đến lớn nhất, không có bộ đệm bên trong, sau đó phân tách yêu cầu sắp xếp cho toàn bộ tùy chọn dựa trên yêu cầu sắp xếp trường lớn nhất (tối đa lên đến 8 octet). Cách tiếp cận này được minh họa trong các ví dụ sau đây: Ví dụ 1: Nếu một tùy chọn X yêu cầu hai trường dữ liệu, một có chiều dài 8 octet và một có chiều dài 4 octet, nó sẽ được bố trí như sau: Kiểu tùy chọn = X Độ dài dữ liệu tùy chọn = 12 Trường 4 octet Trường 8 octet Yêu cầu sắp xếp của nó là 8n + 2, để đảm bảo rằng các trường 8 octet bắt đầu tại bội số của độ lệch 8 octet từ vị trí khởi đầu của mào đầu xung quanh nó. Mào đầu tùy chọn từng chặng hoặc Mào đầu tùy chọn đích hoàn chỉnh có chứa một tùy chọn này sẽ trông như sau: Mào đầu kế tiếp Độ dài mào đầu mở rộng = 1 Kiểu tùy chọn = X Độ dài dữ liệu tùy chọn = 12 Trường 4 octet Trường 8 octet Ví dụ 2: Nếu một tùy chọn Y yêu cầu ba trường dữ liệu, một có chiều dài 4 octet, một có chiều dài 2 octet, và một có chiều dài 1 octet, nó sẽ được bố trí như sau: Kiểu tùy chọn = Y Độ dài dữ liệu tùy chọn = 7 Trường 1 octet Trường 2 octet Trường 4 octet Yêu cầu sắp xếp nó là 4n + 3, đảm bảo rằng trường 4 octet bắt đầu tại bội số của độ lệch 4 octet từ vị trí khởi đầu của Mào đầu xung quanh nó. Mào đầu tùy chọn từng chặng hoặc Mào đầu tùy chọn đích hoàn chỉnh có chứa một tùy chọn này sẽ như sau: Mào đầu kế tiếp Độ dài mào đầu mở rộng = 1 Tùy chọn Đệm1 = 0 Kiểu tùy chọn = Y Độ dài dữ liệu tùy chọn = 7 Trường 1 octet Trường 2 octet Trường 4 octet Tùy chọn Đệm N = 1 Độ dài dữ liệu tùy chọn = 2 0 0 Ví dụ 3: Một Mào đầu tùy chọn từng chặng hoặc Mào đầu tùy chọn đích chứa cả 2 tùy chọn X và Y từ ví dụ 1 và 2 sẽ có một trong 2 định dạng sau, phụ thuộc vào tùy chọn nào xuất hiện trước: Mào đầu kế tiếp Độ dài mào đầu mở rộng = 3 Kiểu tùy chọn = X Độ dài dữ liệu tùy chọn = 12 Trường 4 octet Trường 8 octet Tùy chọn Đệm N = 1 Độ dài dữ liệu tùy chọn = 1 0 Kiểu tùy chọn = Y Độ dài dữ liệu tùy chọn = 7 Trường 1 octet Trường 2 octet Trường 4 octet Tùy chọn Đệm N = 1 Độ dài dữ liệu tùy chọn = 2 0 0 Mào đầu kế tiếp Độ dài mào đầu mở rộng = 3 Tùy chọn Đệm1=0 Kiểu tùy chọn = Y Độ dài dữ liệu tùy chọn = 7 Trường 1 octet Trường 2 octet Trường 4 octet Tùy chọn Đệm N = 1 Độ dài dữ liệu tùy chọn = 4 0 0 0 0 Kiểu tùy chọn = X Độ dài dữ liệu tùy chọn = 12 Trường 4 octet Trường 8 octet MỤC LỤC 1 Phạm vi áp dụng 2 Tài liệu viện dẫn 3 Thuật ngữ và định nghĩa 4 Quy định kỹ thuật 4.1 Giới thiệu 4.2 Định dạng của Phần mào đầu của IPv6 4.3 Các mào đầu mở rộng của IPv6 4.3.1 Thứ tự của các mào đầu mở rộng 4.3.2 Các Tùy chọn 4.3.3 Mào đầu tùy chọn từng chặng 4.3.4 Mào đầu định tuyến 4.3.5 Mào đầu phân mảnh 4.3.6 Mào đầu tùy chọn đích 4.3.7 Chỉ thị không có mào đầu kế tiếp 4.4 Các vấn đề về kích thước gói tin 4.5 Các Nhãn luồng 4.6 Phân lớp lưu lượng 4.7 Các vấn đề về giao thức tầng trên 4.7.1 Tổng kiểm tra tầng trên 4.7.2 Vòng đời tối đa của gói tin 4.7.3 Kích thước tối đa của tầng trên 4.7.4 Phản hồi từ các gói tin mang Mào đầu định tuyến Phụ lục A (Quy định) Quy định và cách sử dụng trường Nhãn luồng Phụ lục B (Quy định) Quy định hướng dẫn định dạng cho các Tùy chọn